如何发现在使用gcc时实际应用了哪些优化

How to find out which optimizations are actually applied when using gcc?

本文关键字:应用 优化 gcc 何发现 发现      更新时间:2023-10-16

使用IBM的XL编译器系列,可以提供两个选项(-qreport-qlist)来为每个源文件生成报告,其中包括应用了哪些优化或代码的哪些部分无法优化(以及原因)的信息。

有可能为GNU的g++获得类似的报告吗?如果有,如何做到?

查看-fdump-tree-[switch]标志。您可以使用-fdump-tree-all来获取大量信息。

此外,在中继线中,gcc -fopt-info-[options]将为您提供更高级别的优化信息,例如,当应用特定优化时,遗漏等,例如

-fopt-info-inline-optimized-missed

打印所有成功和失败的内联优化(在本例中为stderr)。这显然是一个非常新的功能,所以我还不确定它的支持程度。

在早期的版本中,他们有-ftree-vectorizer-verbose=n,现在它被弃用,取而代之的是opt-info。

此处列出了所有这些选项https://gcc.gnu.org/onlinedocs/gcc/Developer-Options.html尽管挑选有用的可能有点棘手。

使用-S -fverbose-asm列出汇编程序输出标头中每个静默应用的选项(包括优化选项)。

来源https://gcc.gnu.org/onlinedocs/gcc-7.2.0/gcc/Optimize-Options.html#Optimize-选项:

您可以使用-Q --help=optimizers调用GCC,以找出在每个级别启用的优化的确切集合。

示例:(已启用优化选项的计数)不需要文件。

$ g++ -std=c++17 -O2 -Q --help=optimizers 2>&1 |grep enabled |wc -l
135

请注意,-O1/2/3启用的许多优化都没有单独的标志(另请参阅:c++-g++O1不等于O0以及所有相关的优化标志-堆栈溢出)