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