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

Fred Chow 原版讲义见最后一页

Open64课程–过程间分析优化

  • IPA的角色

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

  • IPA的流图

    ipa_flow

  • IPA的准备阶段

即:Pre-IPA(IPL)阶段。将前端扩展为一个编译单元。它在PREOPT阶段之后成为VHO(?),并将所有优化前的WHIRL信息汇总。之后生成含新的ELF段的伪.0文件。这个.0文件包含WHIRL段和汇总信息阶段。

ipa1

  • 关于汇总信息

使用汇总信息的目的是OPA不需要沿着WHIRL传播;每个PU中存储的信息包括:PU内容的统计、每个PU中的反馈信息、形参、全局变量赋值、PU中的调用点、实参、常数表及其值、IPA相关表以及它们的mod/ref(?)、相关符号的SSA图、指定的简单表达式和语句、控制依赖、常见块和规模(?)、结构体访问信息(详见ipa/local/ipl_summary.h文件)

  • 主IPA阶段概览

它使用了pre-linker的机制:IPA阶段编译到ipa.so文件中,ipa.so使用成为ipa_link的GNU ld实现链接。操作的模式:首先,传递所有输入文件,进行符号表解析,读入汇总信息;然后进行过程间分析,仅工作在汇总信息上、再接着进行过程间优化,即读入WHIRL并修改WHIRL;最后得到输出。

  • 关于符号解析

ipa_link和ld(无-ipa选项时)在link阶段看到的对象相同。他们的ipa_link和ld符号解析规则也一样。不同文件中的全局符号将会合并到一个单一的全局符号表中,并保存在symtab.i文件中,且之后的全局符号表只有一个。

  • 符号表合并

只要没有特定到单个PU的符号表都将合并,顶层的驱动函数是IPC_merge_global_tab(common/ipc_symtab_merge.cxx),并且创建了一个新表用来将旧表中的旧索引映射到新索引。符号表合并的顺序依次是:字符串表、类型、TCONs、符号、INITOs和INITVs、符号属性(ST_ATTR)

  10 Responses to “open64课程–过程间分析优化(IPA)”

  1. [...] open64课程–过程间分析优化(IPA) (9) [...]

  2. [...] open64课程–过程间分析优化(IPA) [...]

  3. [...] open64课程–过程间分析优化(IPA) [...]

  4. [...] I) part 1Open64课程–反馈指导优化(FDO) « 编译点滴 on open64课程–过程间分析优化(IPA)Open64课程–反馈指导优化(FDO) « 编译点滴 on [...]

  5. [...] open64课程–过程间分析优化(IPA) [...]

  6. ipa_link和ld(无-ipa选项时)在link阶段看到的对象相同。但是ipa_link和ld识别符号解析的规则不同.
    不理解第一句。
    另外原文是Identical symbol resolution rules between ipa_link and ld。为啥翻译成规则不同?

    • 抱歉,这里是我在没有理解IPA的基础上翻译出的错。正确的译法是:ipa_link和ld(无-ipa选项时)在link阶段看到的对象相同。他们的ipa_link和ld符号解析规则也一样。
      这主要是因为,ipa_link有类似于LD的行为—在全局范围内处理符号表和PU,open64中的ipa_link就是从ld的源码中修改而来,所以他们看到的对象和符号解析规则相同。ipa_link和ld的不同点是,ipa_link用这些全局信息作进一步的分析和优化,而ld则是利用这些信息来重新解析不好表,将多个.o文件生成最后的可执行文件。
      因为自己的英语还不行,翻译过程中肯定有问题,尽管指出,呵呵。我一定修改:)
      Thanks

    • @hg,
      Ipalink用ld的代码,是因为symbol lookup的逻辑和行为要保持一致。llvm则是在link时直接作ipa
      –by zsc

  7. 这个博客的技术性好强。

    • 呵呵 主要是为了让自己能学到点东西:)
      偶尔也会有一些生活的文章。欢迎来看看 呵呵

 Leave a Reply

(required)

(required)

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

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

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