Next: Scalar evolutions, Previous: Loop manipulation, Up: Loop Analysis and Representation
Throughout the loop optimizations on tree level, one extra condition is enforced on the SSA form: No SSA name is used outside of the loop in that it is defined. The SSA form satisfying this condition is called “loop-closed SSA form” – LCSSA. To enforce LCSSA, PHI nodes must be created at the exits of the loops for the SSA names that are used outside of them. Only the real operands (not virtual SSA names) are held in LCSSA, in order to save memory.
There are various benefits of LCSSA:
However, it also means LCSSA must be updated. This is usually
straightforward, unless you create a new value in loop and use it
outside, or unless you manipulate loop exit edges (functions are
provided to make these manipulations simple).
rewrite_into_loop_closed_ssa
is used to rewrite SSA form to
LCSSA, and verify_loop_closed_ssa
to check that the invariant of
LCSSA is preserved.