簡體   English   中英

如何在不指定-O1的情況下獲得gcc -O1優化

[英]How to get gcc -O1 optimization without specifying -O1

我知道-O1會自動打開某些標志。 這些標志可以手動打開。 如果我沒有指定-O1,那么仍然可以通過指定-O1打開的所有標志來獲得-O1優化。

我試過了

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

但它仍然沒有做-O1優化。 我可以告訴我何時使用gprof,因為性能不是很好。

我打開哪些標志來獲得-O1優化?

一種方法可以找到:

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

(其中dummy.c是你的文件名。)這會導致gcc將用於命令行的標志噴出。

編輯:請參閱kastauyra的答案 看起來你無法單獨用-f標志模擬完整的-O1優化。

不幸的是,這是不可能的。 -O1啟用了許多單獨的優化標志,為true,但是GCC中的許多代碼檢查全局優化標志值並執行未由-f ..選項指定的優化。

從手冊:

-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

您也可以嘗試使用此pragma(它需要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

這取決於您的gcc版本。 請參閱gcc聯機幫助頁

在我的機器上, -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.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM