1226586Sdim//===----- CGCUDARuntime.h - Interface to CUDA Runtimes ---------*- C++ -*-===//
2226586Sdim//
3226586Sdim//                     The LLVM Compiler Infrastructure
4226586Sdim//
5226586Sdim// This file is distributed under the University of Illinois Open Source
6226586Sdim// License. See LICENSE.TXT for details.
7226586Sdim//
8226586Sdim//===----------------------------------------------------------------------===//
9226586Sdim//
10226586Sdim// This provides an abstract class for CUDA code generation.  Concrete
11226586Sdim// subclasses of this implement code generation for specific CUDA
12226586Sdim// runtime libraries.
13226586Sdim//
14226586Sdim//===----------------------------------------------------------------------===//
15226586Sdim
16226586Sdim#ifndef CLANG_CODEGEN_CUDARUNTIME_H
17226586Sdim#define CLANG_CODEGEN_CUDARUNTIME_H
18226586Sdim
19226586Sdimnamespace clang {
20226586Sdim
21226586Sdimclass CUDAKernelCallExpr;
22226586Sdim
23226586Sdimnamespace CodeGen {
24226586Sdim
25226586Sdimclass CodeGenFunction;
26226586Sdimclass CodeGenModule;
27226586Sdimclass FunctionArgList;
28226586Sdimclass ReturnValueSlot;
29226586Sdimclass RValue;
30226586Sdim
31226586Sdimclass CGCUDARuntime {
32226586Sdimprotected:
33226586Sdim  CodeGenModule &CGM;
34226586Sdim
35226586Sdimpublic:
36226586Sdim  CGCUDARuntime(CodeGenModule &CGM) : CGM(CGM) {}
37226586Sdim  virtual ~CGCUDARuntime();
38226586Sdim
39226586Sdim  virtual RValue EmitCUDAKernelCallExpr(CodeGenFunction &CGF,
40226586Sdim                                        const CUDAKernelCallExpr *E,
41226586Sdim                                        ReturnValueSlot ReturnValue);
42226586Sdim
43226586Sdim  virtual void EmitDeviceStubBody(CodeGenFunction &CGF,
44226586Sdim                                  FunctionArgList &Args) = 0;
45226586Sdim
46226586Sdim};
47226586Sdim
48226586Sdim/// Creates an instance of a CUDA runtime class.
49226586SdimCGCUDARuntime *CreateNVCUDARuntime(CodeGenModule &CGM);
50226586Sdim
51226586Sdim}
52226586Sdim}
53226586Sdim
54226586Sdim#endif
55