作者shane87123 (阳光大肥宅)
看板CompilerDev
标题[问题] llvm opt工具应用
时间Tue Oct 12 15:56:22 2021
大家好,编译器版首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
但我使用 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
想请问大家,这些参数该怎麽一开始就消除?以及这些参数的相关含义要去哪里查才查得
到?
有这些参数,我每一次都要去 vim 一次修掉,才能 opt 他。
然後,opt 传入的 passes 理论上不论顺序如何,出来的 code 都不会执行错误对吧?
先谢谢版友了,有这个版真的很棒。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 49.216.89.62 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/CompilerDev/M.1634025384.A.F2F.html
2F:→ eopXD: 这里有用 NPM 来指定 pass 顺序的方法。 10/15 12:54
3F:→ eopXD: New Pass Manager (NPM) 相较於旧的可以更灵活的自己操作 10/15 12:54