锵优化级别(Clang optimization levels)

2019-07-22 08:51发布

海合会, 手动解释了什么是-O3-Os等地转化为具体的优化参数(条款-funswitch-loops-fcompare-elim等)

我正在寻找一个铛相同的信息

我看了网上和man clang只给出一般信息( -O2优化了超过-O1-Os速度优化,......),还看了这里堆栈溢出,发现这个 ,但我还没有发现任何有关在引用的源文件。

编辑:我找到了答案,但我仍然有兴趣 ,如果任何人有一个链接,用户手册,记录所有优化过程,以及所选择的通行证-O x 。 目前,我只是发现这个通行证的名单,但没有优化级别。

Answer 1:

我发现这个相关的问题。

概括起来,找出有关编译器优化过程:

llvm-as < /dev/null | opt -O3 -disable-output -debug-pass=Arguments

正如杰夫·尼克松的答案(+1)指出, clang还运行了一些更高级别的优化,我们可以检索:

echo 'int;' | clang -xc -O3 - -o /dev/null -\#\#\#

各道的文档,请点击这里 。



随着6.0版本的通行证如下:

  • 基线( -O0 ):

    • opt :-tti -verify -ee仪器-targetlibinfo -assumption缓存跟踪器形轮廓,汇总信息-forceattrs -basiccg -always内联-barrier
    • clang补充说 :-mdisable-FP-琳-mrelax,所有
  • -O1是基于-O0

    • opt补充说 :-targetlibinfo -tti -tbaa -scoped-noalias -assumption缓存跟踪器形轮廓,汇总信息-forceattrs -inferattrs -ipsccp -called价值传播-globalopt -domtree -mem2reg -deadargelim -basicaa -AA -循环-lazy分支 - 概率-lazy块-频率-opt-此言极 - 发射极-instcombine -simplifycfg -basiccg -globals-AA -prune-EH -always直插-functionattrs -sroa -memoryssa - 提早-CSE-memssa - 投机执行-lazy - 值信息 - 跳转线程-correlated传播-libcalls-拆封分枝-概率 - 嵌段 - 频率-pgo-memop-OPT -tailcallelim -reassociate -loop-简化-lcssa验证-lcssa - 标进化-loop-旋转-licm -loop-unswitch -indvars -loop-成语-loop缺失-loop-UNROLL -memdep -memcpyopt -sccp -demanded位-bdce -dse -postdomtree -adce -barrier -rpo- functionattrs -globaldce -float2int -loop-访问-loop-分发-loop-矢量化-loop的负载琳-alignment从 - 假设-strip止原型-loop散热器-instsimplify -div-REM-对-verify - EE-研究所 RUMENT - 提早-CSE低级,希望
    • clang增加 :-momit叶帧指针
    • clang下降 :-mdisable-FP-琳-mrelax,所有
  • -O2是基于-O1

    • opt增加了 :-gvn -elim-无济于事-的extern -slp-矢量器-constmerge -inline -mldst运动
    • opt下降 :-always内联
    • clang补充说 :-vectorize-循环-vectorize-SLP
  • -O3基于-O2

    • opt补充说 :-callsite分裂-argpromotion
  • -Ofast基于-O3 ,在有效clang但不是在opt

    • clang补充说 :-fno签名3/0 -freciprocal-数学-ffp合同=快速-menable不安全-FP-数学-menable-NO-NaN的-menable-NO-INF中-mreassociate -fno截留数学-ffast-数学-ffinite,数学只
  • -Os类似-O2

    • opt :-libcalls,拆封和-pgo-memopt-OPT
  • -Oz基于-Os

    • opt下降 :-slp,矢量化

随着3.8版本的通行证如下:

  • 基线( -O0 ):

    • opt :-targetlibinfo -tti -verify
    • clang补充说 :-mdisable-FP-琳-mrelax,所有
  • -O1是基于-O0

    • opt增加了 :-globalopt -demanded位分枝-概率-inferattrs -ipsccp -dse -loop-简化-scoped-noalias -barrier -adce -deadargelim -memdep -licm -globals-AA -rpo-functionattrs -basiccg -loop-成语-forceattrs -mem2reg -simplifycfg - 提早-CSE -instcombine -sccp -loop-unswitch -loop,矢量化-tailcallelim -functionattrs -loop-访问-memcpyopt -loop缺失-reassociate -strip死的原型-loops -basicaa - 相关传播-lcssa -domtree -always直插-AA - 嵌段频率-float2int低级,希望-sroa -loop-UNROLL -alignment从 - 假设-lazy价值 - 信息-prune-EH - 跳转线程 - 环旋转-indvars -bdce -scalar进化-tbaa -assumption缓存跟踪器
    • clang增加 :-momit叶帧指针
    • clang下降 :-mdisable-FP-琳-mrelax,所有
  • -O2是基于-O1

    • opt增加了 :-elim-无济于事-的extern -mldst运动-slp-矢量器-gvn -inline -globaldce -constmerge
    • opt下降 :-always内联
    • clang补充说 :-vectorize-循环-vectorize-SLP
  • -O3基于-O2

    • opt补充说 :-argpromotion
  • -Ofast基于-O3 ,在有效clang但不是在opt

    • clang补充说 :-fno签名3/0 -freciprocal-数学-ffp合同=快速-menable不安全-FP-数学-menable-NO-NaN的-menable-NO-INF中
  • -Os相同-O2

  • -Oz基于-Os

    • opt下降 :-slp,矢量化
    • clang下降 :-vectorize-循环


3.7版的通行证如下(解析的命令的输出以上):

  • 默认(-O0):-targetlibinfo -verify -tti

  • -O1是基于-O0

    • 补充说 :-sccp -loop-简化-float2int -lazy -值信息-correlated传播-bdce -lcssa -deadargelim -loop-UNROLL -loop-矢量化-barrier -memcpyopt -loop-访问-assumption缓存跟踪器-reassociate -loop缺失分枝-概率 - 跳转线程-domtree -dse -loop-旋转-ipsccp -instcombine -scoped-noalias -licm -prune-EH -loop-unswitch -alignment从 - 假设 - 提早-CSE -inline -cost -simplifycfg -strip死的原型-tbaa -sroa -no-AA -adce -functionattrs低级,希望-basiccg -loops -loop-成语-tailcallelim -basicaa -indvars -globalopt - 嵌段频率-scalar进化-memdep -always内联
  • -02是基于-01

    • 补充说 :-elim-无济于事-的extern -globaldce -inline -constmerge -mldst运动-gvn -slp-矢量器
    • 删除 :-always内联
  • -O3基于-02

    • 补充说 :-argpromotion -verif
  • -OS相同-O2

  • -Oz基于-Os

    • 删除 :-slp,矢量化


对于3.6版本的传球在GYUNGMIN KIM的岗位作为记录。


3.5版的通行证如下(解析的命令的输出以上):

  • 默认(-O0):-targetlibinfo -verify -verify二

  • -O1是基于-O0

    • 补充说 :-correlated传播-basiccg -simplifycfg -no-AA -跳转线程-sroa -loop-unswitch -ipsccp -instcombine -memdep -memcpyopt -barrier -嵌段-频率-loop-简化-loop-矢量化-inline成本分枝-概率 - 提早-CSE -lazy价值 - 信息-loop - 旋转-strip死的原型-loop缺失-tbaa -prune-EH -indvars -loop-UNROLL -reassociate -loops -sccp -always内联-basicaa -dse -globalopt -tailcallelim -functionattrs -deadargelim -notti -scalar进化 - 低级,希望-licm -loop-成语-adce -domtree -lcssa
  • -02是基于-01

    • 补充说 :-gvn -constmerge -globaldce -slp-矢量器-mldst运动-inline
    • 删除 :-always内联
  • -O3基于-02

    • 补充说 :-argpromotion
  • -OS相同-O2

  • -Oz基于-Os

    • 删除 :-slp,矢量化


3.4版的通行证如下(解析的命令的输出以上):

  • -O0:-targetlibinfo -preverify -domtree -verify

  • -O1是基于-O0

    • 补充说 :-adce -always直插-basicaa -basiccg -correlated传播-deadargelim -dse -提早-CSE -functionattrs -globalopt -indvars -inline成本-instcombine -ipsccp -跳转线程-lazy -值信息-lcssa -licm -loop缺失-loop-成语-loop - 旋转-loop-简化-loop-UNROLL -loop-unswitch -loops低级,希望-memcpyopt -memdep -no-AA -notti -prune-EH -reassociate -scalar -evolution -sccp -simplifycfg -sroa -strip死的原型-tailcallelim -tbaa
  • -02是基于-01

    • 补充说 :-barrier -constmerge -domtree -globaldce -gvn -inline -loop,矢量化-preverify -slp,向量化-targetlibinfo -verify
    • 删除 :-always内联
  • -O3基于-02

    • 补充说 :-argpromotion
  • -OS相同-O2

  • -Oz是基于-02

    • 删除 :-barrier -loop-矢量化-slp,矢量化


3.2版的通行证如下(解析的命令的输出以上):

  • -O0:-targetlibinfo -preverify -domtree -verify

  • -O1是基于-O0

    • 补充说 :-sroa -提早-CSE低级-预计-no-AA -tbaa -basicaa -globalopt -ipsccp -deadargelim -instcombine -simplifycfg -basiccg -prune-EH -always直插-functionattrs -简化-的libcall -lazy价值-info - 跳转线程-correlated传播-tailcallelim -reassociate -loops -loop-简化-lcssa -loop-旋转-licm -loop-unswitch -scalar进化-indvars -loop-成语-loop缺失-loop-UNROLL -memdep -memcpyopt -sccp -dse -adce -strip死的原型
  • -02是基于-01

    • 补充说 :-inline -globaldce -constmerge
    • 删除 :-always内联
  • -O3基于-02

    • 补充说 :-argpromotion
  • -OS相同-O2

  • -Oz相同-Os


编辑 [2014年3月]除去从列表重复。

编辑 [2014年4月]添加文档链接+选项3.4

编辑 [2014年9月]添加的选项3.5

编辑 [2015年12月]添加选项3.7和提3.6现有答案

编辑 [2016年5月]添加选项3.8,对于opt和铛和提现的答案铛(与OPT)

编辑 [2018年11月]添加选项为6.0



Answer 2:

@安东尼的回答(和链接的其他问题)精确地描述启用的LLVM优化,但也有一些其他锵特定的选项(即那些影响降低到AST),受了-O[0|1|2|3|fast]标志。

你可以看看这些有:

echo 'int;' | clang -xc -O0 - -o /dev/null -\#\#\#

echo 'int;' | clang -xc -O1 - -o /dev/null -\#\#\#

echo 'int;' | clang -xc -O2 - -o /dev/null -\#\#\#

echo 'int;' | clang -xc -O3 - -o /dev/null -\#\#\#

echo 'int;' | clang -xc -Ofast - -o /dev/null -\#\#\#

例如, -O0使-mrelax-all-O1使-vectorize-loops-vectorize-slp-Ofast使-menable-no-infs-menable-no-nans-menable-unsafe-fp-math-ffp-contract=fast-ffast-math


@Techogrebo:

是的,没不一定需要其他LLVM工具。 尝试:

echo 'int;' | clang -xc - -o /dev/null -mllvm -print-all-options

此外,还有很多你可以检查/独含锵修改更详细的选择...你只需要知道如何让他们!

尝试几个:

clang -help

clang -cc1 -help

clang -cc1 -mllvm -help

clang -cc1 -mllvm -help-list-hidden

clang -cc1as -help



Answer 3:

LVM 3.6 -O1

传递参数:-targetlibinfo -no-AA -tbaa -scoped-noalias -assumption缓存跟踪器-basicaa -notti -verify二-ipsccp -globalopt -deadargelim -domtree -instcombine -simplifycfg -basiccg -prune-EH -inline-成本-always内联-functionattrs -sroa -domtree - 提早-CSE -lazy - 值信息 - 跳转线程-correlated传播-simplifycfg -domtree -instcombine -tailcallelim -simplifycfg -reassociate -domtree -loops -loop-简化 - lcssa -loop-旋转-licm -loop-unswitch -instcombine -scalar进化-loop,简化-lcssa -indvars -loop-成语-loop缺失-function_tti -loop-UNROLL -memdep -memcpyopt -sccp -domtree -instcombine - 懒 - 值信息 - 跳转线程-correlated传播-domtree -memdep -dse -adce -simplifycfg -domtree -instcombine -barrier -domtree -loops -loop-简化-lcssa分枝-概率 - 嵌段 - 频率-scalar-进化-loop-矢量化-instcombine -simplifycfg -domtree -instcombine -loops -loop-简化-lcssa -scalar进化-function_tti -loop-UNROLL -alignment从 - 一个 ssumptions -strip死的原型-verify -verify二

在-O1 -O2基地

添加:-inline -mldst运动-domtree -memdep -gvn -memdep -scalar进化-slp,向量化-globaldce -constmerge

并删除:-always内联

-O3基于-02

添加:-argpromotion



文章来源: Clang optimization levels