Our optimization manages many cases, from simple situations where a C++ programmer would use inline allocation to more complex situations like eliding cons cells, which would, at a minimum, cause conceptual disruption to the code if a C++ programmer used inline allocation. polyOver is a low-level C program with carefully tuned storage management resulting in messy combinations of pointers. Our analysis is able to reproduce even such ugliness as that automatically. Furthermore, doing so provides substantial performance gains without bloating code size, indeed the code usually shrinks a little bit.
The major limitation is, as one might expect, aliasing information needed to make inlining decisions. The limitations in Richards and polyOver are implementation issues, better loop and array analysis respectively could solve these without fundamental difficulty. On the other hand, Silo is more problematic: to eliminate the cons cells of the event list would require strong aliasing information. Given the difficulty of alias analysis, this represents a limitation on our optimization's efficacy.