Dear Tyler,
First, you *could* represent memory objects in SSA form now that LLVM
supports vector and structure-based SSA virtual registers. However,
there is no LLVM pass that will take heap-based memory objects and
convert them into SSA form. Moreover, the code generators are not
expecting the compiler to put heap variables into SSA form, and so if
you can generate native code from a program that has been transformed in
this way, it will probably not run very fast.
Second, regarding analysis passes, I'm not sure that LLVM really has
passes for doing data-flow analysis on values in memory. The best I can
think of is the DSA points-to analysis; this lives in the poolalloc
source code and isn't used by LLVM itself. It has been used by a few
research projects to do data-flow analysis on values traveling through
the heap.
There are other analyses within LLVM that may reason about heap objects
using the AliasAnalysis interface (the passes to remove redundant loads
and stores comes to mind), but I don't think they do proper Kam-Ullman
data-flow analysis on data traveling *through* heap objects (but someone
can correct me if I'm wrong on that).
Regards,
John Criswell
--
John Criswell
Assistant Professor
Department of Computer Science, University of Rochester
http://www.cs.rochester.edu/u/criswell