Re: [問題] llvm opt工具應用

看板CompilerDev作者 (夏克維夫)時間2年前 (2021/10/13 12:26), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《shane87123 (陽光大肥宅)》之銘言: : 大家好,編譯器版首po,問題如果太白癡還請見諒~ : 最近在研究 Cmpiler 的 Optimizer 這塊,我選擇使用 LLVM,畢竟他的模組性是大家有 : 目共睹的。 : 近期在研究 Optimizer 的 Phase ordering Problem 這個問題(我發現繁中關鍵字很少 : ) : 感覺討論度不高,不知道為什麼XD : 最近想用 opt 這個工具去玩玩看 pass 的 order : 那因為我想先使用 new passmanager 的 cmmand,所以我的指令一開始是這樣打: : opt -S -passes=always-inline,licm input.ll -o output.ll : 結果出現 error,內容大概是要先 memorySSA 有詳細的錯誤訊息嗎?很有可能是IR內容的問題 因為我剛剛隨便拿一個 .ll 檔 然後用你的 command line flag,但是啥事也沒發生 : 但我使用 legacy passmanager,就可以: : opt -S --always-inline --licm input.ll -o output.ll : 為什麼會這樣呢? : 我是比較想要使用新版的,我擔心用舊版的之後會不支援。 : 另外,假如我 command 這樣使用: : clang -S -emit-llvm input.c -o output.ll : 出來的 IR 內容最底下的 attributes 會有一個參數是這樣:optnone : 甚至會有noinline : 想請問大家,這些參數該怎麼一開始就消除?以及這些參數的相關含義要去哪裡查才查得 : 到? optnone是 -O0 的時候會加在每個function的attribute,意思是請 optimizer 不要去 處理該 function,你可以用這個flag請clang在 -O0 的時候不要加它: clang -Xclang -disable-O0-optnone ... 要注意的是一定要加 "-Xclang" 因為 -disable-O0-optnone 是 frontend flag 不是 driver flag 至於各 attribute 的意思,LLVM Language Reference 裡就有了: https://llvm.org/docs/LangRef.html : 有這些參數,我每一次都要去 vim 一次修掉,才能 opt 他。 : 然後,opt 傳入的 passes 理論上不論順序如何,出來的 code 都不會執行錯誤對吧? 大部分的時候都不會錯 但不是絕對。事實上有一個領域就是在檢查這種錯誤 -- 也就是 miscompilation 或者 misoptimization。 有興趣的話也可以查查 "compiler translation validation" 這個領域在做的東西 : 先謝謝版友了,有這個版真的很棒。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 169.234.228.237 (美國) ※ 文章網址: https://www.ptt.cc/bbs/CompilerDev/M.1634099202.A.823.html
文章代碼(AID): #1XPc02WZ (CompilerDev)
文章代碼(AID): #1XPc02WZ (CompilerDev)