From 8fa7e64f2441c604d6ab60d9f5c183fb56f0afc3 Mon Sep 17 00:00:00 2001 From: tomoaki Date: Sun, 21 Dec 2025 05:54:00 +0900 Subject: [PATCH] docs(phase260): checkpoint P0/P0.1 + update quick first fail --- docs/development/current/main/10-Now.md | 22 ++++++++++++------- .../current/main/phases/phase-260/README.md | 9 +++++++- .../joinir_block_converter.rs | 5 +++-- 3 files changed, 25 insertions(+), 11 deletions(-) diff --git a/docs/development/current/main/10-Now.md b/docs/development/current/main/10-Now.md index 847ccbf4..dc9c0387 100644 --- a/docs/development/current/main/10-Now.md +++ b/docs/development/current/main/10-Now.md @@ -18,20 +18,26 @@ ## Current First FAIL (SSOT) -- **Before Phase 259 P0**: `json_lint_vm / StringUtils.is_integer/1` -- **After Phase 259 P0**: `json_lint_vm / Main.main/0 nested-loop with break` +- **After Phase 260 P0.1**: `core_direct_array_oob_set_rc_vm / Stage-B compile / JoinIR Pattern2 LoopBodyLocal(seg)` ### Next FAIL Details -- **Test**: `json_lint_vm` -- **Function**: `Main.main/0` -- **Error**: `[cf_loop/pattern2] Failed to extract break condition from loop body` -- **Pattern**: Nested loop(外側 `loop(i < cases.length())` 内で内側 `loop(j < valid.length())` + break) +- **Test**: `core_direct_array_oob_set_rc_vm` +- **Phase**: Stage‑B compile (`stageb_compile_to_json`) +- **Error**: `[cf_loop/pattern2] Cannot promote LoopBodyLocal variables ["seg"] ... [pattern2/body_local_slot/contract/not_readonly]` - **Reproduce**: ```bash - ./target/release/hakorune --backend vm apps/examples/json_lint/main.hako + bash tools/smokes/v2/profiles/quick/core/core_direct_array_oob_set_rc_vm.sh ``` -- **Note**: is_integer/1 自体は Pattern8 で解決済み。残りは nested-loop 処理の問題(Phase 260+) +- **Note**: Pattern2 の LoopBodyLocal promotion(A-3 Trim / A-4 DigitPos)に依存しており、Stage‑B の bundle_resolver 系のループで露出している。 + +## 2025-12-20:Phase 260 P0/P0.1(edge-args Strangler)🚧 + +- P0: MIR terminator の edge-args 併存導入(読む側 SSOT を `out_edges()`/`edge_args_to()` へ寄せた) +- P0.1: legacy layout の未設定を禁止(verify fail-fast)+ terminator 直代入を `set_terminator*()` へ寄せた +- Commits: + - P0: `4dfe3349b` + - P0.1: `1fe5be347` ## 2025-12-21:Phase 259 P0(Pattern8 BoolPredicateScan)✅ diff --git a/docs/development/current/main/phases/phase-260/README.md b/docs/development/current/main/phases/phase-260/README.md index f9684dae..504830ae 100644 --- a/docs/development/current/main/phases/phase-260/README.md +++ b/docs/development/current/main/phases/phase-260/README.md @@ -1,8 +1,15 @@ # Phase 260: Block-Parameterized CFG(edge-args)段階導入 -Status: Planned +Status: In progress Last updated: 2025-12-20 +## 進捗(セーブポイント) + +- P0(併存導入の芯): 完了(読む側 SSOT を `out_edges()`/`edge_args_to()` に寄せた) + - Commit: `4dfe3349b` +- P0.1(hardening): 完了(legacy layout 無し禁止 + DCE/verify の参照点整理) + - Commit: `1fe5be347` + ## 目的(P0) JoinIR→MIR の暗黙 ABI(jump_args / carriers / expr_result slot / successors)を減らし、将来的な **block-parameterized CFG**(edge-args を第一級に持つCFG)へ収束するための「大工事パート」を開始する。 diff --git a/src/mir/join_ir_vm_bridge/joinir_block_converter.rs b/src/mir/join_ir_vm_bridge/joinir_block_converter.rs index a77c8125..ce9c6e7d 100644 --- a/src/mir/join_ir_vm_bridge/joinir_block_converter.rs +++ b/src/mir/join_ir_vm_bridge/joinir_block_converter.rs @@ -427,9 +427,10 @@ impl JoinIrBlockConverter { effects: EffectMask::PURE, }); - // Phase 131 P2: Preserve tail-call args as jump_args metadata (SSOT for exit wiring) + // Phase 131 P2: Preserve tail-call args as legacy jump-args metadata (for exit wiring) // - // Merge/ExitArgsCollector uses BasicBlock.jump_args to recover carrier/env values. + // The merge pipeline recovers carrier/env values from the legacy jump-args path + // (via BasicBlock APIs) when converting Return → Jump to the exit block. // Without this, tail-call blocks look like "no args", forcing fallbacks that can // produce undefined ValueIds in DirectValue mode. if let Some(block) = mir_func.blocks.get_mut(&self.current_block_id) {