C# Mono LLVM和LLVM-IR
我正在玩Mono LLVM(http://www.mono-project.com/Mono:Runtime:Documentation:LLVM)看起来他们在这里使用LLVM作为JIT,而不是真正的代码生成器。但根据文档,它们在生成本机代码之前要经过LLVM-IR:C# Mono LLVM和LLVM-IR,c#,mono,llvm,C#,Mono,Llvm,我正在玩Mono LLVM(http://www.mono-project.com/Mono:Runtime:Documentation:LLVM)看起来他们在这里使用LLVM作为JIT,而不是真正的代码生成器。但根据文档,它们在生成本机代码之前要经过LLVM-IR: 首先,从IL代码生成正常的mono JIT IR IR转化为SSA形式 IR转换为LLVM IR LLVM将LLVM IR编译为本机代码 因此,我想知道是否有任何方法可以抓住第三阶段,并使用IR为我的LLVM后端提供支持。这将允许
谢谢你的帮助 Mono的LLVM支持通过尝试从相应的
$libdir
加载libmono LLVM.so
来工作,例如在OSX上/usr/bin/Mono
将加载/Library/Frameworks/Mono.framework/libmono LLVM.dylib
。请参阅中的LLVM加载代码,特别是和
因此,如果您将LLVM后端命名为mono LLVM
,则在启动mono时将使用它作为mono--LLVM
。这就是说,mono_llvm_load()
似乎需要从mono llvm
库中进行特定的导出,例如mono_llvm_init
和mono_llvm_cleanup
,因此我确信需要对您的llvm后端进行一些额外的工作才能允许mono使用它,我不确定在哪里找到这个答案(除了Mono源代码中“LLVM”的grepping之外…)
这也意味着LLVM后端可能无法从预构建的mono中重用;也就是说,为了使用LLVM后端,您可能需要构建自己的mono,因为预构建的mono将提供一个不可插拔的
mono LLVM
后端。(我不知道LLVM后端是如何可插拔或不可插拔的。)在这种情况下,“IR”是什么意思?还有一个小问题:JITT可能被认为是一种代码生成形式(asm毕竟是代码)。IR表示“中间表示”,即LLVM的汇编语言