【问题标题】:Inlining a function in LLVM jit在 LLVM jit 中内联函数
【发布时间】:2012-08-17 16:45:43
【问题描述】:
我是 LLVM 框架和编译器领域的新手。我正在尝试熟悉它。在编译器中进行了一些初步阅读后,我有以下问题:
我想知道如何在 LLVM JIT 中完成函数内联。它是否与在 jit 编译时使用的静态内联中使用的传递相同,因为我觉得运行时(即 jit 编译时)的信息在静态编译时更好,因此一些更好的优化传递(价格便宜就时间而言)可以使用。
我错过了什么吗?在这方面我非常感谢一些帮助。
提前致谢。
【问题讨论】:
标签:
compiler-construction
llvm
jit
inlining
【解决方案1】:
你没有错过任何东西。 LLVM 过去、现在、将来可能会更适合静态编译器。它支持基本意义上的 JIT 编译(非常好,事实上,随着 MCJIT 的出现),您可以毫不费力地从 IR 转到内存中的机器代码。但它确实不执行跟踪执行或开箱即用的分析之类的事情。您可以添加它们,但 AFAIK 对修补已经发出的代码的支持充其量是有限的(即您可能必须重新编译大量代码)。虽然您始终可以添加代码来收集指标并编写自己的优化通道以利用这些(或以其他方式针对 JIT 编译器的要求进行定制),但这需要付出很大的努力。另请参阅:Unladen Swallow Retrospective(第三部分;请注意,该帖子已超过 1 年)。