gcc4优化技术汇总

gcc4优化技术汇总

ID:25191110

大小:64.68 KB

页数:6页

时间:2018-11-18

gcc4优化技术汇总_第1页
gcc4优化技术汇总_第2页
gcc4优化技术汇总_第3页
gcc4优化技术汇总_第4页
gcc4优化技术汇总_第5页
资源描述:

《gcc4优化技术汇总》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、GCC的优化编译过程(version4)GCC的编译过程可分为4个子过程,包括Parsingpass、Gimplifcationpass、TreeSSApasses、RTLpasses。在这四个子过程中,GCC优化主要在TreeSSApasses和RTLpasses中进行。1、SSA优化(1)删除无用语句(Removeuselessstatements)该过程对gimple代码进行非常简单的扫描,识别出明显的死代码并删除。我们在这里做的一些事情包括,简化具有不变条件的if语句,删除对显然不会抛出异常的代码所做的异常处理,删除不含有变量的词法绑

2、定(lexicalbindings),以及其它各种简单的清除。这是为了能够快速的去掉一些显而易见的东西,而不是等到后面去花费更多的功夫。该过程在tree-cfg.c中,并且由pass_remove_useless_stmts来描述。(2)死代码消除(Deadcodeelimination)该过程扫描函数来寻找没有副作用,且结果没有被使用的语句。它不进行内存活跃分析,所以任何存储在内存中值都被认为是被使用的。该过程在整个优化处理中被运行多次。它位于tree-ssa-dce.c中,并由pass_dce来描述。(3)dominator优化(Domi

3、natoroptimizations)该过程执行平凡的基于dominator的复制和常量传播,表达式简化,以及跳转线程化。它在整个优化处理中被运行多次。它位于tree-ssa-dom.c中,并由pass_dominator来描述。(4)单用变量向前传播(Forwardpropagationofsingle-usevariables)该过程尝试移除冗余计算,通过将只使用一次的变量替换为使用它们的表达式,并查看是否得到的结果可以被简化。它位于tree-ssa-forwprop.c中,并由pass_forwprop来描述。(5)可能别名优化(May

4、-aliasoptimization)该过程执行一个流敏感基于SSA指向的分析。所得的may-alias,must-alias和escape分析信息用来将变量从内存中可寻址的对象提升为可以被重命名为SSA形式的无别名变量。过程位于tree-ssa-alias.c中,并由pass_may_alias来描述。(6)死存储消除(Deadstoreelimination)该过程消除死存储,即存储到内存中,而该内存被随后的另一个存储操作重新写入,并且之间没有加载操作。过程位于tree-ssa-dse.c中,并由pass_dse来描述。6(7)尾递归消除

5、(Tailrecursionelimination)该过程将所有的尾递归转换到一个循环中。它位于tree-tailcall.c中,并由pass_tail_recursion来描述。(8)部分冗余消除(Partialredundancyelimination)该过程消除部分冗余计算,同时执行加载移动。过程位于tree-ssa-pre.c中,并由pass_pre来描述。如果设置了-funsafe-math-optimizations,则在部分冗余消除前,GCC尝试通过倒数方式将除法转换为乘法。过程位于tree-ssa-math-opts.c中,并

6、由pass_cse_reciprocal来描述。(9)完全冗余消除(Fullredundancyelimination)这是一个较简单的PRE形式,只消除在所有路径上产生的冗余。它位于tree-ssa-pre.c中,并由pass_fre来描述。(10)循环优化(Loopoptimization)该过程的主驱动程序位于tree-ssa-loop.c中,并且由pass_loop来描述。该过程执行的优化为:循环不变量移动。该过程只移动在rtl级难以处理的不变量(函数调用,扩展成非平凡insn序列的操作)。使用-funswitch-loops时,它还

7、将不变的条件操作数移到循环外面,使得我们能够在循环外提过程中只需要进行平凡不变量分析。该过程还包括存储移动。该过程在tree-ssa-loop-im.c中实现。规约变量优化。该过程执行标准的规约变量优化,包括强度缩减,规约变量合并,以及规约变量消除。该过程在tree-ssa-loop-ivopts.c中实现。循环外提。该过程将不变的条件跳转移到循环外面。为了达到这一点,对于每种可能的条件跳转结果都会创建一个循环副本。该过程在tree-ssa-loop-unswitch.c中实现。该过程应该最终替代在loop-unswitch.c中的rtl级的

8、循环外提,但是目前rtl级的过程还不是完全多余的,是因为还缺少tree级的别名分析。这些优化还用到了tree-ssa-loop-manip.c,cfgloop.c,

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。