一种基于高级中间表示的结构优化方法及系统的制作方法

文档序号:6332135阅读:188来源:国知局
专利名称:一种基于高级中间表示的结构优化方法及系统的制作方法
技术领域
本发明属于程序编译优化技术领域,具体涉及一种用于程序优化的中间表示和关 联的方法和系统。
背景技术
中间表示直接决定着编译器的可扩展性和优化效果。从结构上来看,中间表示一 般分为三种(1)结构化的表示,这类中间表示面向图形,如树、有向无环图,通常用于源到 源的程序转换;(2)线性的表示,伪代码的表示形式,依据机器不同的抽象层而变换,通常 采用简单、紧凑的数据结构,易于重构,如SSA ; (3)混合的表示,是对前两种表示的混合,试 图获取两者的优点,如控制流图。中间表示的最佳选择依赖于具体应用,没有统一的标准。 程序分析过程依赖程序的控制流和数据流信息,比如嵌套循环优化和自动并行识别需要识 别循环结构和精确的数据流信息。0pen64编译器定义了一种树结构的中间表示WHIRL。 WHIRL通过高级控制流结构,如IF、WHILE_D0、D0_L00P和GOTO/LABEL语句,显式的表示控 制流信息;数据访问信息通过内存访问语句,如LDID、I LOAD, STID、ISTORE等表示;WHIRL 有结构化表示的优点,但不能显式的表示数据流信息。对于优化中的数据流信息,通常采用 SSA (Static Single Assignment)形式将程序变量重命名成不同的版本,每个版本有一个 静态单一赋值语句,因此,变量的不同版本信息显式的给出了引用-定义信息。SSA表示需 要依赖控制图获取程序的控制流信息,而WHIRL的优势在于能够显示的提供数据流信息, 无需构建程序的控制流图。因此本发明提出了一种基于高级中间表示的结构WHIRL SSA的优化方法,显式地 表示程序控制流和数据流信息。WHIRL SSA在WHIRL节点上标注SSA信息,继承了 WHIRL表 示和SSA表示的优点,能够提高编译器的可扩展性和优化效果。

发明内容
本发明的目的在于提供一种基于高级中间表示的优化架构WHIRL SSA的方法,以 便能显式地表示程序控制流和数据流信息,提高编译器的可扩展性和优化效果。本发明提出的基于高级中间表示的优化架构WHIRL SSA的方法,是将SSA信息标 注在WHIRL树形结构中。它继承了原有WHIRL的特点并与基于WHIRL的优化实现兼容;同 时,所有基于SSA的优化都能从WHIRL SSA架构中受益。具体步骤包括(I)WHIRL SSA的 生成;(2)PHI节点的插入;(3) WHIRL SSA的更新;(4) WHIRL SSA的验证。1. WHIRL SSA的生成 WHIRL SSA通过遍历WHIRL节点生成SSA信息;并将SSA 信息插入到WHIRL结构中。2. PHI节点的插入 将PHI节点插入到WHIRL结构的合适位置。WHIRL SSA继承了 WHIRL和SSA的优点,能够同时显式的表示控制流信息和数据流 信息。别名的定义/引用操作可以同标量处理一样。由于别名信息的不精确,导致很多分 析只能中止而作保守估计,而WHIRL SSA有助于得到精确的别名信息。
4
3. WHIRL SSA的更新 WHIRL SSA可在小范围内更新并保持精度。相同精确的 信息可在不同的优化阶段提供给不同的优化。克服了别名情况下传统的数据流信息不完整 以及SSA更新造成的精度丢失。由更新模块完成。4. WHIRL SSA的验证对构建的SSA信息以及更新后的SSA信息进行正确性与一 致性的验证。由验证模块完成。相应于上述优化方法的实现系统,其总体架构包括6个模块WHIRL SSA管理模 块、DU/UD管理模块、更新模块、验证模块、生成模块和读写接口。模块间的依赖关系见图1 所示,即WHIRL SSA管理模块分别与DU/UD管理模块、更新模块、验证模块、生成模块和读写 接口连接。每个程序方法拥有一个指针,该指针指向包含该方法SSA信息的WHIRL SSA管理 模块。WHIRL SSA管理模块负责维护每个方法的SSA相关信息。SSA信息包含phi/chi/ mu/ver,存储在多个表中。WHIRL节点和SSA之间的映射关系通过map结构维护。map在生 成SSA信息或从WHIRL文件读取SSA信息时进行建立。依赖于同一个WN的phi节点通过 PHI_LIST链接。WHIRL SSA管理模块提供接口给生成模块,用于决定WHIRL节点的类型; 生成模块依据全局优化阶段的符号表和SSA信息生成SSA符号表;验证模块用来验证SSA 信息的正确性和一致性。当程序转换完成后,更新模块可以在局部区域对SSA信息进行更 新;DU/UD管理模块负责维护数据流信息。读写接口负责对WHIRL文件的SSA信息进行读 取或写回。本发明将两种中间表示的优点揉合在一个优化架构中,并与原有的WHIRL结构兼 容,提高WHIRL中间表示的信息表示能力。WHIRL SSA使得每个函数调用点拥有流敏感的上 下文信息抽象调用点的每个实参和全局变量,进而能够构建标量流敏感和上下文敏感的 调用图,有利于展开精确的过程间分析。过程间别名分析同样能从WHIRL SSA受益,如“是 否χ和y别名”的问题则转化为“是否χ的i版本和y的j版本别名”的问题。因而有利于 得到精确的别名信息。


图1是WHIRL SSA的系统架构图。图2是WHIRL SSA的phi插入处理过程。
具体实施例方式第一,WHIRLSSA 的生成
通过SSA生成器通过遍历WHIRL节点生成SSA信息,包含phi节点、chi节点、mu节 点和变量的版本信息。最后将Phi节点、chi节点和mu节点插入到WHIRL树中。正确位置 中chi表示变量定义信息,mu表示变量的引用信息。这样别名的定义一引用信息被记录在 chi和mu节点上。phi、chi和mu节点的版本信息记录在各自的节点内。第二,phi的插入处理
构建SSA的一个重要步骤就是PHI节点的插入。为了保持与WHIRL表示的兼容,不引 入新的节点,WHIRL SSA中的phi节点插入与传统的SSA插入处理有所区别。phi被插入在
5结构控制流(SCF)和标号(标号是多个goto的聚合节点)的根节点上。这样的插入策略 基于如下两个原因=(I)Phi节点描述了整个SCF节点的副作用;(2)大部分SCF的聚合节点 之内或之后没有标号。图2是除Label语句之外的高层控制流结构的phi节点插入处理图示。1、对于IF结构,phi节点被插入在IF的WHIRL节点上。phi有两个操作数第一 个操作数是THEN块内定义的版本信息,比如图2(a)中的al,或在IF之前的活跃版本 ’另 一个是ELSE块内定义的版本,或当ELSE内无版本定义,则为IF之前的活跃版本。phi节点 的结果是IF之后活跃版本。2、对于WHILE_D0循环结构,phi的第一个操作数为WHILE_D0之前的活跃版本;第 二个操作数为循环体内定义的最后版本;结果为WHILE_D0之后的活跃版本。3、对于D0_WHILE循环,phi的操作数以及结果与WHILE_D0类似。4、对于D0_L00P循环,phi的第一个操作数为初始化定义的最后版本,若初始化 中无定义,则为循环前的活跃版本;第二个操作数为循环体和循环计数中定义的最后版本; 结果为循环结构后的活跃版本。5、对于Label语句的phi插入处理与基于控制流图的传统phi插入处理类似。第三,WHIRL SSA的更新
当程序在优化中被变换时,SSA信息则需要更新。对于传统的SSA优化,WHIRL SSA的 更新可以采用传统的SSA更新方法;在很多情况下,SSA更新困难且开销较大,通常采用重 新构建SSA的策略。本发明采用对局部范围的SSA重构,然后再和整体进行合并,达到对 SSA更新的目的。DU/UD的数据流信息也同样在局部范围内重新计算。这样的策略避免了 更新后SSA信息的不精确,并且使得DU/UD信息在分析过程中按需计算。对SSA的局部计算,有以下约定
1)被转换的区域必须只有一个入口。如果有多个入边,则插入phi节点。2)被转换区域可以有多个出边或是exit基本块。3 )转换过程不引入新的入口。4)转换过程可以引入新的出边,但不引入新的出边目标节点。有了上述条件,区域内的变换影响范围有限,两个SSA子区域被合并后能够保持 变量版本信息的一致。更新算法包含以下四个步骤
1)验证区域符合上述四个条件。2)在变换前,收集区域内每个使用或定义符号的版本信息。3)转换后,验证新的区域,在该区域内重新计算SSA信息。在重命名阶段,对变量 的版本号更新从该符号在变换前的最大版本开始。4)最后,新区域树合并到原始的根树。通过对入口和输出节点插入赋值语句实现 符号版本的一致。当引入了新的出边,则在出边的目标处插入Phi节点。第四,WHIRLSSA 验证
构建WHIRL SSA或更新SSA信息都需要对WHIRL SSA的正确性和一致性进行验证。正 确性包括所有变量的版本信息且版本号无重叠、控制流图中的连接节点有Phi节点、mu/ chi列表构建正确。一致性主要验证phi节点的操作数与WHIRL节点一致,且满足phi的插 入规则。另外,还需要验证SSA版本的活跃区间无重叠。
权利要求
一种基于高级中间表示的结构优化方法,其特征在于具体步骤为(1)WHIRL SSA的生成;(2)PHI节点的插入;(3)WHIRL SSA的更新;(4)WHIRL SSA的验证。
2.根据权利要求1所述的基于高级中间表示的结构优化方法,其特征在于所述WHIRL SSA的生成的步骤为通过SSA生成器通过遍历WHIRL节点生成SSA信息,包含phi节点、 chi节点、mu节点和变量的版本信息;最后将phi节点、chi节点和mu节点插入到WHIRL树 中;正确位置中chi表示变量定义信息,mu表示变量的引用信息;别名的定义一引用信息被 记录在chi和mu节点上;phi、chi和mu节点的版本信息记录在各自的节点内。
3.根据权利要求2所述的基于高级中间表示的结构优化方法,其特征在于所述phi节 点的插入是将Phi插入在结构控制流(SCF)和标号的根节点上。
4.根据权利要求3所述的基于高级中间表示的结构优化方法,其特征在于所述phi节 点的插入分下述几种情形(1)对于IF结构,将phi节点插入在IF的WHIRL节点上;phi有两个操作数第一个 操作数是THEN块内定义的版本信息,或在IF之前的活跃版本;另一个是ELSE块内定义的 版本,或当ELSE内无版本定义,则为IF之前的活跃版本;phi节点的结果是IF之后活跃版 本;(2)对于WHILE_D0循环结构,phi的第一个操作数为WHILE_D0之前的活跃版本;第二 个操作数为循环体内定义的最后版本;结果为WHILE_D0之后的活跃版本;(3)对于D0_WHILE循环,phi的操作数以及结果与WHILE_D0相同;(4)对于D0_L00P循环,phi的第一个操作数为初始化定义的最后版本,若初始化中无 定义,则为循环前的活跃版本;第二个操作数为循环体和循环计数中定义的最后版本;结 果为循环结构后的活跃版本。
5.根据权利要求4所述的基于高级中间表示的结构优化方法,其特征在于所述WHIRL SSA的更新,采用对局部范围的SSA重构方法,然后再和整体进行合并,达到对SSA更新的目 的;DU/UD的数据流信息同样在局部范围内重新计算;对SSA的局部计算,有以下约定1)被转换的区域必须只有一个入口,如果有多个入边,则插入phi节点;2)被转换区域有多个出边或是exit基本块;3)转换过程不引入新的入口;4)转换过程可以引入新的出边,但不引入新的出边目标节点;更新算法包含以下四个步骤1)验证区域符合上述四个条件;2)在变换前,收集区域内每个使用或定义符号的版本信息;3)转换后,验证新的区域,在该区域内重新计算SSA信息;在重命名阶段,对变量的版 本号更新从该符号在变换前的最大版本开始;4)最后,新区域树合并到原始的根树,通过对入口和输出节点插入赋值语句实现符号 版本的一致;当引入了新的出边,则在出边的目标处插入Phi节点。
6.根据权利要求5所述的基于高级中间表示的结构优化方法,其特征在于所述WHIRLSSA验证包括在构建WHIRL SSA或更新SSA信息时,对WHIRL SSA的正确性和一致性进行验 证;其中,正确性验证包括所有变量的版本信息且版本号有无重叠、控制流图中的连接节点 有无Phi节点、mu/chi列表构建是否正确;一致性验证包括phi节点的操作数与WHIRL节 点是否一致,且满足Phi的插入规则,SSA版本的活跃区间有无重叠。
7.根据权利要求1一6之一所述的基于高级中间表示的结构优化方法的实现系统,其 特征在于总体架构包括6个模块:WHIRL SSA管理模块、DU/UD管理模块、更新模块、验证模 块、生成模块和读写接口; WHIRL SSA管理模块分别与DU/UD管理模块、更新模块、验证模 块、生成模块和读写接口连接;其中WHIRL SSA管理模块负责维护每个模块的SSA相关信息,SSA信息包含phi/chi/mu/ ver,存储在多个表中;WHIRL节点和SSA之间的映射关系通过map结构维护,map在生成SSA 信息或从WHIRL文件读取SSA信息时进行建立;依赖于同一个WN的phi节点通过PHI_LIST 链接;WHIRL SSA管理模块提供接口给生成模块,用于决定WHIRL节点的类型;生成模块依 据全局优化阶段的符号表和SSA信息生成SSA符号表;验证模块用来验证SSA信息的正确 性和一致性;当程序转换完成后,更新模块在局部区域对SSA信息进行更新;DU/UD管理模 块负责维护数据流信息;读写接口负责对WHIRL文件的SSA信息进行读取或写回。
全文摘要
本发明属于程序编译优化技术领域,具体为一种基于高级中间表示的结构优化方法及系统。主要包括(1)WHIRLSSA的生成,通过遍历WHIRL节点生成SSA信息并将SSA信息标注在WHIRL节点中;(2)PHI节点的插入,将PHI节点插入到WHIRL结构的合适位置;(3)WHIRLSSA的更新与验证,WHIRLSSA更新采用按需更新策略,通过将局部范围的SSA更新合并到一起,实现对整个SSA更新的目的。系统的总体构架包括WHIRLSSA管理模块、DU/UD管理模块、更新模块、验证模块、生成模块和读写接口。WHILRSSA是一个同时包含了数据流和控制流信息的基于树结构高级中间表示的优化架构。WHIRLSSA优化架构继承了WHIRL和SSA两种中间表示的优点,提高了编译器的优化效果和扩展性。
文档编号G06F9/44GK101923472SQ20101028318
公开日2010年12月22日 申请日期2010年9月16日 优先权日2010年9月16日
发明者李弋, 杨克峤, 臧斌宇 申请人:复旦大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1