Portable control-flow dominance, frontiers, loops and exit-path analysis.
moon build --target js --release --deny-warn
node _build/js/release/build/cmd/main/main.js analyze examples/branch-loop.json
node _build/js/release/build/cmd/main/main.js analyze examples/branch-loop.json --format dot --out graph.dot
node _build/js/release/build/cmd/main/main.js plan-ssa examples/ssa-branch.json
node _build/js/release/build/cmd/main/main.js plan-ssa examples/ssa-branch.json --out phi-plan.json{
"schema": "cairndom.graph.v1",
"nodes": ["entry", "left", "right", "join", "exit"],
"entry": "entry",
"exits": ["exit"],
"edges": [["entry","left"], ["entry","right"], ["left","join"], ["right","join"], ["join","exit"]]
}moon add Novanke/cairndom@0.2.0let result = @dom.analyze(graph)
let required = @dom.dominates(result.forward, entry_index, target_index)
let phi_candidates = @dom.iterated_frontier(result.forward, definition_indices){"schema":"cairndom.program.v1",
"graph":{"schema":"cairndom.graph.v1","nodes":["entry","exit"],"entry":"entry","exits":["exit"],"edges":[["entry","exit"]]},
"variables":["value"],
"blocks":[{"node":"entry","defines":["value"],"uses":[]},{"node":"exit","defines":[],"uses":["value"]}]}moon run examples/sdk --target wasm-gc --release --deny-warn
moon run examples/sdk --target js --release --deny-warn
moon run examples/ssa_sdk --target wasm-gc --release --deny-warn
moon run examples/ssa_sdk --target js --release --deny-warnmoon fmt --check
moon check --target wasm-gc --deny-warn
moon check --target js --deny-warn
moon test --target wasm-gc --deny-warn
moon test --target js --deny-warn
moon build --target js --release --deny-warn
python scripts/verify_cli.py
python scripts/verify_ssa_cli.pypub(all) struct SsaPlan {
program : FlowProgram
liveness : Liveness
placements : Array[PhiPlacement]
}fn iterated_frontier(tree : Dominance, definitions : Array[Int], live_in? : Array[Int]?) -> Array[Int] raise GraphErrorInstall
Download zipPortable control-flow dominance, frontiers, loops and exit-path analysis.