作者shane87123 (阳光大肥宅)
看板CompilerDev
标题[问题] 用 opt 重现 O3
时间Sat Nov 27 13:14:59 2021
不好意思打扰了,
我发现我问题真的很多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://webptt.com/cn.aspx?n=bbs/CompilerDev/M.1637990101.A.9B3.html
※ 编辑: shane87123 (1.160.179.77 台湾), 11/27/2021 23:30:03
1F:→ Lipraxde: -print-ir-after-all,然後开使 debug 吧,不过你只是11/28 02:20
2F:→ Lipraxde: 想插入新的 pass 的话其实直接改 pass builder 就好了11/28 02:20
3F:→ 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
4F:→ Lipraxde: 试试看 -aa-eval,以前好像遇过类似的问题,不过有点忘11/28 15:51
5F:→ 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