1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- //===----- CGCUDARuntime.h - Interface to CUDA Runtimes ---------*- C++ -*-===//
- //
- // 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.
- //
- //===----------------------------------------------------------------------===//
- #ifndef LLVM_CLANG_LIB_CODEGEN_CGCUDARUNTIME_H
- #define LLVM_CLANG_LIB_CODEGEN_CGCUDARUNTIME_H
- namespace llvm {
- class Function;
- }
- namespace clang {
- class CUDAKernelCallExpr;
- namespace CodeGen {
- class CodeGenFunction;
- class CodeGenModule;
- class FunctionArgList;
- class ReturnValueSlot;
- class RValue;
- class CGCUDARuntime {
- protected:
- CodeGenModule &CGM;
- public:
- CGCUDARuntime(CodeGenModule &CGM) : CGM(CGM) {}
- virtual ~CGCUDARuntime();
- virtual RValue EmitCUDAKernelCallExpr(CodeGenFunction &CGF,
- const CUDAKernelCallExpr *E,
- ReturnValueSlot ReturnValue);
- /// Emits a kernel launch stub.
- virtual void emitDeviceStub(CodeGenFunction &CGF, FunctionArgList &Args) = 0;
- /// Constructs and returns a module initialization function or nullptr if it's
- /// not needed. Must be called after all kernels have been emitted.
- virtual llvm::Function *makeModuleCtorFunction() = 0;
- /// Returns a module cleanup function or nullptr if it's not needed.
- /// Must be called after ModuleCtorFunction
- virtual llvm::Function *makeModuleDtorFunction() = 0;
- };
- /// Creates an instance of a CUDA runtime class.
- CGCUDARuntime *CreateNVCUDARuntime(CodeGenModule &CGM);
- }
- }
- #endif
|