Expand description
The Static Single Assignment pass traverses the AST and converts it into SSA form.
See https://en.wikipedia.org/wiki/Static_single-assignment_form for more information.
The pass also replaces DefinitionStatement
s with AssignmentStatement
s.
The pass also simplifies complex expressions into a sequence of AssignStatement
s. For example, (a + b) * c
is rewritten into $var$1 = a + b; $var$2 = $var$1 * c
.
Consider the following Leo code.
function main(flag: u8, value: u8) -> u8 {
if (flag == 0u8) {
value += 1u8;
return value;
} else {
value += 2u8;
}
return value;
}
The SSA pass produces the following code.
function main(flag: u8, value: u8) -> u8 {
$var$0 = flag == 0u8;
if ($var$0) {
$var$1 = value + 1u8;
value$1 = $var$1;
return value$1;
} else {
$var$2 = value + 2u8;
value$2 = $var$2;
}
value$3 = $var$0 ? value$1 : value$2;
return value$3;
}
Note that the redundant assignments have no effect on the bytecode generated by the compiler.
Re-exportsยง
pub use static_single_assigner::*;
Modulesยง
- rename_
expression ๐ - rename_
program ๐ - rename_
statement ๐