首页> 外文会议>Compiler Construction >Combined Code Motion and Register Allocatior Using the Value State Dependence Graph
【24h】

Combined Code Motion and Register Allocatior Using the Value State Dependence Graph

机译:使用值状态依赖图组合代码运动和寄存器分配

获取原文

摘要

We define the Value State Dependence Graph (VSDG). The VSDG is a form of the Value Dependence Graph (VDG) extended by the addition of state dependence edges to model sequentialised computation. These express store dependencies and loop termination dependencies of the original program. We also exploit them to express the additional serialization inherent in producing final object code. The central idea is that this latter serialization can be done incrementally so that we have a class of algorithms which effectively interleave register allocation and code motion, thereby avoiding a well-known phase-order problem in compilers. This class operates by first normalizing the VSDG during construction, to remove all duplicated computation, and then repeatedly choosing between: (ⅰ) allocating a value to a register, (ⅱ) spilling a value to memory, (ⅲ) moving a loop-invariant computation within a loop to avoid register spillage, and (ⅳ) statically duplicating a computation to avoid register spillage. We show that the classical two-phase approach (code motion then register allocation in both Chow and Chaitin forms) are examples of this class, and propose a new algorithm based on depth-first cuts of the VSDG.
机译:我们定义了值状态依赖图(VSDG)。 VSDG是值依赖图(VDG)的一种形式,通过将状态依赖边添加到模型顺序计算中来进行扩展。这些快速存储依赖关系和原始程序的循环终止依赖关系。我们还利用它们来表达产生最终目标代码时固有的附加序列化。中心思想是,后者的序列化可以逐步完成,因此我们拥有一类算法,可以有效地交错寄存器分配和代码运动,从而避免了编译器中众所周知的相序问题。此类的工作方式是:首先在构造期间对VSDG进行规范化,以删除所有重复的计算,然后重复选择以下各项:(ⅰ)将值分配给寄存器,(ⅱ)将值溢出到内存,(ⅲ)移动循环不变式循环内的计算以避免寄存器溢出,以及(ⅳ)静态复制计算以避免寄存器溢出。我们证明了经典的两阶段方法(代码运动然后以Chow和Chaitin形式进行寄存器分配)是此类的示例,并提出了一种基于VSDG的深度优先切割的新算法。

著录项

相似文献

  • 外文文献
  • 中文文献
  • 专利
获取原文

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号