17f92f2d8d9b7a07900c030183bc13a9ff60057ccGuy Benyei//===----- CGOpenCLRuntime.h - Interface to OpenCL Runtimes -----*- C++ -*-===//
27f92f2d8d9b7a07900c030183bc13a9ff60057ccGuy Benyei//
37f92f2d8d9b7a07900c030183bc13a9ff60057ccGuy Benyei//                     The LLVM Compiler Infrastructure
47f92f2d8d9b7a07900c030183bc13a9ff60057ccGuy Benyei//
57f92f2d8d9b7a07900c030183bc13a9ff60057ccGuy Benyei// This file is distributed under the University of Illinois Open Source
67f92f2d8d9b7a07900c030183bc13a9ff60057ccGuy Benyei// License. See LICENSE.TXT for details.
77f92f2d8d9b7a07900c030183bc13a9ff60057ccGuy Benyei//
87f92f2d8d9b7a07900c030183bc13a9ff60057ccGuy Benyei//===----------------------------------------------------------------------===//
97f92f2d8d9b7a07900c030183bc13a9ff60057ccGuy Benyei//
107f92f2d8d9b7a07900c030183bc13a9ff60057ccGuy Benyei// This provides an abstract class for OpenCL code generation.  Concrete
117f92f2d8d9b7a07900c030183bc13a9ff60057ccGuy Benyei// subclasses of this implement code generation for specific OpenCL
127f92f2d8d9b7a07900c030183bc13a9ff60057ccGuy Benyei// runtime libraries.
137f92f2d8d9b7a07900c030183bc13a9ff60057ccGuy Benyei//
147f92f2d8d9b7a07900c030183bc13a9ff60057ccGuy Benyei//===----------------------------------------------------------------------===//
157f92f2d8d9b7a07900c030183bc13a9ff60057ccGuy Benyei
167f92f2d8d9b7a07900c030183bc13a9ff60057ccGuy Benyei#ifndef CLANG_CODEGEN_OPENCLRUNTIME_H
177f92f2d8d9b7a07900c030183bc13a9ff60057ccGuy Benyei#define CLANG_CODEGEN_OPENCLRUNTIME_H
187f92f2d8d9b7a07900c030183bc13a9ff60057ccGuy Benyei
19b13621d08e20ac7aa550e05896de8a57ee99c1e8Guy Benyei#include "clang/AST/Type.h"
203b844ba7d5be205a9b4f5f0b0d1b7978977f4b8cChandler Carruth#include "llvm/IR/Type.h"
213b844ba7d5be205a9b4f5f0b0d1b7978977f4b8cChandler Carruth#include "llvm/IR/Value.h"
22b13621d08e20ac7aa550e05896de8a57ee99c1e8Guy Benyei
237f92f2d8d9b7a07900c030183bc13a9ff60057ccGuy Benyeinamespace clang {
247f92f2d8d9b7a07900c030183bc13a9ff60057ccGuy Benyei
257f92f2d8d9b7a07900c030183bc13a9ff60057ccGuy Benyeiclass VarDecl;
267f92f2d8d9b7a07900c030183bc13a9ff60057ccGuy Benyei
277f92f2d8d9b7a07900c030183bc13a9ff60057ccGuy Benyeinamespace CodeGen {
287f92f2d8d9b7a07900c030183bc13a9ff60057ccGuy Benyei
297f92f2d8d9b7a07900c030183bc13a9ff60057ccGuy Benyeiclass CodeGenFunction;
307f92f2d8d9b7a07900c030183bc13a9ff60057ccGuy Benyeiclass CodeGenModule;
317f92f2d8d9b7a07900c030183bc13a9ff60057ccGuy Benyei
327f92f2d8d9b7a07900c030183bc13a9ff60057ccGuy Benyeiclass CGOpenCLRuntime {
337f92f2d8d9b7a07900c030183bc13a9ff60057ccGuy Benyeiprotected:
347f92f2d8d9b7a07900c030183bc13a9ff60057ccGuy Benyei  CodeGenModule &CGM;
357f92f2d8d9b7a07900c030183bc13a9ff60057ccGuy Benyei
367f92f2d8d9b7a07900c030183bc13a9ff60057ccGuy Benyeipublic:
377f92f2d8d9b7a07900c030183bc13a9ff60057ccGuy Benyei  CGOpenCLRuntime(CodeGenModule &CGM) : CGM(CGM) {}
387f92f2d8d9b7a07900c030183bc13a9ff60057ccGuy Benyei  virtual ~CGOpenCLRuntime();
397f92f2d8d9b7a07900c030183bc13a9ff60057ccGuy Benyei
407f92f2d8d9b7a07900c030183bc13a9ff60057ccGuy Benyei  /// Emit the IR required for a work-group-local variable declaration, and add
417f92f2d8d9b7a07900c030183bc13a9ff60057ccGuy Benyei  /// an entry to CGF's LocalDeclMap for D.  The base class does this using
427f92f2d8d9b7a07900c030183bc13a9ff60057ccGuy Benyei  /// CodeGenFunction::EmitStaticVarDecl to emit an internal global for D.
437f92f2d8d9b7a07900c030183bc13a9ff60057ccGuy Benyei  virtual void EmitWorkGroupLocalVarDecl(CodeGenFunction &CGF,
447f92f2d8d9b7a07900c030183bc13a9ff60057ccGuy Benyei                                         const VarDecl &D);
45b13621d08e20ac7aa550e05896de8a57ee99c1e8Guy Benyei
46b13621d08e20ac7aa550e05896de8a57ee99c1e8Guy Benyei  virtual llvm::Type *convertOpenCLSpecificType(const Type *T);
477f92f2d8d9b7a07900c030183bc13a9ff60057ccGuy Benyei};
487f92f2d8d9b7a07900c030183bc13a9ff60057ccGuy Benyei
497f92f2d8d9b7a07900c030183bc13a9ff60057ccGuy Benyei}
507f92f2d8d9b7a07900c030183bc13a9ff60057ccGuy Benyei}
517f92f2d8d9b7a07900c030183bc13a9ff60057ccGuy Benyei
527f92f2d8d9b7a07900c030183bc13a9ff60057ccGuy Benyei#endif
53