When I originally thought of flattening the data structures for representing GIMPLE, I had not really contemplated the idea of totally lowering the memory expressions represented by ARRAY_REF and COMPONENT_REF.
However, as Kenny pointed out today, it may be useful for us to completely simplify these expressions to remove their recursive structure. Something like: ARRAY_REF : ID [ VAL ] COMPONENT_REF : ID . ID | INDIRECT_REF . ID INDIRECT_REF : * ID We would probably need INDIRECT_REFs in COMPONENT_REF nodes to avoid lots of memory copying. The rationale is that by removing the recursiveness of these expressions, it would make it easier to emit the LTO bytecodes without resorting to a stack machine. These memory expressions are the only ones that I think would need to be simplifed. All the other GIMPLE expressions are already flat enough for LTO purposes. This flattening, however, could bring debug code generation issues. I'm not sure. Please don't get too fixated on the above pseudo-code. I have not thought about this through in detail. I just want to bring this up, particularly for folks doing data dependency. Perhaps we need different expressions altogether, we don't need to stick to the current scheme if it's not sufficiently useful. Thoughts?