#ifndef HALIDE_CODEGEN_GPU_HOST_H
#define HALIDE_CODEGEN_GPU_HOST_H
#include <map>
#include "CodeGen_ARM.h"
#include "CodeGen_X86.h"
#include "CodeGen_MIPS.h"
#include "CodeGen_PowerPC.h"
#include "IR.h"
namespace Halide {
namespace Internal {
struct CodeGen_GPU_Dev;
struct GPU_Argument;
template<typename CodeGen_CPU>
class CodeGen_GPU_Host : public CodeGen_CPU {
public:
CodeGen_GPU_Host(Target);
virtual ~CodeGen_GPU_Host();
protected:
void compile_func(const LoweredFunc &func, const std::string &simple_name, const std::string &extern_name);
using CodeGen_CPU::module;
using CodeGen_CPU::init_module;
using CodeGen_CPU::target;
using CodeGen_CPU::builder;
using CodeGen_CPU::context;
using CodeGen_CPU::function;
using CodeGen_CPU::get_user_context;
using CodeGen_CPU::visit;
using CodeGen_CPU::codegen;
using CodeGen_CPU::sym_push;
using CodeGen_CPU::sym_pop;
using CodeGen_CPU::sym_get;
using CodeGen_CPU::sym_exists;
using CodeGen_CPU::llvm_type_of;
using CodeGen_CPU::create_alloca_at_entry;
using CodeGen_CPU::i8_t;
using CodeGen_CPU::i32_t;
using CodeGen_CPU::i64_t;
using CodeGen_CPU::buffer_t_type;
using CodeGen_CPU::allocations;
using CodeGen_CPU::register_destructor;
void visit(const For *);
std::string function_name;
llvm::Value *get_module_state(const std::string &api_unique_name,
bool create = true);
private:
std::map<DeviceAPI, CodeGen_GPU_Dev *> cgdev;
};
}}
#endif