xo-jit: prefer xo::bp spelling to xo::ref::brw

This commit is contained in:
Roland Conybeare 2025-07-05 13:53:26 -05:00
commit f774e6446f
6 changed files with 64 additions and 64 deletions

View file

@ -72,7 +72,7 @@ namespace xo {
// ----- access -----
llvm::Module * current_module() { return llvm_module_.get(); }
ref::brw<LlvmContext> llvm_cx() { return llvm_cx_; }
bp<LlvmContext> llvm_cx() { return llvm_cx_; }
llvm::IRBuilder<> * llvm_current_ir_builder() { return llvm_toplevel_ir_builder_.get(); }
/** target triple = string describing target host for codegen **/
@ -109,8 +109,8 @@ namespace xo {
* @c llvm::Type instances are *immortal* (llvm interns them into opaque global lookup tables)
**/
llvm::Type * codegen_type(TypeDescr td);
llvm::Value * codegen_constant(ref::brw<xo::ast::ConstantInterface> expr);
llvm::Function * codegen_primitive(ref::brw<xo::ast::PrimitiveInterface> expr);
llvm::Value * codegen_constant(bp<xo::ast::ConstantInterface> expr);
llvm::Function * codegen_primitive(bp<xo::ast::PrimitiveInterface> expr);
/** like @ref codegen_primitive , but create wrapper function that accepts (and discards)
* environment pointer as first argument.
@ -118,7 +118,7 @@ namespace xo {
* Implementation consists of tail call to natural primitive, that skips the unused
* environment pointer
**/
llvm::Function * codegen_primitive_wrapper(ref::brw<xo::ast::PrimitiveInterface> expr,
llvm::Function * codegen_primitive_wrapper(bp<xo::ast::PrimitiveInterface> expr,
llvm::IRBuilder<> & ir_builder);
/** Generate closure for invoking a primitive function.
@ -126,17 +126,17 @@ namespace xo {
* to support function-pointer-like behavior for a target function
* that may resolve to primitive-or-lambda at runtime
**/
llvm::Value * codegen_primitive_closure(ref::brw<xo::ast::PrimitiveInterface> expr,
llvm::Value * codegen_primitive_closure(bp<xo::ast::PrimitiveInterface> expr,
llvm::IRBuilder<> & ir_builder);
llvm::Value * codegen_apply(ref::brw<xo::ast::Apply> expr,
llvm::Value * codegen_apply(bp<xo::ast::Apply> expr,
llvm::Value * envptr,
llvm::IRBuilder<> & ir_builder);
/* NOTE: codegen_lambda() needs to be reentrant too.
* for example can have a lambda in apply position.
*/
llvm::Function * codegen_lambda_decl(ref::brw<xo::ast::Lambda> expr);
llvm::Function * codegen_lambda_defn(ref::brw<xo::ast::Lambda> expr, llvm::IRBuilder<> & ir_builder);
llvm::Function * codegen_lambda_decl(bp<xo::ast::Lambda> expr);
llvm::Function * codegen_lambda_defn(bp<xo::ast::Lambda> expr, llvm::IRBuilder<> & ir_builder);
/** Generate closure for invoking a lambda (user-defined function).
* See @ref MachPipeline::codegen_apply for invocation
* Same ABI as @ref MachPipeline::codegen_primitive_closure
@ -147,21 +147,21 @@ namespace xo {
* @ref MachPipeline::codegen_toplevel and friends are responsible for
* assembling and propagating this.
**/
llvm::Value * codegen_lambda_closure(ref::brw<xo::ast::Lambda> lambda,
llvm::Value * codegen_lambda_closure(bp<xo::ast::Lambda> lambda,
llvm::Value * envptr,
llvm::IRBuilder<> & ir_builder);
llvm::Value * codegen_variable(ref::brw<xo::ast::Variable> var,
llvm::Value * codegen_variable(bp<xo::ast::Variable> var,
llvm::Value * envptr,
llvm::IRBuilder<> & ir_builder);
llvm::Value * codegen_ifexpr(ref::brw<xo::ast::IfExpr> ifexpr,
llvm::Value * codegen_ifexpr(bp<xo::ast::IfExpr> ifexpr,
llvm::Value * envptr,
llvm::IRBuilder<> & ir_builder);
llvm::Value * codegen(ref::brw<Expression> expr,
llvm::Value * codegen(bp<Expression> expr,
llvm::Value * envptr,
llvm::IRBuilder<> & ir_builder);
llvm::Value * codegen_toplevel(ref::brw<Expression> expr);
llvm::Value * codegen_toplevel(bp<Expression> expr);
// ----- jit online execution -----
@ -190,7 +190,7 @@ namespace xo {
static void init_once();
/** helper function. find all lambda expressions in AST @p expr **/
std::vector<ref::brw<Lambda>> find_lambdas(ref::brw<Expression> expr) const;
std::vector<bp<Lambda>> find_lambdas(bp<Expression> expr) const;
public:
/** codegen helper for a user-defined function.

View file

@ -133,13 +133,13 @@ namespace xo {
const runtime_binding_detail & binding);
#ifdef NOT_USING
llvm::AllocaInst * create_runtime_localenv_alloca(ref::brw<LlvmContext> llvm_cx,
llvm::AllocaInst * create_runtime_localenv_alloca(bp<LlvmContext> llvm_cx,
//const llvm::DataLayout & data_layout,
llvm::Function * llvm_fn,
llvm::IRBuilder<> & fn_ir_builder);
#endif
runtime_binding_detail create_entry_block_alloca(ref::brw<LlvmContext> llvm_cx,
runtime_binding_detail create_entry_block_alloca(bp<LlvmContext> llvm_cx,
//const llvm::DataLayout & data_layout,
llvm::Function * llvm_fn,
llvm::IRBuilder<> & fn_ir_builder,
@ -161,7 +161,7 @@ namespace xo {
* then use the localenv copy exclusively.
* @return value representing localenv slot address
**/
llvm::Value * runtime_localenv_slot_addr(ref::brw<LlvmContext> llvm_cx,
llvm::Value * runtime_localenv_slot_addr(bp<LlvmContext> llvm_cx,
llvm::StructType * localenv_llvm_type,
llvm::AllocaInst * localenv_alloca,
int i_slot,
@ -177,7 +177,7 @@ namespace xo {
* - for stackonly parameters, use individual @c llvm::AllocaInst instances
* - create custom @c llvm::StructType for captured parameters, also initially stack-allocated
**/
bool bind_locals(ref::brw<LlvmContext> llvm_cx,
bool bind_locals(bp<LlvmContext> llvm_cx,
//const llvm::DataLayout & data_layout,
llvm::Function * llvm_fn,
llvm::IRBuilder<> & ir_builder);

View file

@ -28,7 +28,7 @@ namespace xo {
/** establish suitable llvm representation for a c++ type (described by @p td)
* llvm types are unique'd, at least within @p llvm_cx
**/
static llvm::Type * td_to_llvm_type(xo::ref::brw<LlvmContext> llvm_cx,
static llvm::Type * td_to_llvm_type(xo::bp<LlvmContext> llvm_cx,
TypeDescr td);
/** establish llvm representation for a function type
@ -41,7 +41,7 @@ namespace xo {
* to either {primitive functions, functions-requiring-closures},
* with choice deferred until runtime
**/
static llvm::FunctionType * function_td_to_lvtype(xo::ref::brw<LlvmContext> llvm_cx,
static llvm::FunctionType * function_td_to_lvtype(xo::bp<LlvmContext> llvm_cx,
TypeDescr fn_td,
bool wrapper_flag = false);
@ -55,7 +55,7 @@ namespace xo {
* to either {primitive functions, functions-requiring-closures},
* with choice deferred until runtime
**/
static llvm::PointerType * function_td_to_llvm_fnptr_type(xo::ref::brw<LlvmContext> llvm_cx,
static llvm::PointerType * function_td_to_llvm_fnptr_type(xo::bp<LlvmContext> llvm_cx,
TypeDescr fn_td,
bool wrapper_flag);
@ -79,8 +79,8 @@ namespace xo {
* (primitive or lambda) with name @c foo
**/
static llvm::StructType *
create_closureapi_lvtype(xo::ref::brw<LlvmContext> llvm_cx,
xo::ref::brw<FunctionInterface> fn);
create_closureapi_lvtype(xo::bp<LlvmContext> llvm_cx,
xo::bp<FunctionInterface> fn);
/** establish llvm abstract representation for a closure:
* struct with
@ -121,7 +121,7 @@ namespace xo {
* localenv.
**/
static llvm::StructType *
function_td_to_closureapi_lvtype(xo::ref::brw<LlvmContext> llvm_cx,
function_td_to_closureapi_lvtype(xo::bp<LlvmContext> llvm_cx,
TypeDescr fn_td,
const std::string & hint_name);
@ -150,8 +150,8 @@ namespace xo {
* @return struct type. typename will be @c e.foo for lambda with name @c foo
**/
static llvm::StructType *
create_localenv_llvm_type(xo::ref::brw<LlvmContext> llvm_cx,
xo::ref::brw<Lambda> lambda);
create_localenv_llvm_type(xo::bp<LlvmContext> llvm_cx,
xo::bp<Lambda> lambda);
/** establish llvm rep'n for a pointer to an abstract local environment:
*
@ -169,7 +169,7 @@ namespace xo {
* +-------+
**/
static llvm::PointerType *
env_api_llvm_ptr_type(xo::ref::brw<LlvmContext> llvm_cx);
env_api_llvm_ptr_type(xo::bp<LlvmContext> llvm_cx);
/** function type:
* @code
@ -184,18 +184,18 @@ namespace xo {
* returns function-pointer type
**/
static llvm::PointerType *
require_localenv_unwind_llvm_fnptr_type(xo::ref::brw<LlvmContext> llvm_cx,
require_localenv_unwind_llvm_fnptr_type(xo::bp<LlvmContext> llvm_cx,
llvm::PointerType * hint_envptr_llvm_type = nullptr);
private:
/** establish llvm representation for a struct type described by @p struct_td
**/
static llvm::StructType * struct_td_to_llvm_type(xo::ref::brw<LlvmContext> llvm_cx,
static llvm::StructType * struct_td_to_llvm_type(xo::bp<LlvmContext> llvm_cx,
TypeDescr struct_td);
/** establish llvm representation for a pointer type described by @p pointer_td **/
static llvm::PointerType * pointer_td_to_llvm_type(xo::ref::brw<LlvmContext> llvm_cx,
static llvm::PointerType * pointer_td_to_llvm_type(xo::bp<LlvmContext> llvm_cx,
TypeDescr pointer_td);
/** establish llvm abstract representation for a local environment:
@ -219,7 +219,7 @@ namespace xo {
* @see type2llvm::function_td_to_llvm_closure_type
**/
static llvm::StructType *
env_api_llvm_type(xo::ref::brw<LlvmContext> llvm_cx);
env_api_llvm_type(xo::bp<LlvmContext> llvm_cx);
}; /*type2llvm*/
} /*namespace jit*/

View file

@ -138,7 +138,7 @@ namespace xo {
}
llvm::Value *
MachPipeline::codegen_constant(ref::brw<ConstantInterface> expr)
MachPipeline::codegen_constant(bp<ConstantInterface> expr)
{
TypeDescr td = expr->value_td();
@ -165,7 +165,7 @@ namespace xo {
}
llvm::Function *
MachPipeline::codegen_primitive(ref::brw<PrimitiveInterface> expr)
MachPipeline::codegen_primitive(bp<PrimitiveInterface> expr)
{
constexpr bool c_debug_flag = true;
@ -250,7 +250,7 @@ namespace xo {
} /*codegen_primitive*/
llvm::Function *
MachPipeline::codegen_primitive_wrapper(ref::brw<PrimitiveInterface> expr,
MachPipeline::codegen_primitive_wrapper(bp<PrimitiveInterface> expr,
llvm::IRBuilder<> & /*ir_builder*/)
{
constexpr bool c_debug_flag = true;
@ -368,7 +368,7 @@ namespace xo {
} /*codegen_primitive_wrapper*/
llvm::Value *
MachPipeline::codegen_primitive_closure(ref::brw<xo::ast::PrimitiveInterface> expr,
MachPipeline::codegen_primitive_closure(bp<xo::ast::PrimitiveInterface> expr,
llvm::IRBuilder<> & ir_builder)
{
constexpr bool c_debug_flag = true;
@ -391,7 +391,7 @@ namespace xo {
} /*codegen_primitive_closure*/
llvm::Value *
MachPipeline::codegen_apply(ref::brw<Apply> apply,
MachPipeline::codegen_apply(bp<Apply> apply,
llvm::Value * envptr,
llvm::IRBuilder<> & ir_builder)
{
@ -632,13 +632,13 @@ namespace xo {
} /*codegen_apply*/
std::vector<ref::brw<Lambda>>
MachPipeline::find_lambdas(ref::brw<Expression> expr) const
std::vector<bp<Lambda>>
MachPipeline::find_lambdas(bp<Expression> expr) const
{
std::vector<ref::brw<Lambda>> retval_v;
std::vector<bp<Lambda>> retval_v;
expr->visit_preorder(
[&retval_v](ref::brw<Expression> x)
[&retval_v](bp<Expression> x)
{
if (x->extype() == exprtype::lambda) {
retval_v.push_back(Lambda::from(x));
@ -649,7 +649,7 @@ namespace xo {
} /*find_lambdas*/
llvm::Function *
MachPipeline::codegen_lambda_decl(ref::brw<Lambda> lambda)
MachPipeline::codegen_lambda_decl(bp<Lambda> lambda)
{
constexpr bool c_debug_flag = true;
@ -709,7 +709,7 @@ namespace xo {
} /*codegen_lambda_decl*/
llvm::Function *
MachPipeline::codegen_lambda_defn(ref::brw<Lambda> lambda,
MachPipeline::codegen_lambda_defn(bp<Lambda> lambda,
llvm::IRBuilder<> & /*ir_builder*/)
{
constexpr bool c_debug_flag = true;
@ -810,7 +810,7 @@ namespace xo {
} /*codegen_lambda_defn*/
llvm::Value *
MachPipeline::codegen_lambda_closure(ref::brw<Lambda> lambda,
MachPipeline::codegen_lambda_closure(bp<Lambda> lambda,
llvm::Value * envptr,
llvm::IRBuilder<> & ir_builder)
{
@ -837,7 +837,7 @@ namespace xo {
} /*codegen_lambda_closure*/
llvm::Value *
MachPipeline::codegen_variable(ref::brw<Variable> var,
MachPipeline::codegen_variable(bp<Variable> var,
llvm::Value * /*envptr*/,
llvm::IRBuilder<> & ir_builder)
{
@ -865,7 +865,7 @@ namespace xo {
} /*codegen_variable*/
llvm::Value *
MachPipeline::codegen_ifexpr(ref::brw<IfExpr> expr,
MachPipeline::codegen_ifexpr(bp<IfExpr> expr,
llvm::Value * envptr,
llvm::IRBuilder<> & ir_builder)
{
@ -951,7 +951,7 @@ namespace xo {
} /*codegen_ifexpr*/
llvm::Value *
MachPipeline::codegen(ref::brw<Expression> expr,
MachPipeline::codegen(bp<Expression> expr,
llvm::Value * envptr,
llvm::IRBuilder<> & ir_builder)
{
@ -988,7 +988,7 @@ namespace xo {
} /*codegen*/
llvm::Value *
MachPipeline::codegen_toplevel(ref::brw<Expression> expr)
MachPipeline::codegen_toplevel(bp<Expression> expr)
{
/* - Pass 1.
* get set of lambdas.

View file

@ -82,7 +82,7 @@ namespace xo {
/* in kaleidoscope7.cpp: CreateEntryBlockAlloca */
runtime_binding_detail
activation_record::create_entry_block_alloca(ref::brw<LlvmContext> llvm_cx,
activation_record::create_entry_block_alloca(bp<LlvmContext> llvm_cx,
//const llvm::DataLayout & data_layout,
llvm::Function * llvm_fn,
llvm::IRBuilder<> & fn_ir_builder,
@ -129,7 +129,7 @@ namespace xo {
#ifdef NOT_USING
llvm::AllocaInst *
activation_record::create_runtime_localenv_alloca(ref::brw<LlvmContext> llvm_cx,
activation_record::create_runtime_localenv_alloca(bp<LlvmContext> llvm_cx,
//const llvm::DataLayout & data_layout,
llvm::Function * llvm_fn,
llvm::IRBuilder<> & ir_builder)
@ -161,7 +161,7 @@ namespace xo {
#endif
llvm::Value *
activation_record::runtime_localenv_slot_addr(ref::brw<LlvmContext> llvm_cx,
activation_record::runtime_localenv_slot_addr(bp<LlvmContext> llvm_cx,
llvm::StructType * localenv_llvm_type,
llvm::AllocaInst * localenv_alloca,
int i_slot,
@ -195,7 +195,7 @@ namespace xo {
} /*runtime_localenv_slot_addr*/
bool
activation_record::bind_locals(ref::brw<LlvmContext> llvm_cx,
activation_record::bind_locals(bp<LlvmContext> llvm_cx,
//const llvm::DataLayout & data_layout,
llvm::Function * llvm_fn,
llvm::IRBuilder<> & ir_builder)

View file

@ -19,7 +19,7 @@ namespace xo {
**/
llvm::Type *
type2llvm::td_to_llvm_type(xo::ref::brw<LlvmContext> llvm_cx, TypeDescr td) {
type2llvm::td_to_llvm_type(xo::bp<LlvmContext> llvm_cx, TypeDescr td) {
auto & llvm_cx_ref = llvm_cx->llvm_cx_ref();
if (td->is_function()) {
@ -58,7 +58,7 @@ namespace xo {
* that represented by @p fn_td
**/
llvm::FunctionType *
type2llvm::function_td_to_lvtype(xo::ref::brw<LlvmContext> llvm_cx,
type2llvm::function_td_to_lvtype(xo::bp<LlvmContext> llvm_cx,
TypeDescr fn_td,
bool wrapper_flag)
{
@ -118,7 +118,7 @@ namespace xo {
} /*function_td_to_llvm_type*/
llvm::PointerType *
type2llvm::function_td_to_llvm_fnptr_type(xo::ref::brw<LlvmContext> llvm_cx,
type2llvm::function_td_to_llvm_fnptr_type(xo::bp<LlvmContext> llvm_cx,
TypeDescr /*fn_td*/,
bool /*wrapper_flag*/)
{
@ -144,7 +144,7 @@ namespace xo {
* Generate llvm::Type correspoinding to a TypeDescr for a struct.
**/
llvm::StructType *
type2llvm::struct_td_to_llvm_type(xo::ref::brw<LlvmContext> llvm_cx,
type2llvm::struct_td_to_llvm_type(xo::bp<LlvmContext> llvm_cx,
TypeDescr struct_td)
{
// see
@ -205,7 +205,7 @@ namespace xo {
} /*struct_td_to_llvm_type*/
llvm::PointerType *
type2llvm::pointer_td_to_llvm_type(xo::ref::brw<LlvmContext> llvm_cx
type2llvm::pointer_td_to_llvm_type(xo::bp<LlvmContext> llvm_cx
, TypeDescr pointer_td
)
{
@ -229,7 +229,7 @@ namespace xo {
} /*pointer_td_llvm_type*/
llvm::PointerType *
type2llvm::require_localenv_unwind_llvm_fnptr_type(xo::ref::brw<LlvmContext> llvm_cx,
type2llvm::require_localenv_unwind_llvm_fnptr_type(xo::bp<LlvmContext> llvm_cx,
llvm::PointerType * /*envptr_llvm_type*/)
{
#ifdef OBSOLETE
@ -265,7 +265,7 @@ namespace xo {
} /*require_localenv_unwind_llvm_fnptr_type*/
llvm::StructType *
type2llvm::env_api_llvm_type(xo::ref::brw<LlvmContext> llvm_cx)
type2llvm::env_api_llvm_type(xo::bp<LlvmContext> llvm_cx)
{
/* _env_api: base type for a local environment */
llvm::StructType * env_llvm_type
@ -293,7 +293,7 @@ namespace xo {
} /*env_api_llvm_type*/
llvm::PointerType *
type2llvm::env_api_llvm_ptr_type(xo::ref::brw<LlvmContext> llvm_cx)
type2llvm::env_api_llvm_ptr_type(xo::bp<LlvmContext> llvm_cx)
{
#ifdef OBSOLETE
llvm::StructType * env_llvm_type = env_api_llvm_type(llvm_cx);
@ -303,8 +303,8 @@ namespace xo {
} /*env_api_llvm_ptr_type*/
llvm::StructType *
type2llvm::create_closureapi_lvtype(xo::ref::brw<LlvmContext> llvm_cx,
xo::ref::brw<FunctionInterface> fn)
type2llvm::create_closureapi_lvtype(xo::bp<LlvmContext> llvm_cx,
xo::bp<FunctionInterface> fn)
{
constexpr const char * c_prefix = "c.";
@ -317,7 +317,7 @@ namespace xo {
} /*create_closureapi_lvtype*/
llvm::StructType *
type2llvm::function_td_to_closureapi_lvtype(xo::ref::brw<LlvmContext> llvm_cx,
type2llvm::function_td_to_closureapi_lvtype(xo::bp<LlvmContext> llvm_cx,
TypeDescr fn_td,
const std::string & hint_name)
{
@ -368,8 +368,8 @@ namespace xo {
} /*function_td_to_closureapi_lvtype*/
llvm::StructType *
type2llvm::create_localenv_llvm_type(xo::ref::brw<LlvmContext> llvm_cx,
xo::ref::brw<Lambda> lambda)
type2llvm::create_localenv_llvm_type(xo::bp<LlvmContext> llvm_cx,
xo::bp<Lambda> lambda)
{
constexpr const char * c_prefix = "e.";