看板 CompilerDev 關於我們 聯絡資訊
不好意思打擾了, 我發現我問題真的很多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
Lipraxde: -print-ir-after-all,然後開使 debug 吧,不過你只是11/28 02:20
Lipraxde: 想插入新的 pass 的話其實直接改 pass builder 就好了11/28 02:20
Lipraxde: -stats 要有 assertion build11/28 02:20
感謝回覆 我其實是是要打亂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
Lipraxde: 試試看 -aa-eval,以前好像遇過類似的問題,不過有點忘11/28 15:51
Lipraxde: 了是因為 lazy analysis 的關係還是啥的11/28 15:51
謝謝,我有空試試看 自己解答一下,重現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