forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			47 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
//===----- CGCUDARuntime.cpp - Interface to CUDA Runtimes -----------------===//
 | 
						|
//
 | 
						|
//                     The LLVM Compiler Infrastructure
 | 
						|
//
 | 
						|
// This file is distributed under the University of Illinois Open Source
 | 
						|
// License. See LICENSE.TXT for details.
 | 
						|
//
 | 
						|
//===----------------------------------------------------------------------===//
 | 
						|
//
 | 
						|
// 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);
 | 
						|
}
 |