SSA is an IntermediateLanguage, translated from SXML by ClosureConvert, optimized by SSASimplify, and translated by ToSSA2 to SSA2.
Description
SSA is a FirstOrder, SimplyTyped IntermediateLanguage. It is the main IntermediateLanguage used for optimizations.
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.
Implementation
Type Checking
Type checking (type-check.sig
,
type-check.fun
) of a SSA program
verifies the following:
-
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 -
"traditional" well-typedness
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: