Files
hakorune/docs/architecture/phi-and-ssa.md
Selfhosting Dev c8063c9e41 pyvm: split op handlers into ops_core/ops_box/ops_ctrl; add ops_flow + intrinsic; delegate vm.py without behavior change
net-plugin: modularize constants (consts.rs) and sockets (sockets.rs); remove legacy commented socket code; fix unused imports
mir: move instruction unit tests to tests/mir_instruction_unit.rs (file lean-up); no semantic changes
runner/pyvm: ensure using pre-strip; misc docs updates

Build: cargo build ok; legacy cfg warnings remain as before
2025-09-21 08:53:00 +09:00

1.1 KiB
Raw Blame History

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.