An SSA program consists of a collection of datatype declarations, a sequence of global statements, and a collection of functions, along with a distinguished "main" function. Each function consists of a collection of basic blocks, where each basic block is a sequence of statements ending with some control transfer.
no duplicate definitions (tycons, cons, vars, labels, funcs)
no out of scope references (tycons, cons, vars, labels, funcs)
variable definitions dominate variable uses
case transfers are exhaustive and irredundant
Enter/Leave profile statements match
Details and Notes
SSA is an abbreviation for Static Single Assignment.
For some initial design discussion, see the thread at:
For some retrospectives, see the threads at: