CGCUDARuntime.h revision 6c0aa5ff6e6253db0f993053599e2a52b5b93b2d
16c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbourne//===----- CGCUDARuntime.h - Interface to CUDA Runtimes ---------*- C++ -*-===// 26c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbourne// 36c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbourne// The LLVM Compiler Infrastructure 46c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbourne// 56c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbourne// This file is distributed under the University of Illinois Open Source 66c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbourne// License. See LICENSE.TXT for details. 76c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbourne// 86c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbourne//===----------------------------------------------------------------------===// 96c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbourne// 106c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbourne// This provides an abstract class for CUDA code generation. Concrete 116c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbourne// subclasses of this implement code generation for specific CUDA 126c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbourne// runtime libraries. 136c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbourne// 146c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbourne//===----------------------------------------------------------------------===// 156c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbourne 166c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbourne#ifndef CLANG_CODEGEN_CUDARUNTIME_H 176c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbourne#define CLANG_CODEGEN_CUDARUNTIME_H 186c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbourne 196c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbournenamespace clang { 206c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbourne 216c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbourneclass CUDAKernelCallExpr; 226c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbourne 236c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbournenamespace CodeGen { 246c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbourne 256c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbourneclass CodeGenFunction; 266c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbourneclass CodeGenModule; 276c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbourneclass ReturnValueSlot; 286c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbourneclass RValue; 296c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbourne 306c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbourneclass CGCUDARuntime { 316c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbourneprotected: 326c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbourne CodeGenModule &CGM; 336c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbourne 346c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbournepublic: 356c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbourne CGCUDARuntime(CodeGenModule &CGM) : CGM(CGM) {} 366c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbourne virtual ~CGCUDARuntime(); 376c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbourne 386c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbourne virtual RValue EmitCUDAKernelCallExpr(CodeGenFunction &CGF, 396c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbourne const CUDAKernelCallExpr *E, 406c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbourne ReturnValueSlot ReturnValue); 416c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbourne 426c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbourne}; 436c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbourne 446c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbourne/// Creates an instance of a CUDA runtime class. 456c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter CollingbourneCGCUDARuntime *CreateNVCUDARuntime(CodeGenModule &CGM); 466c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbourne 476c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbourne} 486c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbourne} 496c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbourne 506c0aa5ff6e6253db0f993053599e2a52b5b93b2dPeter Collingbourne#endif 51