Files
hakorune/docs/reference/architecture/phi-and-ssa.md

24 lines
1.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# PHI and SSA in Nyash
Overview
- Nyash lowers high-level control flow (If/Loop/Match) to MIR and backends that rely on SSA form.
- We prioritize IR hygiene and observability while keeping runtime cost at zero.
Design points
- PHI hygiene: no empty PHIs; PHIs at block head only.
- JoinResult hint: when both branches assign the same variable, we emit a MIR hint for diagnostics.
- Loop carriers: loops may expose a carrier observation (≤ N variables, where N is unconstrained by design; smokes emphasize common cases).
Normalization
- If: may optionally wrap into LoopForm under a conservative gate (dev only). Semantics remain unchanged.
- Match: scrutinee evaluated once, guard fused; normalized to nested Ifchain in macro/core pass.
Testing
- LLVM smokes: fixed small cases ensure no empty PHIs and head placement.
- MIR smokes: trace `scope|join|loop` to validate shaping without peeking into IR details.
Roadmap
- Remove text-level sanitization once finalizePHI is trustworthy across Loop/If/Match.
- Expand goldens to cover nested joins and multicarrier loops while keeping CI light.