2013-08-06 115 views
4

最近我用GCC編譯了一個程序,但是當我用-O1優化選項時,出錯了;使用-O0時沒有問題。所以我用-O1替代了那些官方文檔說的選項,比如-fauto-inc-dec,-fcompare-elim,-fcprop-registers等 但是,它工作正常,沒有任何bug但性能不是很好。GCC優化選項

我想知道-O1是否等同於那些小編譯選項?

+3

這聽起來像你的程序實際上有一個錯誤,可能是由未定義的行爲造成的,偶然與-O0一起使用。你應該修復這個錯誤。 –

+0

謝謝,先生。這是非常可能的。 Howerver,我對-O1和-O1打開的優化標誌的區別感興趣。爲什麼他們有不同的效果? – sosohu

回答

3

在所有(-O1 VS -O0)打開優化在-f標誌不控制的方式改變了代碼生成。請注意0​​中的這句話:

並非所有的優化都由一個標誌直接控制。本節僅列出具有標誌的優化。

一些細節取決於非常具體的gcc版本號(例如,gcc 4.2 vs gcc 4.5,4.9等)。

1

The -O1 will turn on the following optimization flags:

 -fauto-inc-dec 
     -fcompare-elim 
     -fcprop-registers 
     -fdce 
     -fdefer-pop 
     -fdelayed-branch 
     -fdse 
     -fguess-branch-probability 
     -fif-conversion2 
     -fif-conversion 
     -fipa-pure-const 
     -fipa-profile 
     -fipa-reference 
     -fmerge-constants 
     -fsplit-wide-types 
     -ftree-bit-ccp 
     -ftree-builtin-call-dce 
     -ftree-ccp 
     -ftree-ch 
     -ftree-copyrename 
     -ftree-dce 
     -ftree-dominator-opts 
     -ftree-dse 
     -ftree-forwprop 
     -ftree-fre 
     -ftree-phiprop 
     -ftree-slsr 
     -ftree-sra 
     -ftree-pta 
     -ftree-ter 
     -funit-at-a-time 
+0

我用它們取代了-O1,但效果不一樣。添加順序也非常重要? – sosohu

+0

是的,通過序列通常很重要。 – shrm

+0

謝謝,我想知道我在哪裏可以得到序列? GCC手冊按字母順序對其進行分類。 – sosohu