HiPE on AMD64

Erlang is a concurrent functional language designed for developing large-scale, distributed, fault-tolerant systems. The primary implementation of the language is the Erlang/OTP system from Ericsson. Even though Erlang/OTP is by default based on a virtual machine interpreter, it nowadays also includes the HiPE (High Performance Erlang) native code compiler as a fully integrated component. This paper describes the recently developed port of HiPE to the AMD64 architecture. We discuss technical issues that had to be addressed when developing the port, decisions we took and why, and report on the speedups (compared with BEAM) which HiPE/AMD64 achieves across a range of Erlang programs and how these compare with speedups for the more mature SPARC and x86 back-ends.

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

[2]  Mikael Pettersson,et al.  A high performance Erlang system , 2000, PPDP '00.

[3]  Konstantinos Sagonas,et al.  Unboxed Compilation of Floating Point Arithmetic in a Dynamically Typed Language Environment , 2002, IFL.

[4]  Mikael Pettersson,et al.  The development of the HiPE system: design and experience report , 2003, International Journal on Software Tools for Technology Transfer.

[5]  Mark N. Wegman,et al.  Constant propagation with conditional branches , 1985, POPL.

[6]  Thomas G. Szymanski,et al.  Assembling code for machines with span-dependent instructions , 1978, CACM.

[7]  Konstantinos Sagonas,et al.  Native code compilation of Erlang's bit syntax , 2002, ERLANG '02.

[8]  Peter Lee,et al.  Generational stack collection and profile-driven pretenuring , 1998, PLDI.

[9]  Mark N. Wegman,et al.  Efficiently computing static single assignment form and the control dependence graph , 1991, TOPL.

[10]  Keith D. Cooper,et al.  Improvements to graph coloring register allocation , 1994, TOPL.

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

[12]  Konstantinos Sagonas,et al.  Experimental evaluation and improvements to linear scan register allocation , 2003, Softw. Pract. Exp..

[13]  Joe Armstrong,et al.  Concurrent programming in ERLANG , 1993 .

[14]  Mikael Pettersson,et al.  The HiPE/x86 Erlang Compiler: System Description and Performance Evaluation , 2002, FLOPS.

[15]  Andrew W. Appel,et al.  Iterated register coalescing , 1996, TOPL.