[問題] 用 opt 重現 O3
不好意思打擾了,
我發現我問題真的很多XDD
就是,我想要得到 O3 的所有 pass flag,並且用這些 pass 再對同一份 source code
優?
聽起來有點饒口,
問題大概像這兩個 llvm dev 討論串
https://reurl.cc/Q6ARgZ
https://reurl.cc/zWR1LQ
簡而言之,
source_code --O3--> source_code_O3
source_code --pass--> source_code_O32
source_code_O3 和 source_code_O32 內容想要一樣,至少邏輯變得一樣
我現在的做法是
clang -S -emit-llvm -O3 -fomit-frame-pointer -Xclang -disable-llvm-passes sour
ce
得到一份沒經過優化的 source_code
然後用
opt -S -enable-new-pm=0 -O3 -debug-pass=Arguments source_code.ll
得到一大串 Pass
然後用那一大串 Pass
opt -S -enable-new-pm=0 -A -B -C..... source_code.ll
(其中 A B C 都是剛剛得到的 pass )
期望結果會一樣
但事實上結果差蠻多的,不知道是哪部分出了問題,
或者是 -O3 flag 有做什麼特別的事情?
不知道這樣表達有沒有清楚><
另外,llvm ir 的 data dependency 要怎麼去取得?
我用 opt -da source_ir.ll -stats 都沒有資料跑出來
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.160.179.77 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/CompilerDev/M.1637990101.A.9B3.html
※ 編輯: shane87123 (1.160.179.77 臺灣), 11/27/2021 23:30:03
→
11/28 02:20,
4年前
, 1F
11/28 02:20, 1F
→
11/28 02:20,
4年前
, 2F
11/28 02:20, 2F
→
11/28 02:20,
4年前
, 3F
11/28 02:20, 3F
感謝回覆
我其實是是要打亂O3的pass順序
但還是要知道中間O3是如何變化的
我會去試試看 print-ir-after-all的!
然後你說的assertion build是在build的時候要去改flag嗎?如:
https://i.imgur.com/EfhEUrO.jpg

但其實我沒變更過這個(default Yes)
opt -stats -instcount source_ir.ll 這樣是有結果的
但就da沒有QQ
※ 編輯: shane87123 (1.160.179.77 臺灣), 11/28/2021 12:20:36
→
11/28 15:51,
4年前
, 4F
11/28 15:51, 4F
→
11/28 15:51,
4年前
, 5F
11/28 15:51, 5F
謝謝,我有空試試看
自己解答一下,重現O3 passes這塊我已經解決了,
就是用新的PM
opt passses=“default<O3>” source_ir.ll -print-pipeline-passes
這樣會顯示出O3所有的passes!
※ 編輯: shane87123 (1.160.179.77 臺灣), 11/29/2021 11:56:21