1//===----- CGOpenCLRuntime.h - Interface to OpenCL Runtimes -----*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This provides an abstract class for OpenCL code generation.  Concrete
11// subclasses of this implement code generation for specific OpenCL
12// runtime libraries.
13//
14//===----------------------------------------------------------------------===//
15
16#ifndef CLANG_CODEGEN_OPENCLRUNTIME_H
17#define CLANG_CODEGEN_OPENCLRUNTIME_H
18
19#include "clang/AST/Type.h"
20#include "llvm/IR/Type.h"
21#include "llvm/IR/Value.h"
22
23namespace clang {
24
25class VarDecl;
26
27namespace CodeGen {
28
29class CodeGenFunction;
30class CodeGenModule;
31
32class CGOpenCLRuntime {
33protected:
34  CodeGenModule &CGM;
35
36public:
37  CGOpenCLRuntime(CodeGenModule &CGM) : CGM(CGM) {}
38  virtual ~CGOpenCLRuntime();
39
40  /// Emit the IR required for a work-group-local variable declaration, and add
41  /// an entry to CGF's LocalDeclMap for D.  The base class does this using
42  /// CodeGenFunction::EmitStaticVarDecl to emit an internal global for D.
43  virtual void EmitWorkGroupLocalVarDecl(CodeGenFunction &CGF,
44                                         const VarDecl &D);
45
46  virtual llvm::Type *convertOpenCLSpecificType(const Type *T);
47};
48
49}
50}
51
52#endif
53