单声道LLVM和LLVM-IR
本文关键字:LLVM LLVM-IR 声道 单声道 | 更新日期: 2023-09-27 17:59:06
我正在玩Mono LLVM(http://www.mono-project.com/Mono:Runtime:Documentation:LLVM)看起来他们在这里使用LLVM作为JIT,而不是真正的代码生成器。但根据文档,他们在生成本地代码之前要经过LLVM-IR:
- 首先,从IL代码生成正常的单JIT IR
- IR被转换为SSA形式
- IR被转换为LLVM IR
- LLVM IR由LLVM编译为本机代码
所以,我想知道是否有任何方法可以捕捉第三阶段,并使用IR为我的LLVM后端提供信息。这将允许我免费获得C#到LLVM-IR前端。
谢谢你的帮助!
Mono的LLVM支持通过尝试从适当的$libdir
加载libmono-llvm.so
来工作,例如在OSX上,/usr/bin/mono
将加载/Library/Frameworks/Mono.framework/Libraries/libmono-llvm.dylib
。请参阅mono/mini/mini-LLVM.h中的LLVM加载代码,特别是mono_lvm_load()和try_LLVM_load()。
因此,如果您将LLVM后端命名为mono-llvm
,则在启动mono时将使用mono --llvm
。也就是说,mono_llvm_load()
似乎需要从mono-llvm
库中进行特定的导出,例如mono_llvm_init
和mono_llvm_cleanup
,所以我确信需要对LLVM后端进行一些额外的工作才能允许Mono使用它,我不确定在哪里可以找到这一点(除了在Mono的源中对"LLVM"进行grep
ping…)。
这也意味着LLVM后端可能无法从预构建的mono中重复使用;也就是说,为了使用LLVM后端,您可能需要构建自己的mono,因为预构建mono将提供可能不可插入的mono-llvm
后端。(我不知道LLVM后端的可插拔性和不可插拔性。)