单声道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:

  1. 首先,从IL代码生成正常的单JIT IR
  2. IR被转换为SSA形式
  3. IR被转换为LLVM IR
  4. LLVM IR由LLVM编译为本机代码

所以,我想知道是否有任何方法可以捕捉第三阶段,并使用IR为我的LLVM后端提供信息。这将允许我免费获得C#到LLVM-IR前端。

谢谢你的帮助!

单声道LLVM和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_initmono_llvm_cleanup,所以我确信需要对LLVM后端进行一些额外的工作才能允许Mono使用它,我不确定在哪里可以找到这一点(除了在Mono的源中对"LLVM"进行grep ping…)。

这也意味着LLVM后端可能无法从预构建的mono中重复使用;也就是说,为了使用LLVM后端,您可能需要构建自己的mono,因为预构建mono将提供可能不可插入的mono-llvm后端。(我不知道LLVM后端的可插拔性和不可插拔性。)