深入理解JIT编译:从LLJIT计算器到自定义编译器实现
1. JIT编译基础与LLJIT计算器实现
1.1 JIT编译调用流程
在JIT编译中,获取用户定义函数的地址并调用它以生成结果是关键步骤。以下是具体的代码实现:
auto CalcExprCall = ExitOnErr(JIT->lookup("calc_expr_func"));
int (*UserFnCall)() = CalcExprCall.toPtr<int (*)()>();
outs() << "User defined function evaluated to: " << UserFnCall() << "\n";
调用完成后,使用 ResourceTracker 释放之前与函数关联的内存:
ExitOnErr(RT->remove());
1.2 支持JIT编译的代码生成更改
为支持基于JIT的计算器, CodeGen.cpp 进行了一些重要更改。代码生成类有两个关键方法:
- compileToIR :将用户定义的函数编译为LLVM IR并打印到控制台。
void CodeGen::compileToIR(AST *Tree, Mo
超级会员免费看
订阅专栏 解锁全文
1113

被折叠的 条评论
为什么被折叠?



