Optimization LLVM执行哪种优化?

Optimization LLVM执行哪种优化?,optimization,llvm,Optimization,Llvm,我想具体了解LLVM的各种优化级别对应于什么 也就是说,我想知道在使用llvm的“-0x”选项(或clang或opt)时,哪些优化过程被准确地执行(在前端之外),以及以什么顺序执行。 相应工具的“人”并没有提供关于这个问题的太多信息(对于gcc的一个网站) 我知道这个有用的页面:,但它没有提供关于“-Ox”选项的任何信息。 我正在寻找一些调试或详细的选项(特别是使用“opt--help”中的信息),但找不到任何有用的选项 作为补充,通过解析代码,我注意到所有各种LLVM工具以及clang都使用不

我想具体了解LLVM的各种优化级别对应于什么

也就是说,我想知道在使用llvm的“-0x”选项(或clang或opt)时,哪些优化过程被准确地执行(在前端之外),以及以什么顺序执行。 相应工具的“人”并没有提供关于这个问题的太多信息(对于gcc的一个网站)

我知道这个有用的页面:,但它没有提供关于“-Ox”选项的任何信息。 我正在寻找一些调试或详细的选项(特别是使用“opt--help”中的信息),但找不到任何有用的选项

作为补充,通过解析代码,我注意到所有各种LLVM工具以及clang都使用不同的驱动程序,这些驱动程序以自己的方式解析选项。在“-Ox”选项方面,所有这些驱动程序都相似吗

编辑:我找到了“opt”工具的选项“-debug pass=Arguments”,它为选项“O1”提供了以下输出:

这与我想要的很接近,但仍然有两个问题:

  • 为什么有两张清单

  • 对于其他工具,尤其是“叮当”,是否有类似的选择?(根据我的测试,“-debug pass=Arguments”不适用于clang)

编辑:工具“opt”的选项“-debug pass=Structure”提供了更加用户友好的数据(来自)

为什么有两张清单

函数和模块过程有自己的过程管理器,因此可以单独打印

其他工具是否有类似的选择,尤其是“叮当声”


使用clang,您可以使用-mllvm-debug pass=Arguments。

@echristo:您能详细说明一下LLVM中函数和模块传递之间的区别吗?比方说,我将整个源代码文件foo.c传递给opt,其中一个是标准优化过程(O1,2,3,…)。接下来会发生什么?@Amir很抱歉耽搁了,我刚看到这个。不管怎样,模块过程通常适用于所有函数等,并且具有全局可见性。函数传递一次只能处理单个函数,不能在分析单个函数时来回传递信息。一般来说,数据布局、全局代码生成、过程间分析等都是模块,而gvn是函数传递。您可以查看每个过程的源代码,以了解它是什么。你有更具体的问题或更多的信息吗?Tnx对于@echristo的答案,我基本上在LLVM的前端工作,使用这些标志进行自动调优(如果你看一下我的论文),我想知道为什么模块和过程都有几个相同的编译器标志?e、 g.
-targetdata-no aa-tbaa-basicaa
等等。LLVM opt从模块或函数开始?@Amir不应该有相同的编译器标志,它们基本上是不同的集合,例如:-targetdata启用分析过程,该分析过程获取其他各种过程的目标数据-no aa、-basicaa、-tbaa是用于消除内存引用歧义的其他优化的不同类型的别名分析。
Pass Arguments:  -targetdata -no-aa -tbaa -targetlibinfo -basicaa -simplifycfg -domtree -scalarrepl -early-cse -lower-expect
Pass Arguments:  -targetlibinfo -targetdata -no-aa -tbaa -basicaa -globalopt -ipsccp -deadargelim -instcombine -simplifycfg -basiccg -prune-eh -always-inline -functionattrs -scalarrepl-ssa -domtree -early-cse -simplify-libcalls -lazy-value-info -jump-threading -correlated-propagation -simplifycfg -instcombine -tailcallelim -simplifycfg -reassociate -domtree -loops -loop-simplify -lcssa -loop-rotate -licm -lcssa -loop-unswitch -instcombine -scalar-evolution -loop-simplify -lcssa -iv-users -indvars -loop-idiom -loop-deletion -loop-unroll -memdep -memcpyopt -sccp -instcombine -lazy-value-info -jump-threading -correlated-propagation -domtree -memdep -dse -adce -simplifycfg -instcombine -strip-dead-prototypes -preverify -domtree -verify