如何在不指定-O1的情况下获得gcc -O1优化

时间:2009-11-22 13:11:29

标签: c optimization gcc compiler-construction

我知道-O1会自动打开某些标志。这些标志可以手动打开。如果我没有指定-O1,那么仍然可以通过指定-O1打开的所有标志来获得-O1优化。

我试过

-fthread-jumps -fcprop-registers -fguess-branch-probability

但它仍然没有做-O1优化。我可以告诉我何时使用gprof,因为性能不是很好。

我打开哪些标志来获取-O1优化?

5 个答案:

答案 0 :(得分:13)

找到的一种方法:

gcc -O1 -c -Q -v dummy.c

(其中dummy.c是你的文件名。)这会导致gcc将命令用于命令行。

修改:请参阅此kastauyra's answer。您似乎无法仅使用-O1标记来模拟完整的-f优化。

答案 1 :(得分:11)

不幸的是,这是不可能的。 -O1启用了很多单独的优化标志,为true,但是GCC中的许多代码检查全局优化标志值并执行未由-f ..选项指定的优化。

答案 2 :(得分:3)

从手册:

-O
-O1
Optimize. Optimizing compilation takes somewhat more time, and a lot more memory for a large function. 

With -O, the compiler tries to reduce code size and execution time, without performing any optimizations that take a great deal of compilation time. 

-O turns on the following optimization flags: 
          -fauto-inc-dec 
          -fcprop-registers 
          -fdce 
          -fdefer-pop 
          -fdelayed-branch 
          -fdse 
          -fguess-branch-probability 
          -fif-conversion2 
          -fif-conversion 
          -fipa-pure-const 
          -fipa-reference 
          -fmerge-constants
          -fsplit-wide-types 
          -ftree-builtin-call-dce 
          -ftree-ccp 
          -ftree-ch 
          -ftree-copyrename 
          -ftree-dce 
          -ftree-dominator-opts 
          -ftree-dse 
          -ftree-forwprop 
          -ftree-fre 
          -ftree-phiprop 
          -ftree-sra 
          -ftree-pta 
          -ftree-ter 
          -funit-at-a-time

答案 3 :(得分:1)

您也可以尝试使用此编译指示(它需要GCC> = 4.4):

#pragma GCC optimize opt_list
void f()

此编译指示允许您打开和关闭给定功能的特定优化。 opt_list是没有-f。

的-f *选项列表

还有更改优化级别的函数属性:

int f() __attribute__((optimize(1)));

您还可以更改全局优化级别(适用于所有后续功能):

#pragma GCC optimize 1
#pragma GCC optimize 0

您也可以使用(适用于所有后续功能):

#pragma GCC optimization_level n

和英特尔C编译器(doc;仅适用于下一个函数)

#pragma intel optimization_level n

答案 4 :(得分:0)

这取决于您的gcc版本。请参阅gcc manpage

在我的计算机上,-O-O1)会启用以下优化:

   -fauto-inc-dec -fcprop-registers -fdce -fdefer-pop -fdelayed-branch
   -fdse -fguess-branch-probability -fif-conversion2 -fif-conversion
   -finline-small-functions -fipa-pure-const -fipa-reference
   -fmerge-constants -fsplit-wide-types -ftree-builtin-call-dce
   -ftree-ccp -ftree-ch -ftree-copyrename -ftree-dce
   -ftree-dominator-opts -ftree-dse -ftree-fre -ftree-sra -ftree-ter
   -funit-at-a-time

   -O also turns on -fomit-frame-pointer on machines where doing so
   does not interfere with debugging.