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