Type-Preserving Flow Analysis and Interprocedural Unboxing (Extended   Version)
  Interprocedural flow analysis can be used to eliminate otherwise unnecessary heap allocated objects (unboxing), and in previous work we have shown how to do so while maintaining correctness with respect to the garbage collector. In this paper, we extend the notion of flow analysis to incorporate types, enabling analysis and optimization of typed programs. We apply this typed analysis to specify a type preserving interprocedural unboxing optimization, and prove that the optimization preserves both type and GC safety along with program semantics. We also show that the unboxing optimization can be applied independently to separately compiled program modules, and prove via a contextual equivalence result that unboxing a module in isolation preserves program semantics. 
Neal Glew and Leaf Petersen
cs.PL