C# Mono LLVM和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(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后端提供支持。这将允许我免费获得C#到LLVM-IR前端


    谢谢你的帮助

    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的汇编语言