从Julia脚本生成可运行的LLVM IR?

罗泽轩*_*罗泽轩 5 llvm julia llvm-ir

我想知道如何将Julia代码转换为可运行的LLVM IR(*。ll文件)。

有一个名为的命令code_llvm可以将Julia函数编译为LLVM IR。但是它的结果包含%jl_value_t*似乎是(隐藏的?)对象类型的某种东西,并且看起来不像是纯粹的LLVM IR。

有没有一种方法可以从Julia中生成可运行的LLVM IR,以便我可以运行它lli xx.ll(或执行其他操作)?

小智 1

默认情况下,该code_llvm函数仅显示该函数,但您也可以让它打印出完整的模块:

open("file.ll", "w") do io
    code_llvm(io, +, (Int, Int); raw=true, dump_module=true, optimize=true)
end
Run Code Online (Sandbox Code Playgroud)

此输出 ( file.ll) 现在可与其他 llvm 工具一起使用,例如llcopt。但是,由于它只是该函数的代码,并且假设所有其他代码和数据都存在,因此它不一定适用于lli,因此买家要小心。

如果您想要一个完整的系统,您可能会对 Julia 的标志感兴趣--output-bc,它将转储 LLVM 格式的完整对象文件。这在内部广泛用于构建和引导 Julia。它还包含在https://github.com/JuliaLang/PackageCompiler.jl上的实用工具中,以自动执行其中一些步骤。