Static Single Assignment (SSA) has become the intermediate program representation of choice in most modern compilers because it enables efficient data flow analysis of scalars and thus leads to better scalar optimizations. Unfortunately not much progress has been achieved in applying the same techniques to array data flow analysis, a very important and potentially powerful technology. In this paper we propose to improve the applicability of previous efforts in array SSA through the use of a symbolic memory access descriptor that can aggregate the accesses to the elements of an array over large,
interprocedural program contexts.
We then show the power of our new representation by using it to
implement a basic data flow algorithm, reaching definitions.
Finally we apply this analysis to array constant propagation and array privatization and show performance improvement (speedups) for benchmark codes.