The IA-64 architecture is rich with features that enable aggressive exploitation of instruction-level parallelism. Features such as speculation, predication, multiway branches and others provide compilers with new opportunities for the extraction of parallelism in programs. Code scheduling is a central component in any compiler for the IA-64 architecture. This paper describes the implementation of the global code scheduler (GCS) in Intel's reference compiler for the IA-64 architecture. GCS schedules code over acyclic regions of control flow. There is a tight coupling between the formation and scheduling of regions. GCS employs a new path based data dependence representation that combines control flow and data dependence information to make data analysis easy and accurate. This paper provides details of this representation. The scheduler uses a novel instruction scheduling technique called Wavefront scheduling. The concepts of wavefront scheduling and deferred compensation are explained to demonstrate the efficient generation of compensation code while scheduling. This paper also presents P-ready code motion, an opportunistic instruction level tail duplication which aims to strike a balance between code expansion and performance potential. Performance results show greater than 30% improvement in speedup for wavefront scheduling over basic block scheduling on the Merced microarchitecture.
[1]
Joe D. Warren,et al.
The program dependence graph and its use in optimization
,
1987,
TOPL.
[2]
Joseph A. Fisher,et al.
Trace Scheduling: A Technique for Global Microcode Compaction
,
1981,
IEEE Transactions on Computers.
[3]
Kemal Ebcioglu,et al.
An efficient resource-constrained global scheduling technique for superscalar and VLIW processors
,
1992,
MICRO 1992.
[4]
Scott A. Mahlke,et al.
Effective compiler support for predicated execution using the hyperblock
,
1992,
MICRO 25.
[5]
Michael Rodeh,et al.
Global instruction scheduling for superscalar machines
,
1991,
PLDI '91.
[6]
Hugo Krawczyk,et al.
Code duplication: an assist for global instruction scheduling
,
1991,
MICRO 24.
[7]
Thomas M. Conte,et al.
Treegion scheduling for wide issue processors
,
1998,
Proceedings 1998 Fourth International Symposium on High-Performance Computer Architecture.
[8]
Michael Rodeh,et al.
Proving Safety of Speculative Load Instructions at Compile Time
,
1992,
ESOP.