In this talk we present a technique to represent the effects of aliasing in a program in SSA form preventing an explosion of the number of variable versions. We then introduce a method to handle indirect memory operations just like regular variable definitions and uses, so that they can be put in SSA form and benefit from the optimization passes applied to the rest of the program. Finally we introduce a compact code representation (called HSSA) based on SSA and global value numbering, which again handles uniformly both direct and indirect variable accesses and memory operations.