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 DefinitionStatements with AssignmentStatements. The pass also simplifies complex expressions into a sequence of AssignStatements. 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§

Modules§