CGCUDARuntime.cpp revision 314564
1//===----- CGCUDARuntime.cpp - Interface to CUDA Runtimes -----------------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// This provides an abstract class for CUDA code generation. Concrete 11// subclasses of this implement code generation for specific CUDA 12// runtime libraries. 13// 14//===----------------------------------------------------------------------===// 15 16#include "CGCUDARuntime.h" 17#include "CGCall.h" 18#include "CodeGenFunction.h" 19#include "clang/AST/Decl.h" 20#include "clang/AST/ExprCXX.h" 21 22using namespace clang; 23using namespace CodeGen; 24 25CGCUDARuntime::~CGCUDARuntime() {} 26 27RValue CGCUDARuntime::EmitCUDAKernelCallExpr(CodeGenFunction &CGF, 28 const CUDAKernelCallExpr *E, 29 ReturnValueSlot ReturnValue) { 30 llvm::BasicBlock *ConfigOKBlock = CGF.createBasicBlock("kcall.configok"); 31 llvm::BasicBlock *ContBlock = CGF.createBasicBlock("kcall.end"); 32 33 CodeGenFunction::ConditionalEvaluation eval(CGF); 34 CGF.EmitBranchOnBoolExpr(E->getConfig(), ContBlock, ConfigOKBlock, 35 /*TrueCount=*/0); 36 37 eval.begin(CGF); 38 CGF.EmitBlock(ConfigOKBlock); 39 CGF.EmitSimpleCallExpr(E, ReturnValue); 40 CGF.EmitBranch(ContBlock); 41 42 CGF.EmitBlock(ContBlock); 43 eval.end(CGF); 44 45 return RValue::get(nullptr); 46} 47