问题描述
我正在玩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支持通过尝试从适当的``1''中加载``0''来工作,例如在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启动为mono --llvm
时将使用它。就是说,ѭ6似乎需要从mono-llvm
库中进行特定的导出,例如mono_llvm_init
和mono_llvm_cleanup
,因此我确定您的LLVM后端需要做一些额外的工作才能允许Mono使用它,我\'我不确定在哪里可以找到(不是在Mono \的源代码中对“ LLVM \”进行ѭ10ping操作...)。
这也意味着LLVM后端可能无法从预构建的mono中重用;也就是说,您可能需要构建自己的Mono才能使用LLVM后端,因为prebuild mono将提供可能无法插入的mono-llvm
后端。 (我不知道LLVM后端的可插拔性。)