GCC -O1 如何只选择部分优化选项?

时间:2021-12-05 02:12:25
我只需要-O1中的一部分选项,该如何实现?

比如我只需要-fdefer-pop选项,编译参数写成 -O0 -fdefer-pop 是否正确?

试验发现只加一部分选项,完全不行,没有任何作用

有什么办法

求大神指导

6 个解决方案

#1


把-O0去掉?

#2


嗯,试过了,把-O0去掉也不行

问一下,GCC的选项之间有先后顺序吗?

#3


Any optimization can be enabled outside of any level simply by specifying its name with the -f prefix, as:

gcc -fdefer-pop -o test test.c

We also could enable level 1 optimization and then disable any particular optimization using the -fno- prefix, like this:

gcc -O1 -fno-defer-pop -o test test.c

我按照上边的方法试,发现完全不行,还有其他人做过类似的试验吗?

#4


所以你说的不行是怎么个不行法?

#5


我看了一下gcc 5.1的help,并没有-fdefer-pop这一选项,你可以在命令行gcc --help=C++看看有没有。

#6


是这样的,我用的编译器是基于GCC的一个交叉编译器,使用-O1时发现很多地方优化过度,所以我想挑一下,把导致出问题的优化选项去掉
我用xxx_gcc -Q -O0 --help-optimizers和xxx_gcc -Q -O1 --help-optimizers找出-O1时打开的优化选项,然后在编译选项里加进去,发现编译生成的memory和-O0时一模一样,30多个全加了,也没有变化
猜测是该编译器不支持这种做法

#1


把-O0去掉?

#2


嗯,试过了,把-O0去掉也不行

问一下,GCC的选项之间有先后顺序吗?

#3


Any optimization can be enabled outside of any level simply by specifying its name with the -f prefix, as:

gcc -fdefer-pop -o test test.c

We also could enable level 1 optimization and then disable any particular optimization using the -fno- prefix, like this:

gcc -O1 -fno-defer-pop -o test test.c

我按照上边的方法试,发现完全不行,还有其他人做过类似的试验吗?

#4


所以你说的不行是怎么个不行法?

#5


我看了一下gcc 5.1的help,并没有-fdefer-pop这一选项,你可以在命令行gcc --help=C++看看有没有。

#6


是这样的,我用的编译器是基于GCC的一个交叉编译器,使用-O1时发现很多地方优化过度,所以我想挑一下,把导致出问题的优化选项去掉
我用xxx_gcc -Q -O0 --help-optimizers和xxx_gcc -Q -O1 --help-optimizers找出-O1时打开的优化选项,然后在编译选项里加进去,发现编译生成的memory和-O0时一模一样,30多个全加了,也没有变化
猜测是该编译器不支持这种做法