目前我正在尝试使用llvm::ExecutionEngine
到JIT llvm::Function
,我是通过代码生成器一个接一个地生成的。
某些功能的内容取决于对其他功能的评估,这意味着某些功能需要准备好在JIT中执行,而其他功能尚未生成。
这导致有向非循环代码生成图:
func_1 ---> func_2 (depends on fn1)
\
\-> func_3 -> func_4 (depends on func_1 and func_3)
time -------------->
理论上所有函数都属于同一个编译单元, 并应作为{{1>} 合并返回。
每次我想向JIT添加一个新函数时,是否有可能以某种方式向ExecutionEngine提供新函数而不添加带前向声明的模块(llvm::Module
(这基本上意味着每个函数的1个模块递归生成)?
因为那时我必须通过engine->addModule(...);
将所有函数克隆到合并中(或者再次生成它),这对我来说似乎不是一个好的解决方案。