Optimization 定制LLVM opt管道的替代方法有哪些? 问题:
从命令行无法安全地禁用O1/O2/O3 opt管道中的特定过程。定制或定制LLVM通道的opt管道的替代方法有哪些 背景和问题 我正在写一篇文章来概述代码的特定区域,我需要减少概述函数的输入和输出数量。 在某些情况下,opt工具会引发一些(不变的)GEP指令(例如,来自循环体)。O1/O2/O3标志会发生这种情况。我不希望这样,因为它会为我概述的函数创建更多的输入/输出。我更喜欢在概述的函数中完成GEP 失败的尝试Optimization 定制LLVM opt管道的替代方法有哪些? 问题:,optimization,llvm,Optimization,Llvm,从命令行无法安全地禁用O1/O2/O3 opt管道中的特定过程。定制或定制LLVM通道的opt管道的替代方法有哪些 背景和问题 我正在写一篇文章来概述代码的特定区域,我需要减少概述函数的输入和输出数量。 在某些情况下,opt工具会引发一些(不变的)GEP指令(例如,来自循环体)。O1/O2/O3标志会发生这种情况。我不希望这样,因为它会为我概述的函数创建更多的输入/输出。我更喜欢在概述的函数中完成GEP 失败的尝试 opt O1 pass参数如下所示。我在opt中使用了“print after
- opt O1 pass参数如下所示。我在opt中使用了“print after”命令,并查看了IR,发现“重新关联”转换创建了这种更改。我查看了opt--help-hidden中的禁用选项,但没有找到禁用此特定过程或LICM的方法
- 我试图查看LLVM源代码Reassociate.cpp。我也无法从代码中找到任何禁用此特定转换的方法
- 我还尝试手动为opt命令输入特定的密码。但是,有些通行证需要设置O1/2/3标志。如果我没有设置标志,这些过程不会进行必要的转换。例如,我需要展开循环,但在没有O1/2/3标志的情况下它不会展开,即使我在opt命令中显式输入了该标志
- 将定义移到接近其用途的位置(对我在IR阶段如何做到这一点有何评论?)
- 找到一种在opt管道(licm、重新关联)中安全禁用过程的方法。我相信这在命令行中是不可能的。如果我必须在本地修改LLVM源代码(为了攻击opt管道以完成我需要的任务),那么在什么地方安全地进行修改?任何指针都会有帮助;或
- 要手动输入通行证,我需要在opt命令中运行,不带任何O1/O2/O3标志 但我找不到一种方法来做这些工作。我正在使用LLVM 7.00版
线程中的原始海报似乎正在开发一个补丁来启用此行为,但据我所知,它从未登陆。是否有其他方法来自定义opt管道?是否可以定制PassManager(如果是的话,有没有关于我如何做到这一点的提示?)或者只在opt中启用某些不带O1/O2/O3标志的过程?任何关于如何破解流程以完成所需任务的建议都会很有帮助。
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