因为之前的两篇博文前瞻-全时优化和LLVM-1前瞻-全时优化和LLVM-2都是基于Chris Lattner 2004年发表在CGO的文章写的。所以需要介绍一下LLVM从2004到2010这六年的变化,LLVM的开发社区很活跃。

从2004年三月到2010年4月,LLVM共发布了1.2-1.9,2.0-2.7,16个版本,至少每年发布两个版本。详细的历史发布版本和release都能从这里找到。

Continue reading »

 

传统的过程內分析,采用很保守的策略,假设所有对过程可见的变量都可能改变,并默认所有可能的操作都有副作用,因此过程內分析和优化非常简单。函数调用对于优化策略来说,隐藏了副作用的信息,虽然inline能够将副作用信息暴露给调用者,但这会大大增加代码量并降低指令局部性,而且并非所有的函数都能inline(如,对于不可预测副作用的函数)。过程间分析(InterProcedural Analysis)就应运而生,被用来作程序调用分析,能够处理inline不能处理的问题。删除不必要的函数调用,做指针和常数传播等。

IPA 提供了完全不同的策略,先分析过程內的信息,如别名和依赖关系,然后将这些信息在调用图(根据过程间的调用关系得到的图)中传播,然后就可以利用这些信息决定将函数特殊化,移除函数中的某些不可能经过的路径或者内联函数。通过这些分析,能降低编译器对存储依赖的不确定性。目前还很活跃的编译器都支持了过程间分析和优化,例如gcc -O3就能默认打开优化,open64可以使用-ipa打开,LLVM也有强大的链接时过程间优化,ICC也有。 Continue reading »

 

此文是Fred Chow在德拉华大学所讲open64课程讲义的翻译,转载请注明出处 http://www.lingcc.com

Fred Chow 原版讲义见最后一页

Open64课程–过程间分析优化

  • IPA的角色

唯一在程序间的优化操作。分析:收集整个程序的信息; 优化:在程序过程之间进行优化。IPA的整个优化效果取决于它之后的优化;IPA也为之后的优化阶段提供了跨文件的信息。

2009-2011© 编译点滴 Suffusion theme by Sayontan Sinha

无觅相关文章插件,快速提升流量