Just-in-time Java compilation for the Itanium/spl reg/ processor

This paper describes a just-in-time (JIT) Java compiler for the Intel/spl reg/ Itanium/spl reg/ processor. The Itanium processor is an example of an Explicitly Parallel Instruction Computing (EPIC) architecture and thus relies on aggressive and expensive compiler optimizations for performance. Static compilers for Itanium use aggressive global scheduling algorithms to extract instruction-level parallelism. In a JIT compiler, however, the additional overhead of such expensive optimizations may offset any gains from the improved code. In this paper, we describe lightweight code generation techniques for generating efficient Itanium code. Our compiler relies on two basic methods to generate efficient code. First, the compiler uses inexpensive scheduling heuristics to model the Itanium microarchitecture. Second, the compiler uses the semantics of the Java virtual machine to extract instruction-level parallelism.

[1]  Steven S. Muchnick,et al.  Efficient instruction scheduling for a pipelined architecture , 1986, SIGPLAN '86.

[2]  John Cocke,et al.  Register Allocation Via Coloring , 1981, Comput. Lang..

[3]  John Cocke,et al.  A methodology for the real world , 1981 .

[4]  Frank Yellin,et al.  The Java Virtual Machine Specification , 1996 .

[5]  Guy L. Steele,et al.  The Java Language Specification , 1996 .

[6]  James M. Stichnoth,et al.  Practicing JUDO: Java under dynamic optimizations , 2000, PLDI '00.

[7]  Steven S. Muchnick,et al.  Advanced Compiler Design and Implementation , 1997 .

[8]  Ken Kennedy,et al.  Conversion of control dependence to data dependence , 1983, POPL '83.

[9]  Amer Diwan,et al.  Type-based alias analysis , 1998, PLDI.

[10]  Thomas R. Gross,et al.  Modeling Instruction-Level Parallelism for Software Pipelining , 1993, Architectures and Compilation Techniques for Fine and Medium Grain Parallelism.

[11]  James M. Stichnoth,et al.  Support for garbage collection at every instruction in a Java compiler , 1999, PLDI '99.

[12]  Toshiaki Yasue,et al.  A dynamic optimization framework for a Java just-in-time compiler , 2001, OOPSLA '01.

[13]  Alfred V. Aho,et al.  Compilers: Principles, Techniques, and Tools , 1986, Addison-Wesley series in computer science / World student series edition.

[14]  Sebastian Winkel,et al.  ILP-based Instruction Scheduling for IA-64 , 2001, OM '01.

[15]  Youngsoo Choi,et al.  The impact of If-conversion and branch prediction on program execution on the Intel/sup R/ Itanium/sup TM/ processor , 2001, Proceedings. 34th ACM/IEEE International Symposium on Microarchitecture. MICRO-34.

[16]  Sebastian Winkel,et al.  ILP-based Instruction Scheduling for IA-64 , 2001 .

[17]  Gregory J. Chaitin,et al.  Register allocation and spilling via graph coloring , 2004, SIGP.

[18]  Corporate Intel Corp. 386 Sx Microprocessor Programmer's Reference Manual , 1990 .

[19]  Youngsoo Choi,et al.  The impact of if-conversion and branch prediction on program execution on the Intel Itanium processor , 2001, MICRO.

[20]  Vivek Sarkar,et al.  Linear scan register allocation , 1999, TOPL.