github.com/bananabytelabs/wazero@v0.0.0-20240105073314-54b22a776da8/internal/engine/wazevo/ssa/ssa.go (about)

     1  // Package ssa is used to construct SSA function. By nature this is free of Wasm specific thing
     2  // and ISA.
     3  //
     4  // We use the "block argument" variant of SSA: https://en.wikipedia.org/wiki/Static_single-assignment_form#Block_arguments
     5  // which is equivalent to the traditional PHI function based one, but more convenient during optimizations.
     6  // However, in this package's source code comment, we might use PHI whenever it seems necessary in order to be aligned with
     7  // existing literatures, e.g. SSA level optimization algorithms are often described using PHI nodes.
     8  //
     9  // The rationale doc for the choice of "block argument" by MLIR of LLVM is worth a read:
    10  // https://mlir.llvm.org/docs/Rationale/Rationale/#block-arguments-vs-phi-nodes
    11  //
    12  // The algorithm to resolve variable definitions used here is based on the paper
    13  // "Simple and Efficient Construction of Static Single Assignment Form": https://link.springer.com/content/pdf/10.1007/978-3-642-37051-9_6.pdf.
    14  package ssa