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 LLVM_CLANG_LIB_CODEGEN_CGOPENCLRUNTIME_H
17#define LLVM_CLANG_LIB_CODEGEN_CGOPENCLRUNTIME_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  llvm::Type *PipeTy;
36
37public:
38  CGOpenCLRuntime(CodeGenModule &CGM) : CGM(CGM), PipeTy(nullptr) {}
39  virtual ~CGOpenCLRuntime();
40
41  /// Emit the IR required for a work-group-local variable declaration, and add
42  /// an entry to CGF's LocalDeclMap for D.  The base class does this using
43  /// CodeGenFunction::EmitStaticVarDecl to emit an internal global for D.
44  virtual void EmitWorkGroupLocalVarDecl(CodeGenFunction &CGF,
45                                         const VarDecl &D);
46
47  virtual llvm::Type *convertOpenCLSpecificType(const Type *T);
48
49  virtual llvm::Type *getPipeType();
50};
51
52}
53}
54
55#endif
56