|
The IMPACT C compiler was developed by the IMPACT research group [1]. It is a large,
complex, but well-structured piece of software intended to exploit the highest ILP for wide-issue
micro processors. Between the C source code and the machine-dependent assembly code, the IMPACT compiler
maintains three families intermediate representations: Pcode [2], Hcode [3], and Lcode [4].
Pcode is the high-level intermediate language. The grammar of Pcode maintains all constructs
in C so that the Pcode intermediate representation (IR) can carry source-code information in
order to perform source-to-source transformations. Pcode is further described in Chapter 2. Hcode is the middle-level IR in the IMPACT compiler. The major difference between Hcode and Pcode is that Hcode uses flattened control structures. For example, a loop construct in Pcode is transformed into basic blocks connected via if-then-else and goto constructs in Hcode. Originally, basic-block profiling and profile-driven inlining are performed in the Hcode level. Now they have been movd into the Pcode phase. Lcode is the low-level IR where machine-independent classic optimizations are applied. More advanced optimizing technilogies like superblock and hyperblock formations are also conducted in the Lcode level [5] [6]. Then machine-dependent code generators translate Lcode into assembly code. The architectures supported by the IMPACT compiler include AMD 29K [7], MIPS R3000 [8]. Sun SPARC [9], HP PA RISC and Intel x86.
|