## MLton 20241230+git20251029+dfsg-5

# SSA

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

- `ssa.sig`

- `ssa.fun`

- `ssa-tree.sig`

- `ssa-tree.fun`

## 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:

- http://mlton.org/pipermail/mlton/2001-August/019689.html

For some retrospectives, see the threads at:

- http://mlton.org/pipermail/mlton/2003-January/023054.html

- http://mlton.org/pipermail/mlton/2007-February/029597.html