Our current research strives to achieve excellent performance for large, heavily object-oriented programs. We are targeting whole-program analysis and optimization , enlarging the scope of analysis and optimization to the interprocedural level, potentially to include the entire program being implemented. These techniques are embodied in the Vortex optimizing compiler infrastructure. We are studying how dynamic execution profile information can be applied to understanding and optimizing object-oriented programs. We are first studying how well profiles predict future behavior, both for runs of the same program on different data sets and for different versions of a program.
Initial results indicate that concrete type profiles are quite stable.
Next, we are exploring ways of incorporating the profile data into the compilation process, including recompiling a call site exploiting its particular profile data and recompiling new call sites using averages of the profiles of similar call sites. More traditionally, the profiles indicate the program's hot spots, and the compiler can use this information to help it make decisions about where to be more aggressive in its optimization. Previous work on optimizing compilers for object-oriented languages developed an intraprocedural data flow analysis that computes the concrete classes of the receivers of messages. While this worked well for small programs, its restriction to operating only intraprocedurally turned out to be a severe weakness when compiling larger programs. We are investigating ways of enlarging the scope of static analysis beyond procedure boundaries.