问题
无法从命令行安全地禁用O1/O2/O3-OPT管道中的特定传递。定制或裁剪LLVM传递的opt管道的替代方法是什么?
背景与问题
我正在编写一张通行证,以概述特定的代码区域,并且我需要减少输入和输出的数量。在某些情况下,opt工具会引发一些(不变的) GEP指令(例如,从循环体)。这发生在O1/O2/O3标志上。我不想这样做,因为它为我概述的函数创建了更多的输入/输出。我更喜欢在概述的功能中完成GEP。
失败尝试
在O1阶段传递参数
Pass Arguments: -targetlibinfo -tti -targetpassconfig -tbaa -scoped-noalias
-assumption-cache-tracker -profile-summary-info -forceattrs -inferattrs
-ipsccp -called-value-propagation -globalopt -domtree -mem2reg -deadargelim
-domtree -basicaa -aa -loops -lazy-branch-prob -lazy-block-freq
-opt-remark-emitter -instcombine -simplifycfg -basiccg -globals-aa -prune-eh
-always-inline -functionattrs -domtree -sroa -basicaa -aa -memoryssa -early-cse-memssa
-speculative-execution -basicaa -aa -lazy-value-info -jump-threading -correlated-propagation
-simplifycfg -domtree -basicaa -aa -loops -lazy-branch-prob -lazy-block-freq
-opt-remark-emitter -instcombine -libcalls-shrinkwrap -loops -branch-prob -block-freq
-lazy-branch-prob -lazy-block-freq -opt-remark-emitter -pgo-memop-opt -basicaa -aa
-loops -lazy-branch-prob -lazy-block-freq -opt-remark-emitter -tailcallelim -simplifycfg
-reassociate -domtree -loops -loop-simplify -lcssa-verification -lcssa -basicaa -aa
-scalar-evolution -loop-rotate -licm -loop-unswitch -simplifycfg -domtree -basicaa -aa -loops
-lazy-branch-prob -lazy-block-freq -opt-remark-emitter -instcombine -loop-simplify -lcssa-verification -lcssa -scalar-evolution -indvars
-loop-idiom -loop-deletion -loop-unroll -phi-values -memdep -memcpyopt -sccp -demanded-bits -bdce -basicaa -aa -lazy-branch-prob
-lazy-block-freq -opt-remark-emitter -instcombine -lazy-value-info -jump-threading -correlated-propagation -basicaa -aa -phi-values
-memdep -dse -loops -loop-simplify -lcssa-verification -lcssa -basicaa -aa -scalar-evolution -licm -postdomtree -adce -simplifycfg
-domtree -basicaa -aa -loops -lazy-branch-prob -lazy-block-freq -opt-remark-emitter -instcombine -barrier -basiccg -rpo-functionattrs
-globalopt -globaldce -basiccg -globals-aa -float2int -domtree -loops -loop-simplify -lcssa-verification -lcssa -basicaa -aa -scalar-evolution
-loop-rotate -loop-accesses -lazy-branch-prob -lazy-block-freq -opt-remark-emitter -loop-distribute -branch-prob -block-freq -scalar-evolution
-basicaa -aa -loop-accesses -demanded-bits -lazy-branch-prob -lazy-block-freq -opt-remark-emitter -loop-vectorize -loop-simplify -scalar-evolution
-aa -loop-accesses -loop-load-elim -basicaa -aa -lazy-branch-prob -lazy-block-freq -opt-remark-emitter -instcombine -simplifycfg -domtree
-basicaa -aa -loops -lazy-branch-prob -lazy-block-freq -opt-remark-emitter -instcombine -loop-simplify -lcssa-verification -lcssa
-scalar-evolution -loop-unroll -lazy-branch-prob -lazy-block-freq -opt-remark-emitter -instcombine -loop-simplify -lcssa-verification
-lcssa -scalar-evolution -licm -alignment-from-assumptions -strip-dead-prototypes -domtree -loops -branch-prob -block-freq -loop-simplify
-lcssa-verification -lcssa -basicaa -aa -scalar-evolution -branch-prob -block-freq -loop-sink -lazy-branch-prob -lazy-block-freq
-opt-remark-emitter -instsimplify -div-rem-pairs -simplifycfg -domtree -sroa -verify -print-module我想我需要的是
可能的解决方案?
我是否可以在我的pass定义中将所需的pass ( O1管道的子集)添加为AddRequired中的getAnalysisUsage(),并使opt在启用O0标志的情况下运行pass?这个能行吗?我可以试试这个。
发布于 2019-05-06 18:38:01
根据2018年夏天的这线程,没有一种通用的方法可以禁用clang的特定传递:
有些passes支持禁用它们的选项,例如-fno-矢量化和-fno-展开循环,但是没有通用选项。由于禁用任意选项在一般情况下并不有用,因此需要进行一些手工操作。
线程中的原始海报似乎正在开发一个补丁来支持这种行为,但据我所知,它从未登陆过。
https://stackoverflow.com/questions/56010075
复制相似问题