123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- //===----- CGCUDARuntime.cpp - Interface to CUDA Runtimes -----------------===//
- //
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
- // See https://llvm.org/LICENSE.txt for license information.
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- //
- //===----------------------------------------------------------------------===//
- //
- // This provides an abstract class for CUDA code generation. Concrete
- // subclasses of this implement code generation for specific CUDA
- // runtime libraries.
- //
- //===----------------------------------------------------------------------===//
- #include "CGCUDARuntime.h"
- #include "CGCall.h"
- #include "CodeGenFunction.h"
- #include "clang/AST/Decl.h"
- #include "clang/AST/ExprCXX.h"
- using namespace clang;
- using namespace CodeGen;
- CGCUDARuntime::~CGCUDARuntime() {}
- RValue CGCUDARuntime::EmitCUDAKernelCallExpr(CodeGenFunction &CGF,
- const CUDAKernelCallExpr *E,
- ReturnValueSlot ReturnValue) {
- llvm::BasicBlock *ConfigOKBlock = CGF.createBasicBlock("kcall.configok");
- llvm::BasicBlock *ContBlock = CGF.createBasicBlock("kcall.end");
- CodeGenFunction::ConditionalEvaluation eval(CGF);
- CGF.EmitBranchOnBoolExpr(E->getConfig(), ContBlock, ConfigOKBlock,
- /*TrueCount=*/0);
- eval.begin(CGF);
- CGF.EmitBlock(ConfigOKBlock);
- CGF.EmitSimpleCallExpr(E, ReturnValue);
- CGF.EmitBranch(ContBlock);
- CGF.EmitBlock(ContBlock);
- eval.end(CGF);
- return RValue::get(nullptr);
- }
|