Phase 273 P3+ 完成: レガシーコード削除 + 未使用 import 整理 Removed Legacy Items: 1. emit_scan_with_init_edgecfg() - Pattern6 固有の emission 関数 - File deleted: src/mir/builder/emission/loop_scan_with_init.rs (~144 lines) - Replaced by: generalized Frag API (Phase 273 P2) 2. CoreCarrierInfo struct - Legacy carrier representation - Removed from: src/mir/builder/control_flow/plan/mod.rs (~15 lines) - Replaced by: CorePhiInfo (generalized PHI representation) 3. verify_carrier() function - CoreCarrierInfo validator - Removed from: src/mir/builder/control_flow/plan/verifier.rs (~15 lines) - Replaced by: generalized PHI verification (V7-V9) Code Cleanup: - cargo fix applied: unused imports removed (~30 files) - Verifier invariants updated: V1→V2-V9 (carrier→PHI model) - Module declaration cleanup in emission/mod.rs Impact: - Total lines removed: ~174 lines (net reduction) - Pattern-agnostic architecture strengthened - All legacy Pattern6 references eliminated Tests: - ✅ VM tests PASS (phase254/256/258) - ✅ LLVM tests PASS (phase256/258) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
3.8 KiB
3.8 KiB
Phase 273 P3 — “Plan Lowering SSOT Finalize” (Claude Code Instructions)
目的:
- Phase 273 P2 で導入した generalized CoreLoopPlan を SSOT として固定し、legacy fallback を撤去して収束を完成させる。
前提:
- Extractor は pure(builder 触り禁止)
- Pattern知識は Normalizer に閉じる
- Lowerer は CorePlan のみを処理(pattern-agnostic)
- terminator SSOT は
Frag → emit_frag()のみ
Scope
P3 でやる:
- Pattern6 を generalized CoreLoopPlan(
frag/block_effects/phis/final_values)へ移行 lower_loop_legacy()を撤去し、generalized 経路を SSOT 化(Fail-Fast)- CoreLoopPlan の
Option<...>を必須化して “揺れ” を構造で消す(可能なら)
P3 でやらない:
- Pattern8/その他 pattern の Plan 化(別フェーズ)
- CorePlan の vocabulary 増殖(variant追加禁止)
Tasks
Task 1: Pattern6 を generalized CoreLoopPlan へ移行
対象:
src/mir/builder/control_flow/plan/normalizer.rs
やること:
- ScanWithInit の normalize で以下を構築する:
block_effects: header/body/step の効果(ValueId は normalizer で生成・型登録)phis: header の loop-carrier PHIfrag: header/body の BranchStub + wires(step→header, found→Return(i), after→Return(-1) など現行仕様に合わせる)final_values:iの最終値(after で使うならその ValueId)
- legacy field(
header_effects/body/step_effects/carriers/cond_*など)を空/未使用にするか、最終的に削除する。
注意:
- ScanWithInit は “return” を含むので、Frag wires に Return を含める(emit_frag SSOT)。
ensure_block_existsが必要なブロック(after/found 等)は Lowerer で担保する。
Task 2: Lowerer の legacy fallback を撤去
対象:
src/mir/builder/control_flow/plan/lowerer.rs
やること:
lower_loop_legacy()を削除lower_loop()は generalized フィールドを必須として扱い、欠落時は Err(Fail-Fast)- 例:
block_effects/phis/frag/final_valuesが None なら[lowerer] missing generalized loop fieldsで Err
- 例:
狙い:
- Lowerer から
emit_scan_with_init_edgecfg()等の pattern 参照を完全に消す。
Task 3: CoreLoopPlan の “必須化”(可能な範囲で)
対象:
src/mir/builder/control_flow/plan/mod.rs
やること:
block_effects/phis/frag/final_valuesをOptionから非Optionへ変更(できるなら)- legacy fields を削除(この時点で Pattern6/7 が generalized を使っていることが前提)
Task 4: Verifier の拡張(generalized 専用の不変条件)
対象:
src/mir/builder/control_flow/plan/verifier.rs
例:
phisが空でないこと(carrierがある場合)frag.entryが header_bb に一致すること(loopのentry SSOT)block_effectsに header/body/step が含まれること(最低限)
Task 5: 回帰テスト
VM:
bash tools/smokes/v2/profiles/integration/apps/phase254_p0_index_of_vm.shbash tools/smokes/v2/profiles/integration/apps/phase256_p0_split_vm.shbash tools/smokes/v2/profiles/integration/apps/phase258_p0_index_of_string_vm.sh
LLVM(必ず harness で、mock禁止):
cargo build --release --features llvmbash tools/smokes/v2/profiles/integration/apps/phase256_p0_split_llvm_exe.shbash tools/smokes/v2/profiles/integration/apps/phase258_p0_index_of_string_llvm_exe.sh
注意:
NYASH_LLVM_USE_HARNESS=1で--features llvmが無い場合は fail-fast する(mock禁止)。
Acceptance Criteria
- Lowerer から
emit_scan_with_init_edgecfg()等の pattern 固有参照が消えている - Pattern6/7 が generalized CoreLoopPlan を使用している
- legacy fallback が撤去され、欠落時は Err(Fail-Fast)
- 上記 smokes がすべて PASS(VM/LLVM)