我是LLVM框架和编译器领域的新手。我正在努力熟悉它。在编译器中做了一些初步阅读后,我有以下问题:
我想知道LLVM JIT中的函数内联是如何完成的。它是在jit编译时使用的静态内联中使用的相同传递,因为我认为在运行时(即jit编译时)的信息在静态编译时比较好,因此一些更好的优化传递(这是便宜的在时间方面)可以使用。
我错过了什么?我真的很感激这方面的一些帮助。
提前致谢。
答案 0 :(得分:3)
你没有遗漏任何东西。 LLVM过去和将来可能会更加适合静态编译器。它在基本意义上支持JIT编译就好了(很好,事实上,随着MCJIT的出现),你可以从IR到内存机器代码而不会有太多麻烦。但它确实不执行跟踪执行或分析开箱即用的操作。你可以添加它们,但AFAIK对补丁已经发出的代码的支持最多是有限的(即你可能不得不重新编译大量的代码)。虽然您总是可以添加代码来收集指标并编写自己的优化通道来利用这些(或者根据JIT编译器的要求进行定制),但这需要付出很大的努力。另请参阅:Unladen Swallow Retrospective(第三部分;请注意此帖子> 1岁)。