单声道LLVM和LLVM-IR

问题描述:

我在玩Mono LLVM(http://www.mono-project.com/Mono:Runtime:Documentation:LVM),看起来他们在这里使用LLVM作为JIT,而不是真的是一个代码生成器。但根据该文档,他们经过LLVM-IR产生的本机代码之前:单声道LLVM和LLVM-IR

  1. 从IL代码
  2. 红外线变换为SSA形式生成的第一,正常单JIT IR
  3. 红外转换为LLVM IR
  4. 的LLVM IR由LLVM编译为本地代码

所以,我想知道是否有任何的方式来抓住这个第三阶段,并使用红外养活我LLVM后端。这将允许我将C#免费提供给LLVM-IR前端。

感谢您的帮助!

+2

'IR'在这种情况下意味着什么?也是一个小问题:JITting可能被认为是代码生成的一种形式(asm代码完成)。 – 2011-12-15 16:20:20

+0

IR代表'中间代表',LLVM的汇编语言 – 2011-12-23 08:29:50

+0

有趣的问题btw ... – 2011-12-23 08:35:44

Mono的LLVM支持通过尝试从适当的$libdir(例如,在OSX /usr/bin/mono将加载/Library/Frameworks/Mono.framework/Libraries/libmono-llvm.dylib。请参阅mono/mini/mini-llvm.h中的LLVM加载代码,特别是mono_llvm_load()try_llvm_load()

因此,看起来如果您命名LLVM后端mono-llvm,它将在启动单声道时用作mono --llvm。也就是说,mono_llvm_load()似乎需要mono-llvm库的特定导出,例如mono_llvm_initmono_llvm_cleanup,所以我相信您的LLVM后端需要一些额外的工作才能让Mono使用它,而我不是确定在哪里找到这个(除了在Mono的消息来源中用于“LLVM”的grep ping ...)。

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