feat(llvm): Phase 131-13/14 - MIR JSON順序修正 & 2パスsnapshot解決

## Phase 131-13: MIR JSON 命令順序修正
- copy 遅延ロジック削除(~80行)
- MIR の def→use 順序をそのまま出力(SSOT)
- PHI 先頭集約のみ維持

## Phase 131-14: jump-only block 2パス snapshot 解決
- Pass A: jump-only block はメタ記録のみ
- Pass B: resolve_jump_only_snapshots() で CFG ベース解決
- path compression で連鎖を効率的に解決
- サイクル検出で Fail-Fast

## 結果
-  STRICT モードでエラーなし
-  bb7 が bb5 の snapshot を正しく継承
-  ループが正しく動作(1, 2 出力確認)
- ⚠️ print/concat で segfault(別問題、次Phase)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
nyash-codex
2025-12-15 00:39:43 +09:00
parent eb70dfc5bb
commit 7f57a1bb05
7 changed files with 559 additions and 113 deletions

View File

@ -279,6 +279,10 @@ def lower_function(builder, func_data: Dict[str, Any]):
from builders.block_lower import lower_blocks as _lower_blocks
_lower_blocks(builder, func, block_by_id, order, loop_plan)
# Phase 131-14-B Pass B: Resolve jump-only block snapshots (BEFORE PHI finalization)
from builders.block_lower import resolve_jump_only_snapshots as _resolve_jump_only_snapshots
_resolve_jump_only_snapshots(builder, block_by_id)
# Optional: capture lowering ctx for downstream helpers
try:
builder.ctx = dict(
@ -300,7 +304,7 @@ def lower_function(builder, func_data: Dict[str, Any]):
except Exception:
pass
# Phase 131-4 Pass B: Finalize PHIs (wires incoming edges)
# Phase 131-4 Pass B (now Pass B2): Finalize PHIs (wires incoming edges)
_finalize_phis(builder)
# Phase 131-4 Pass C: Lower deferred terminators (after PHIs are placed)