[英]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.