[問題] 用 opt 重現 O3

看板CompilerDev作者 (陽光大肥宅)時間4年前 (2021/11/27 13:15), 4年前編輯推噓0(005)
留言5則, 1人參與, 4年前最新討論串1/1
不好意思打擾了, 我發現我問題真的很多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
-print-ir-after-all,然後開使 debug 吧,不過你只是
11/28 02:20, 1F

11/28 02:20, 4年前 , 2F
想插入新的 pass 的話其實直接改 pass builder 就好了
11/28 02:20, 2F

11/28 02:20, 4年前 , 3F
-stats 要有 assertion build
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
試試看 -aa-eval,以前好像遇過類似的問題,不過有點忘
11/28 15:51, 4F

11/28 15:51, 4年前 , 5F
了是因為 lazy analysis 的關係還是啥的
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
文章代碼(AID): #1XeRxLcp (CompilerDev)