检查 LLVM LTO 和 ThinLTO 优化?
Checking LLVM LTO & ThinLTO optimizations?
通常情况下,编译器优化后我们会得到文本的LLVM IR,这样我们就可以比较优化前后的IR并进行推理。在 LTO 中,我们通常将 IR 位码文件输入到链接器(lld)并获得本机目标文件。在 LTO 通过后,有什么办法可以得到单一的单片 LLVM IR(文本表示)?除了查看目标文件的文本部分之外,是否有任何有效的方法来分析目标代码以找出优化。
谢谢
如果您需要更多信息,请告诉我!
LTO 优化与在正常编译期间应用于代码的优化大致相同。所不同的是,被优化的模块来自link一个程序的所有模块。
因此,您可以将所有源代码编译为 LLVM IR(例如 -flto
),然后使用 llvm-link
link 个目标文件(实际上是位码文件)然后在这个生成的位码上进行优化 运行 opt
。在 LTO 阶段应用的通行证列表可以在 lib/Transforms/IPO/PassManagerBuilder.cpp, populateLTOPassManager()
中看到。还有一个很好的 opt
选项,叫做 -print-after
,可以在应用给定通道后发出文本 IR 表示。
通常情况下,编译器优化后我们会得到文本的LLVM IR,这样我们就可以比较优化前后的IR并进行推理。在 LTO 中,我们通常将 IR 位码文件输入到链接器(lld)并获得本机目标文件。在 LTO 通过后,有什么办法可以得到单一的单片 LLVM IR(文本表示)?除了查看目标文件的文本部分之外,是否有任何有效的方法来分析目标代码以找出优化。
谢谢
如果您需要更多信息,请告诉我!
LTO 优化与在正常编译期间应用于代码的优化大致相同。所不同的是,被优化的模块来自link一个程序的所有模块。
因此,您可以将所有源代码编译为 LLVM IR(例如 -flto
),然后使用 llvm-link
link 个目标文件(实际上是位码文件)然后在这个生成的位码上进行优化 运行 opt
。在 LTO 阶段应用的通行证列表可以在 lib/Transforms/IPO/PassManagerBuilder.cpp, populateLTOPassManager()
中看到。还有一个很好的 opt
选项,叫做 -print-after
,可以在应用给定通道后发出文本 IR 表示。