我试图重现将opt -O3以LLVM IR的形式应用于源文件的结果。我想通过手动排序O3使用的传递并将它们传递给opt来获得相同的IR。
为了说明我在一个示例中所做的工作,作为输入,我使用了LLVM测试套件中的linpack基准测试[1]:
1。首先,我使用clang生成中间表示形式:
clang -O3 -Xclang -disable-llvm-optzns -emit-llvm -S linpack-pc.c -o linpack-pc.ll
2。然后,我使用opt优化IR:
opt -S -O3 -o linpack-pc-3.ll linpack-pc.ll
现在,我的目标是通过传递一系列优化选项来产生与linpack-pc-3.ll相同的IR。要获取opt用于O3的优化列表,请运行以下命令:
opt -O3 -disable-output -debug-pass=Arguments linpack-pc.ll
生产哪种产品(缩短以避免浪费空间):
Pass Arguments: -tti -targetlibinfo -tbaa ...
Pass Arguments: -targetlibinfo -tti -tbaa ...
Pass Arguments: -domtree
因此,显然有三道工序分别作为O3的一部分应用于IR。我无法使用这些传递来复制与linpack-pc-3.ll相同的IR,我尝试依次应用传递或将它们连接起来并作为单个序列传递来进行选择。两者均未产生所需的输出。此外,最终可执行文件的性能降低了约35%。我使用的是LLVM 3.8,我的操作系统是Ubuntu 16.04。
[1] https://github.com/llvm/llvm-test-suite/blob/master/SingleSource/Benchmarks/Linpack/linpack-pc.c