选择等同于-O1的gcc优化标志

时间:2012-10-07 13:17:09

标签: gcc

我的小程序在使用-O1编译时执行得更好,而不是没有优化。我很想知道编译器所做的优化是否会导致这种加速。

我想我会做的是获取-O1等同于的优化标记列表(从手册页和gcc -Q -v获得)然后在列表中选择看看性能如何变化。

我发现甚至包括整个优化列表仍然没有给我一个程序,其性能与-O1优化的一样。

换句话说

gcc -O0 -fcprop-registers -fdefer-pop -fforward-propagate -fguess-branch-probability \
    -fif-conversion -fif-conversion2 -finline -fipa-pure-const -fipa-reference \
    -fmerge-constants -fsplit-wide-types -ftoplevel-reorder -ftree-ccp -ftree-ch \
    -ftree-copy-prop -ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse \
    -ftree-fre -ftree-sink -ftree-sra -ftree-ter myprogram.c

不同
gcc -O1 myprogram.c

我正在使用gcc版本4.5.3

手册中与-O1相关联的优化标记列表中是否还包含-O1所做的其他内容?

2 个答案:

答案 0 :(得分:1)

如何使用-S选项检查生成的汇编程序?

从使用“my_program.c”的两个实验看来,无论建议算法的长列表如何,-O0选项都会禁用所有优化。

答案 1 :(得分:0)

这是预期的,不是错误: https://gcc.gnu.org/wiki/FAQ#optimization-options

  

在手册中与-O1相关的优化标志列表中是否还包含-O1所做的其他内容?

是的,它开启了优化。指定单个-fxxx标志不会这样做。

如果您不使用-O1-O2-O3-Ofast-Og优化选项之一(而不是{ {1}})然后根本没有进行任何优化,因此调整哪些优化通过是否有效。

要查找哪个优化过程有所不同,您可以启用-O0,然后停用各个优化过程,直到找到有效差异。

即。而不是:

-O1

使用:

gcc -fxxx -fyyy -fzzz ...