  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.
