#ifndef GEMMSTONE_DSL_IR_CODEGEN_EXTENSIONS_HPP
#define GEMMSTONE_DSL_IR_CODEGEN_EXTENSIONS_HPP
#include "gemmstone/config.hpp"
#include "gemmstone/dsl/kernel.hpp"
GEMMSTONE_NAMESPACE_START
namespace dsl {
namespace ir {
class reg_allocator_t;
class ngen_operand_t;
class ngen_register_scope_t;
struct codegen_extension_iface_t {
public:
struct host_t {
void *ptr;
const std::type_info &info;
ngen::HW hw;
};
virtual host_t root_code_generator() const = 0;
virtual const kernel::options_t &options() const = 0;
virtual reg_allocator_t &allocator() = 0;
virtual std::vector<ngen_operand_t> evaluate(
const std::vector<expr_t> &exprs, ngen_register_scope_t &scope)
= 0;
};
} } GEMMSTONE_NAMESPACE_END
#endif