Abstract

Global instruction scheduling is important for superscalar, superpipelined and VLIW machines. Instruction scheduling issues for scopes extending beyond a basic block are significantly different from those for scheduling within a basic block. This paper presents a general framework for performing scheduling across basic blocks. The method presented here identifies control flow subgraphs termed regions, within which basic blocks are scheduled in forward topological order while hoisting instructions from basic blocks lower in the flow graph. Within each basic block, a directed acyclic graph represents the dependence information, while a definition matrix in conjunction with a path matrix represents the overall control and data dependence information within a region. These data structures are consulted prior to the global motion of an instruction and incrementally updated when necessary. In addition, precautions are taken to guarantee safe execution of speculative instructions. Limited renaming and code duplication is performed to overcome dependency constraints. Profile information is used when available to guide the choice of instructions. An optimizing compiler using this technique was implemented and evaluated using a set of standard performance benchmarks on real and hypothetical target machines.KeywordsBasic BlockGlobal ScheduleTarget BlockRegion ScheduleProgram Dependence GraphThese keywords were added by machine and not by the authors. This process is experimental and the keywords may be updated as the learning algorithm improves.

Full Text
Published version (Free)

Talk to us

Join us for a 30 min session where you can share your feedback and ask us any queries you have

Schedule a call