docs(phase260): checkpoint P0/P0.1 + update quick first fail
This commit is contained in:
@ -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)✅
|
||||
|
||||
|
||||
@ -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)へ収束するための「大工事パート」を開始する。
|
||||
|
||||
@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user