我想知道是否/如何可以看到编译器在启用优化时如何使用clang ++ / g ++重构一段代码。我知道英特尔编译器有一个标志来产生相关的输出,但我似乎无法在其他编译器中找到它。
答案 0 :(得分:4)
所以,多亏了你的指示,我能够发现一些非常酷的东西,所以我想我会分享:
使用Clang ++ - 4.0,可以按如下方式编译可执行文件:
clang++-4.0 -std=c++14 -O3 -fsave-optimization-record -foptimization-record-file=myOptfile.yaml sourceFile.cpp
这会在myOptfile.yaml中保存成功和不成功优化的记录。这可以使用llvm-opt-report-4.0查看,但如果使用llvm / utils / opt-viewer.py查看它的真正功能。
为了做到这一点,克隆llvm存储库,导航到源目录,并在生成myOptFile.yaml后运行以下命令:
python ~/myInstallDir/llvm/utils/opt-viewer/opt-viewer.py myOptFile.yaml reportsDirectory/
这将创建许多html文件,您可以使用index.html(在reportsDirectory文件夹中)进行导航。
结果很棒,看起来像这样:
大多数内容都是可点击的,因此您可以使用html超链接导航到源代码的其他部分,包括c ++库,看看发生了什么!
答案 1 :(得分:3)
这是一个可以并排查看功能的网站:
Compiler explorer
可以一次比较多个编译器(带有版本)。
海湾合作委员会:How to Save the Assembler Code Generated by GCC
Clang是GCC的替代品,因此相同的参数也适用 -S将汇编代码输出到.s文件中 -O3是优化级别3
示例:
clang -S test.cpp -o test_clang_O3.s
g++ -S test.cpp -o test_gcc_O3.s
clang -O3 -S test.cpp -o test_clang_O3.s
g++ -O3 -S test.cpp -o test_gcc_O3.s
<小时/>
要查看gcc优化,您必须检查&#34; fdump&#34;和&#34; fopt&#34;开关:
GCC Debugging-Options
(例如:-fopt-info-optimized - &gt;成功应用优化后的打印信息。)
对于Clang来说,它是&#34;发出&#34;优化报告: Clang - Options to Emit Optimization Reports
答案 2 :(得分:1)
编译器不优化C ++代码;编译器将C ++转换为实现定义的“内部表示”并对其进行优化。然后他们将其转换为CPU可以执行的代码,并可能进一步优化 。
(请记住:C ++是一个抽象;您的C ++代码定义了程序的语义。您的计算机不会将其用作一系列实际执行指令。)
所以,没有“优化的C ++”供您阅读;您只能查看生成的程序集,并将其与构建中的程序集进行比较,在该构建中,您说服编译器不要如此积极地进行优化。使用LLVM,您可以查看内部表示本身,但我对此并不了解。