我想知道是否可以让英特尔 C++ 编译器(或其他编译器,如 gcc 或 clang)显示来自优化器的一些消息。我想知道优化器对我的代码做了什么。默认情况下,编译器只打印非常基本的东西,比如未使用的变量。非常简单的例子——我想知道那个表达式;
float x = 1.0f/2;
将被评估为:
float x = 0.5f;
并且代码中不会有划分(我知道在这种情况下它总是正确的,但这只是一个例子)。更高级的示例可能是循环展开或操作重新排序。提前致谢。
对于 icc 和 icpc,您可以使用-opt-report -opt-report-level max
标志集。
您还可以指定一个 opt-report 文件。请参阅此处了解更多详细信息
优化编译器(如 GCC,当被要求使用-O1
或-O2
等进行优化时)本质上是在转换源代码的内部表示。
如果您想查看一些内部 GCC 表示,您可以传递-fdump-tree-all
给 GCC。当心,你会得到数百个转储文件。
您还可以使用MELT 探针:MELT 是一种特定于域的语言(和插件实现)来扩展 GCC,它具有探针模式以交互地显示一些内部(特别是 Gimple)表示。
您在帖子顶部描述的优化(有点奇怪)是 icc -fno-prec-div 的一部分(这是您可能会覆盖的默认值)。