Practical Assignment Sinking for Dynamic Compilers
Assignment sinking improves the efficiency of programs by avoiding variable
assignments on paths where the variable isn't used. A single assignment is
partially live if its value is used on one execution path and not on
another path. By sinking the assignment onto the path where the value is
used, the other path is made more efficient. In many cases, the path to
which the assignment is sunk is also made more efficient because the
generated code quality can be improved. Assignment sinking has
traditionally been accomplished using the classic Partial Redundancy
Elimination (PRE) framework. But PRE involves several dataflow analyses to
identify the optimal program points for each assignment which limits its
usefulness in scenarios where compile time is important, such as in a
dynamic compiler. In this talk, we describe a more efficient method to
sink assignments using fewer dataflow analyses. This algorithm has been
implemented in the TestaRossa Just-In-Time compiler in the IBM Developer
Kit for Java
Greg Steffan
Last modified: Fri Aug 31 10:23:47 EDT 2007