如何通过优化看到C++代码的编译器重构

nik*_*aza 6 c++ g++ clang compiler-optimization

我想知道是否/如何可以看到编译器在启用优化时如何使用clang ++/g ++重构一段代码.我知道英特尔编译器有一个标志来产生相关的输出,但我似乎无法找到其他编译器中的等价物.

nik*_*aza 5

因此,由于您的指示,我得以发现一些非常酷的东西,所以我想分享一下:

使用Clang ++-4.0,可以如下编译可执行文件:

clang++-4.0 -std=c++14 -O3  -fsave-optimization-record -foptimization-record-file=myOptfile.yaml sourceFile.cpp
Run Code Online (Sandbox Code Playgroud)

这节省了创纪录的成功和失败中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/
Run Code Online (Sandbox Code Playgroud)

这将创造大量的HTML文件,您可以使用的index.html(在reportsDirectory文件夹)导航。

其结果是真棒,看起来像这样:

在此处输入图片说明

大多数事情都是可单击的,因此您可以使用html超链接导航到源代码的其他部分,包括c ++库,然后查看发生了什么!