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