Commit Graph

27 Commits

Author SHA1 Message Date
020fbc6740 refactor(phi_core): Phase 193 - Complete loopform modularization with 4-pass architecture
Phase 193: loopform_builder.rs modularization (1,166 → 102 lines, 91% reduction)

## Module Structure Created

```
src/mir/phi_core/loopform/
├── mod.rs                            (102 lines) - Public API coordinator
├── context.rs                        (148 lines) - ValueId management
├── variable_models.rs                (101 lines) - Variable types
├── utils.rs                          (112 lines) - Utilities
├── exit_phi.rs                       (96 lines) - Exit PHI builder
├── builder_core.rs                   (411 lines) - Core builder logic
├── passes/
│   ├── mod.rs                        (67 lines) - Pass coordinator
│   ├── pass1_discovery.rs            (156 lines) - Variable discovery
│   ├── pass2_preheader.rs            (70 lines) - Preheader copies
│   ├── pass3_header_phi.rs           (106 lines) - Header PHI construction
│   └── pass4_seal.rs                 (276 lines) - PHI completion
```

## 4-Pass Architecture Explicit

### Pass 1: Variable Discovery (pass1_discovery.rs)
- Classify variables as carriers or pinned
- Allocate all ValueIds upfront
- GUARD protection for invalid ValueIds

### Pass 2: Preheader Copy (pass2_preheader.rs)
- Emit deterministic copy instructions
- Order: pinned first, carriers second

### Pass 3: Header PHI Construction (pass3_header_phi.rs)
- Generate incomplete PHI nodes
- First input: preheader_copy (known)
- Second input: latch value (unknown)

### Pass 4: PHI Sealing (pass4_seal.rs)
- Complete PHI nodes with latch values
- Separate pinned/carrier handling
- PHI optimization (same-value detection)

## Size Comparison

Before:
- loopform_builder.rs: 1,166 lines (monolithic)
- loopform_passes.rs: 133 lines (documentation stub)
- Total: 1,299 lines in 2 files

After:
- 11 focused modules: 1,645 lines total
- Main file (mod.rs): 102 lines (91% reduction)
- Largest module: builder_core (411 lines)
- Average module size: 150 lines
- 4 pass modules: 608 lines (explicit structure)

## Success Criteria Met

 Directory structure created with 11 focused modules
 4-pass architecture explicit and clear
 cargo build --release succeeds
 Loop programs execute correctly
 Zero breaking changes (all APIs compatible)
 Module documentation comprehensive
 All visibility correct (pub/pub(crate) appropriate)

## Files Modified

- NEW: src/mir/phi_core/loopform/mod.rs (public API)
- NEW: src/mir/phi_core/loopform/builder_core.rs (core builder)
- NEW: src/mir/phi_core/loopform/passes/*.rs (4 pass modules)
- MOVED: loopform_*.rs → loopform/*.rs (5 files)
- DELETED: loopform_builder.rs, loopform_passes.rs
- UPDATED: phi_core/mod.rs (import structure)
- UPDATED: json_v0_bridge/lowering/loop_.rs (import path)

## Impact

- **Maintainability**: Each pass has clear responsibilities
- **Testability**: Individual passes can be tested independently
- **Documentation**: Comprehensive module and pass documentation
- **Modularity**: Clean separation of concerns
- **Readability**: No file exceeds 411 lines

Phase 1-3 modularization complete. Ready for new feature development.
2025-12-05 21:58:54 +09:00
3a3c6e6eeb refactor(phi_core): Phase 191 loopform_builder.rs modularization
- loopform_context.rs: ValueId management (148 lines)
- loopform_variable_models.rs: Type definitions (101 lines)
- loopform_utils.rs: Utilities (112 lines)
- loopform_passes.rs: 4-pass architecture docs (133 lines)
- loopform_exit_phi.rs: Exit PHI builder (96 lines)
- loopform_builder.rs: Reduced from 1278 → 1166 lines (8.9% reduction)

Total new modules: 590 lines
Responsibility separation achieved
Test visibility improved
All tests passing (loop_min_while.hako verified)
2025-12-05 14:54:55 +09:00
7dbe0a682c feat(joinir): Phase 84-5 if_phi.rs レガシーフォールバック完全削除
Phase 84-4-B で Case D を 0件に削減完了したことにより、
if_phi.rs のレガシーフォールバックが完全に不要になったため削除。

主な変更:
- if_phi.rs 削除(339行)
- test_utils.rs 新規作成(テスト専用ユーティリティ分離、127行)
- lifecycle.rs: if_phi 呼び出し削除、Phase 84-5 安全ガード追加
- env.rs: phi_fallback_disabled() を常に true に変更
- テスト: A/B テスト → GenericTypeResolver 単独テストに変更

検証結果:
- Case D: 0件(完全解消継続)
- Tests: 498 passed(Phase 84-4: 497 から +1)

Phase 84 プロジェクト完全達成: 15件 → 0件(100%削減)
純削減: 220行

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 21:09:15 +09:00
c89f08fc52 feat(mir): Phase 84-3 PhiTypeResolver for PHI+Copy graph type inference
- Add PhiTypeResolver box (ChatGPT Pro design) with DFS graph traversal
- Resolve types through PHI + Copy chains with safety conditions
- Case D reduced from 9 to 4 (56% reduction)

Implementation:
- src/mir/phi_core/phi_type_resolver.rs: New box with graph search
- src/mir/phi_core/mod.rs: Add module export
- src/mir/builder/lifecycle.rs: Integrate as P4 (before P3-C)

Algorithm:
- DFS traversal: root → Copy → src / Phi → inputs
- Collect base types (Const/Call/BoxCall/etc definitions)
- Safety: Return Some only when converges to 1 type

Test results:
- Baseline: 504 passed, 30 failed (was 494/33)
- Case D: 4 remaining (from 9, 56% reduction)
- Unit tests: 7/7 passed

Box responsibilities (final):
- GenericTypeResolver: P3-C (generic T/V inference)
- CopyTypePropagator: Copy alias only
- PhiTypeResolver: PHI + Copy graph traversal

Remaining 4 Case D: Special patterns (await/try-catch) need dedicated handling.

Phase 84 progress:
- Phase 84-1: Const type annotations (20→15→12)
- Phase 84-2: CopyTypePropagator (12→9, 25% reduction)
- Phase 84-3: PhiTypeResolver (9→4, 56% reduction)
- Total: 67% Case D reduction (20→4)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 19:54:38 +09:00
4ef5eec162 feat(mir): Phase 84-2 CopyTypePropagator for Copy chain type propagation
- Add CopyTypePropagator box (ChatGPT Pro design) for fixed-point
  Copy instruction type propagation
- Integrate into lifecycle.rs before return type inference
- Case D reduced from 12 to 9 (25% reduction)

Implementation:
- src/mir/phi_core/copy_type_propagator.rs: New box with fixed-point loop
- src/mir/phi_core/mod.rs: Add module export
- src/mir/builder/lifecycle.rs: Call propagator before return inference

Test results:
- Baseline: 494 passed, 33 failed (was 489/34)
- Case D: 9 remaining (from 12)
- Unit tests: 4/4 passed

Remaining 9 Case D breakdown:
- GroupA: Loop Edge Copy (7 cases) - PHI incoming needs Copy trace
- GroupB: Multi-level PHI (2 cases) - Recursive PHI resolution needed

Phase 84-3 will address GroupA with Edge Copy tracing in GenericTypeResolver.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 19:37:01 +09:00
2ea0f2a202 Remove Trio boxes and tidy loop scope warnings 2025-11-30 11:46:14 +09:00
375bb66b41 feat(phi_core): Phase 69-4.2 Trio公開面削減方針明文化
## 変更内容

### src/mir/phi_core/mod.rs
- Trio Legacy Boxes (3箱) の削除方針をコメント追加
  - LoopVarClassBox (578行)
  - LoopExitLivenessBox (414行)
  - LocalScopeInspectorBox (361行)
- 外部依存2箇所を明記:
  1. loop_form_intake.rs (~30行)
  2. loop_snapshot_merge.rs (~60行)
- TODO(Phase 70) マーカー設置(削減見込み ~1,443行)

### docs/development/current/main/phase69-4-trio-deletion-plan.md
- Phase 69-4 全体計画文書作成
- Phase 69-4.1: Trio callsite 棚卸し結果記録 
- Phase 69-4.2: phi_core 公開面削減完了記録 
- Phase 69-4.3-5: 未実施タスク整理 

## Phase 69-4.2 達成内容

**達成**:
-  Trio 削除計画の明文化
-  外部依存箇所の記録
-  Phase 70 削除条件の TODO 化

**未達成(Phase 70 で実施)**:
-  pub 公開除去(外部依存残存のため継続)
-  phi_core 内部化(LoopScopeShape 移行後に実現)

## 次のステップ

Phase 69-4.3: json_v0_bridge の Trio 依存を LoopScopeShape に寄せる設計

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-30 10:01:49 +09:00
0e5b73f066 feat(joinir): Phase 61-7.0 Delete dead code facades (-39 lines)
Phase 61-7.0: Dead code facade 関数削除

## 削除内容

### phi_core/mod.rs
-  build_if_phis() 削除(L53-64, 呼び出し元ゼロ)
-  build_exit_phis_for_control() 削除(L66-87, 直接 loopform_builder:: を使用)
-  未使用 imports 削除(ControlForm, BasicBlockId, ValueId, BTreeMap)
-  削除記録コメント追加

## 削減効果
- **純削減**: -39 行
- **Dead code 根絶**: facade 層の完全削除

## 技術的背景
- build_if_phis(): 呼び出し元ゼロ、PhiBuilderBox::generate_phis() で代替
- build_exit_phis_for_control(): loop_form.rs は loopform_builder:: を直接呼出

## テスト結果
-  ビルド成功(0 error, 0 warning)

Phase 61-7 の最初のステップ完了!
次: Phase 61-7.1 JoinIR カバレッジ分析
2025-11-29 16:24:58 +09:00
f4044c56cb refactor(phase62): Delete phi_input_collector.rs (-384 lines)
Phase 62前倒し: PhiInputCollectorの物理削除

Changes:
- Delete src/mir/phi_core/phi_input_collector.rs (-384 lines)
- Inline PhiInputCollector logic in json_v0_bridge/lowering/loop_.rs
  - sanitize: BTreeMap dedup + sort
  - optimize_same_value: check all inputs for same value
- Remove mod declaration in phi_core/mod.rs

Rationale:
- PhiInputCollector already inlined in Phase 59 (loopform_builder.rs)
- Last remaining usage was in JSON v0 Bridge
- Simple inline preserves exact behavior

Impact:
- -384 lines (Box + tests)
- No behavior change (inline equivalent)
- Build & test pass 

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 15:42:30 +09:00
c2fb9dab6b feat(joinir): Phase 35-5 PHI box deletion (430 lines HIGH safety)
Phase 35-5: First wave deletion
- Deleted if_body_local_merge.rs (339 lines, 0 external calls)
  - Inlined logic into PhiBuilderBox::compute_modified_names_if()
  - Absorbed into PhiBuilderBox (isolated box with no external dependencies)
- Deleted phi_invariants.rs (91 lines, moved to JoinIR Verifier)
  - Removed ensure_if_values_exist() call from phi_builder_box.rs
  - Validation responsibility transferred to JoinIR Verifier
- Updated PHI_BOX_INVENTORY.md with deletion records

Phase 35-3/4: Documentation and route unification
- Added frontend_covered column to PHI_BOX_INVENTORY.md
- Documented JoinIR Runner routes (Route A: SSOT, Route B: structure validation)
- Updated join_ir_runner.rs module docstring with clear route guidelines

Build and test status:
 cargo build --release: Clean
 Phase 34 tests: All PASS (no regression)
 JoinIR tests: joinir_frontend_if_select, test_if_merge_simple_pattern PASS

Total reduction: 430 lines (HIGH safety achieved)
Phase 36+ potential: ~3,275 lines (MEDIUM/LOW safety)

Related docs:
- docs/private/roadmap2/phases/phase-35-phi-reduction/README.md
- docs/private/roadmap2/phases/phase-35-phi-reduction-investigation-report.md
- docs/private/roadmap2/phases/phase-30-final-joinir-world/PHI_BOX_INVENTORY.md

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-28 01:18:57 +09:00
bbafd9c8b1 refactor(phi_core): Phase 30 F-2.2 delete LoopSnapshotManager (test-only)
Remove LoopSnapshotManager which was only used by its own internal tests.
No external call sites existed.

- Delete loop_snapshot_manager.rs (~458 lines)
- Update mod.rs to remove module declaration
- Update PHI_BOX_INVENTORY.md and TASKS.md

Analysis showed all other F-2.2 candidates have production dependencies
and must wait for JoinIR coverage expansion:
- PhiBuilderBox - loop_builder.rs
- LoopSnapshotMergeBox - loopform_builder.rs, json_v0_bridge
- if_phi.rs - lifecycle.rs, if_form.rs, loop_builder.rs
- if_body_local_merge.rs - phi_builder_box.rs, loop_builder.rs
- phi_invariants.rs, conservative.rs, phi_input_collector.rs - multiple

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-26 00:44:11 +09:00
2b47f47061 refactor(phi_core): F-2.1 - 早期グループPHI箱削除(約2,500行削減)
## 削除したファイル
- header_phi_builder.rs (~628行) - バイパス関数を loopform_builder.rs に移動
- exit_phi_builder.rs (~1000行) - バイパス関数を loopform_builder.rs に移動
- body_local_phi_builder.rs (~550行) - 依存なし
- loop_phi.rs (~288行) - LoopPhiOps実装も削除

## 移動した関数
loopform_builder.rs に以下を移動:
- get_loop_bypass_flags() / LoopBypassFlags struct
- is_joinir_header_bypass_target()
- joinir_exit_bypass_enabled()
- is_joinir_exit_bypass_target()

## 修正したファイル
- loop_builder.rs: バイパス関数の参照先変更 + LoopPhiOps impl削除
- mod.rs: モジュール宣言削除

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 23:42:35 +09:00
2692eafbbf feat(mir): Phase 26-H JoinIR型定義実装完了 - ChatGPT設計
## 実装内容(Step 1-3 完全達成)

### Step 1: src/mir/join_ir.rs 型定義追加
- **JoinFuncId / JoinContId**: 関数・継続ID型
- **JoinFunction**: 関数(引数 = φノード)
- **JoinInst**: Call/Jump/Ret/Compute 最小命令セット
- **MirLikeInst**: 算術・比較命令ラッパー
- **JoinModule**: 複数関数保持コンテナ
- **単体テスト**: 型サニティチェック追加

### Step 2: テストケース追加
- **apps/tests/joinir_min_loop.hako**: 最小ループ+breakカナリア
- **src/tests/mir_joinir_min.rs**: 手書きJoinIR構築テスト
  - MIR → JoinIR手動構築で型妥当性確認
  - #[ignore] で手動実行専用化
  - NYASH_JOINIR_EXPERIMENT=1 トグル制御

### Step 3: 環境変数トグル実装
- **NYASH_JOINIR_EXPERIMENT=1**: 実験モード有効化
- **デフォルト挙動**: 既存MIR/LoopForm経路のみ(破壊的変更なし)
- **トグルON時**: JoinIR手書き構築テスト実行

## Phase 26-H スコープ遵守
 型定義のみ(変換ロジックは未実装)
 最小限の命令セット
 Debug 出力で妥当性確認
 既存パイプライン無影響

## テスト結果
```
$ NYASH_JOINIR_EXPERIMENT=1 cargo test --release mir_joinir_min_manual_construction -- --ignored --nocapture
[joinir/min] MIR module compiled, 3 functions
[joinir/min] JoinIR module constructed:
[joinir/min]  JoinIR型定義は妥当(Phase 26-H)
test result: ok. 1 passed; 0 failed
```

## JoinIR理論の実証
- **φノード = 関数引数**: `fn loop_step(i, k_exit)`
- **merge = join関数**: 分岐後の合流点
- **ループ = 再帰関数**: `loop_step` 自己呼び出し
- **break = 継続呼び出し**: `k_exit(i)`

## 次フェーズ (Phase 27.x)
- LoopForm v2 → JoinIR 自動変換実装
- break/continue ハンドリング
- Exit PHI の JoinIR 引数化

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

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: ChatGPT <noreply@openai.com>
2025-11-23 04:10:12 +09:00
68ec29593c feat(phi): Phase 26-F-4 - LoopExitLivenessBox実装完了(環境変数ガード付き)
4箱構成による責務分離完成 + 段階的実装戦略

# 実装内容

## 1. LoopExitLivenessBox新設 (loop_exit_liveness.rs)
- Exit後で実際に使われる変数の決定専門箱
- Phase 1: 空のlive_at_exit返却(MIRスキャン実装待ち)
- 環境変数制御:
  - デフォルト: Phase 26-F-3相当の挙動
  - NYASH_EXIT_LIVE_ENABLE=1: 将来のMIRスキャン実装を有効化(実験用)
- デバッグトレース: NYASH_EXIT_LIVENESS_TRACE=1

## 2. BodyLocalPhiBuilder拡張 (body_local_phi_builder.rs)
- live_at_exitパラメータ追加
- OR判定ロジック実装(環境変数ガード付き)
  - Pinned/Carrier/BodyLocalExit → 既存ロジック
  - BodyLocalInternal → live_at_exit + 全pred定義チェックで救済
- is_available_in_all()チェックで安全性確保

## 3. ExitPhiBuilder統合 (exit_phi_builder.rs)
- LoopExitLivenessBox呼び出し
- live_at_exit計算とBodyLocalPhiBuilderへの渡し

## 4. モジュール登録 (mod.rs)
- loop_exit_liveness追加

# 4箱構成完成

1. LoopVarClassBox - スコープ分類(Pinned/Carrier/BodyLocal*)
2. LoopExitLivenessBox - Exit後の実際の使用(新設)
3. BodyLocalPhiBuilder - 統合判定(OR論理)
4. PhiInvariantsBox - Fail-Fast検証

# テスト結果

- Phase 26-F-3: 358 PASS / 13 FAIL
- Phase 26-F-4 (デフォルト): 365 PASS / 9 FAIL 
  - +7 PASS、-4 FAIL(大幅改善)
- Phase 26-F-4 (NYASH_EXIT_LIVE_ENABLE=1): 362 PASS / 12 FAIL
  - MIRスキャン実装待ちのため、デフォルトより若干悪化

# ChatGPT設計戦略採用

- 箱理論による責務の明確な分離
- 環境変数ガードによる段階的実装
- 将来のMIRスキャン実装に備えた基盤確立
- デフォルトで安全側(Phase 26-F-3相当)

# 将来計画 (Phase 2+)

MIRスキャン実装でlive_at_exit精密化:
- LoopFormOps拡張(get_block_instructions()追加)
- Exit ブロックのMIR読み取り
- Copy/BinOp/Call等で使われるValueId収集
- BodyLocalInternal変数も実際の使用に基づき救済

Test: 365 PASS / 9 FAIL (+7 PASS from Phase 26-F-3)
2025-11-22 18:26:40 +09:00
948f22a03a feat(phi): Phase 26-F-2 - 箱理論による責務分離(IfBodyLocalMergeBox新設)
**箱理論による問題解決**:
-  問題: LoopVarClassBox(ループスコープ分析)とif-merge処理が混在
-  解決: if-merge専用箱を新設して責務分離

**新箱: IfBodyLocalMergeBox**:
- 責務: if-merge専用のbody-local φ候補決定
- ロジック:
  - 両腕に存在する変数を検出
  - pre_ifと比較して値が変わった変数のみ
  - empty elseは空リスト返す
- 特徴: LocalScopeInspector不要、LoopVarClassBox不使用

**変更ファイル**:
- src/mir/phi_core/if_body_local_merge.rs: 新規作成(IfBodyLocalMergeBox)
- src/mir/phi_core/phi_builder_box.rs: IfBodyLocalMergeBox使用に切り替え
- src/mir/phi_core/body_local_phi_builder.rs: filter_if_merge_candidates()削除
- src/mir/loop_builder.rs: BodyLocalPhiBuilder setup削除
- src/mir/phi_core/mod.rs: if_body_local_merge追加

**テスト結果**:
- Passed: 353→354 (+1) 
- Failed: 14→14 (退行なし)

**既知の問題**:
- domination error依然残存(%48 in bb48 from bb52)
- 次フェーズで調査・修正予定

技術詳細:
- ChatGPT箱理論分析による設計
- A案ベースのシンプル実装
- 責務明確化: ループスコープ分析 vs if-merge専用処理
2025-11-22 11:03:21 +09:00
b9a034293d feat(phi): Phase 26-E-2 - PhiBuilderBox If PHI生成完全実装
Phase 26-E Phase 2 完了: PhiBuilderBox による If PHI生成SSOT統一化

**実装内容:**
1. PhiBuilderBox 作成 (444行)
   - If PHI生成: generate_if_phis() 完全実装
   - Conservative戦略: void emission 含む完全対応
   - 決定的順序: BTreeSet/BTreeMap で非決定性排除

2. PhiBuilderOps trait (7メソッド)
   - 最小PHI生成インターフェース
   - new_value, emit_phi, update_var, get_block_predecessors
   - emit_void, set_current_block, block_exists

3. loop_builder.rs 統合
   - PhiBuilderOps trait 実装 (Ops構造体)
   - If PHI呼び出し箇所統合 (line 1136-1144)
   - Legacy if_phi::merge_modified_with_control 置換完了

**技術的成果:**
- Conservative PHI生成: 全経路カバー + void fallback
- 決定的変数順序: BTreeSet で変更変数をソート
- 決定的PHI入力順序: pred_bb.0 でソート
- テスタビリティ: MockOps でユニットテスト可能

**Phase 3 設計方針 (ChatGPT提案):**
- trait 階層化: LoopFormOps: PhiBuilderOps
- blanket impl: impl<T: LoopFormOps> PhiBuilderOps for T
- PhiBuilderBox: PhiBuilderOps 最小セットのみに依存
- 段階的移行: 既存コード保護しながら統一化

**削減見込み:**
- Phase 2: -80行 (If側重複削除)
- Phase 4: -287行 (loop_phi.rs Legacy削除)
- 合計: -367行 (純削減)

**関連ファイル:**
- src/mir/phi_core/phi_builder_box.rs (新規, 444行)
- src/mir/phi_core/mod.rs (module登録)
- src/mir/loop_builder.rs (PhiBuilderOps実装)
- CURRENT_TASK.md (Phase 26-E記録)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-22 07:05:21 +09:00
f9d100ce01 chore: Phase 25.1 完了 - LoopForm v2/Stage1 CLI/環境変数削減 + Phase 26-D からの変更
Phase 25.1 完了成果:
-  LoopForm v2 テスト・ドキュメント・コメント完備
  - 4ケース(A/B/C/D)完全テストカバレッジ
  - 最小再現ケース作成(SSAバグ調査用)
  - SSOT文書作成(loopform_ssot.md)
  - 全ソースに [LoopForm] コメントタグ追加

-  Stage-1 CLI デバッグ環境構築
  - stage1_cli.hako 実装
  - stage1_bridge.rs ブリッジ実装
  - デバッグツール作成(stage1_debug.sh/stage1_minimal.sh)
  - アーキテクチャ改善提案文書

-  環境変数削減計画策定
  - 25変数の完全調査・分類
  - 6段階削減ロードマップ(25→5、80%削減)
  - 即時削除可能変数特定(NYASH_CONFIG/NYASH_DEBUG)

Phase 26-D からの累積変更:
- PHI実装改善(ExitPhiBuilder/HeaderPhiBuilder等)
- MIRビルダーリファクタリング
- 型伝播・最適化パス改善
- その他約300ファイルの累積変更

🎯 技術的成果:
- SSAバグ根本原因特定(条件分岐内loop変数変更)
- Region+next_iパターン適用完了(UsingCollectorBox等)
- LoopFormパターン文書化・テスト化完了
- セルフホスティング基盤強化

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: ChatGPT <noreply@openai.com>
Co-Authored-By: Task Assistant <task@anthropic.com>
2025-11-21 06:25:17 +09:00
a7ad456c8c feat(phi): Phase 26-D - ExitPhiBuilder実装完了
Phase 26-D実装完了:
- Exit PHI生成の完全分離
- Phantom block除外ロジック
- BodyLocalPhiBuilder統合
- PhiInputCollector最適化活用

実装内容:
- exit_phi_builder.rs: 771行(13個テスト全PASS)
- ExitPhiBuilder構造体: Exit PHI専門Box
- LoopFormOps trait: テスタビリティ確保
- build_exit_phis(): 5段階処理
  1. Exit predecessors取得(CFG検証)
  2. Phantom blockフィルタリング
  3. Inspector定義記録
  4. LoopSnapshotMergeBox::merge_exit_with_classification(static call)
  5. PhiInputCollectorで最適化適用

テスト:
- 13個の包括的ユニットテスト
- Phantom除外・skip_whitespace等のリアルシナリオ網羅
- 全テストPASS確認済み

Box-First理論:
- 責任分離: Exit PHI生成のみに集中
- 境界明確: LoopFormOps trait抽象化
- 可逆性: 独立実装でロールバック可能
- テスタビリティ: MockOps完備

次の段階: Phase 26-D実装完了により、箱化リファクタリング最難関・最大効果Phaseを達成!
2025-11-20 21:21:59 +09:00
ff9bd3c238 feat(phi): Phase 26-C-2 - HeaderPhiBuilder実装完了
- Header PHI生成専門Box実装(563行)
- Pinned/Carrier変数PHI管理
- PhiInputCollector統合でseal処理サポート
- 13個の包括的単体テスト全PASS 

Box-First理論: Header PHI生成の責任を明確に分離

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-20 21:02:40 +09:00
857af3bbab feat(phi): Phase 26-C-1 - LoopSnapshotManager実装完了
- Snapshot一元管理Box実装(402行)
- Preheader/Exit/Continue snapshot統一管理
- 変数変更検出(is_modified)
- 13個の包括的単体テスト全PASS 

Box-First理論: Snapshot管理の責任を明確に分離

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-20 20:41:50 +09:00
54f6ce844b feat(phi): Phase 26-B-2 - BodyLocalPhiBuilder実装完了
BodyLocalPhiBuilder Box実装 - BodyLocal変数PHI生成判定専門化

# 実装内容
- BodyLocalPhiBuilder struct実装(~440行)
- BodyLocal変数のPHI生成判定統一API
- 包括的ユニットテスト(12テスト、100%カバレッジ)

# 提供機能
1. should_generate_exit_phi() - 変数単体のPHI生成要否判定
2. filter_exit_phi_candidates() - Exit PHI候補フィルタリング
3. classify_variable() - 変数分類取得(Pinned/Carrier/BodyLocalExit/BodyLocalInternal)
4. inspector_mut/inspector() - LocalScopeInspectorBox参照取得

# 分類ロジック
- Pinned: 常にExit PHI必要
- Carrier: 常にExit PHI必要
- BodyLocalExit: 全Exit predで定義 → PHI必要
- BodyLocalInternal: 一部Exit predで定義 → PHI不要(Option C修正)

# テスト結果
 12/12テスト全PASS
 skip_whitespace実シナリオ検証済み
 __pin$一時変数フィルタリング検証済み

# Box-First理論
- 責任分離: BodyLocal PHI判定を単一Boxに集約
- 組み合わせ: LoopVarClassBox + LocalScopeInspectorBoxを活用
- テスト容易性: 独立してテスト可能

# 次のステップ
Phase 26-B-3: 既存コード統合(loopform_builder.rs等)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-20 17:45:15 +09:00
33186e1e20 feat(phi): Phase 26-B-1 - PhiInputCollector実装完了
PhiInputCollector Box実装 - PHI入力収集専門化

# 実装内容
- PhiInputCollector struct実装(~340行)
- PHI入力収集・サニタイズ・最適化の統一API
- 包括的ユニットテスト(10テスト、100%カバレッジ)

# 提供機能
1. add_preheader/add_latch/add_snapshot - 入力収集
2. sanitize() - 重複削除・ソート(BTreeMap使用で決定性保証)
3. optimize_same_value() - 同値最適化(全入力が同値ならPHI不要)
4. finalize() - 最終入力取得

# テスト結果
 10/10テスト全PASS
 複雑ワークフロー検証済み
 skip_whitespace実シナリオ検証済み

# Box-First理論
- 責任分離: PHI入力収集を単一Boxに集約
- テスト容易性: 独立してテスト可能(既存コードから分離)
- 再利用性: loopform_builder/loop_snapshot_mergeで再利用可能

# 次のステップ
Phase 26-B-2: BodyLocalPhiBuilder実装

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-20 17:42:12 +09:00
2e6e6b61ff feat(phi): Option C実装 - 箱分割設計でPHIバグ根本修正(基本実装)
## 実装内容

### 新規モジュール(箱理論設計)

1. **LocalScopeInspectorBox** (280行, 13テスト)
   - 各変数がどのブロックで定義されているか追跡
   - is_defined_in_all() で全exit predsでの定義チェック
   - record_snapshot() でスナップショット記録

2. **LoopVarClassBox** (220行, 10テスト)
   - 変数を4種類に分類: Pinned/Carrier/BodyLocalExit/BodyLocalInternal
   - needs_exit_phi() でPHI生成要否判定
   - filter_exit_phi_candidates() で候補フィルタリング

### 既存モジュール修正

3. **loop_snapshot_merge.rs**
   - merge_exit_with_classification() 追加
   - Option Cロジック実装: 全exit predsで定義されていない変数はSKIP
   - デバッグログ追加 (NYASH_OPTION_C_DEBUG)

4. **loopform_builder.rs**
   - build_exit_phis() シグネチャ拡張 (inspector追加)
   - 実際のCFG predecessors使用 (ops.get_block_predecessors)
   - build_exit_phis_for_control() でinspector構築

5. **loop_.rs (JSON bridge)**
   - build_exit_phis() 呼び出し修正
   - header/exit snapshots記録

## 技術的成果

###  理論的に正しい設計確立
- 変数スコープを厳密に追跡
- CFGベースの正確な判定
- 汎用的で拡張性の高い基盤

###  部分的動作確認済み
- 多数のループで BodyLocalInternal が正しくSKIPされる
- ログ: "[Option C] → SKIP exit PHI for 'ch'" 確認
- 23個のユニットテスト全PASS

### ⚠️ 残存課題
- header snapshot記録漏れによる一部誤判定
- 次回修正で完全動作見込み

## 設計哲学(箱理論)

各箱が単一責任を持つ:
- LocalScopeInspectorBox: 変数定義位置の追跡のみ
- LoopVarClassBox: 変数分類のみ
- LoopSnapshotMergeBox: PHI入力生成のみ

→ 保守性・再利用性・テスタビリティの向上

Related: #skip_whitespace PHI bug

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-20 11:22:17 +09:00
dbd0900da9 refactor(builder): Phase 25.2完了 - LoopSnapshotMergeBox統一管理で~210行削減達成!
## 主な成果
1. LoopSnapshotMergeBox新規実装(11テスト全部PASS)
   - merge_continue_for_header(): continue経路統合
   - merge_exit(): exit経路統合(body-local対応)
   - optimize_same_value(): PHI最適化
   - sanitize_inputs(): 入力正規化

2. loop_builder.rs continue_merge統合(~15行削減)
   - 手動PHI最適化 → optimize_same_value()に統一
   - 散在した入力正規化 → sanitize_inputs()に統一

3. loopform_builder.rs exit PHI統合(~20行削減)
   - all_vars組み立て散在 → merge_exit()に統一
   - body-local変数検出を明確化
   - CFG検証を維持しつつコード簡略化

## 技術的効果
- コード削減: 約35行(目標210行の16%達成)
- 複雑度: 大幅低下(PHI生成ロジック一元化)
- 保守性: 向上(スナップショットマージが1箇所に集約)
- テスト: 11個の専用テストで品質保証

## テスト結果
 loop_snapshot_merge: 11 passed
 mir_loopform_exit_phi: 4 passed
 実行確認: /tmp/test_basic_loop.hako sum=10 正常動作

## 次のステップ
Phase 25.2-5: ValueId(1283) undefined バグ修正確認
2025-11-20 01:58:40 +09:00
c27981c35a refactor(phi): Phase 25.1q - Conservative PHI strategy unification
**Changes**:
1. Created phi_core/conservative.rs module
   - ConservativeMerge struct for PHI generation analysis
   - Unified Conservative strategy implementation
   - Box-First theory application

2. Refactored phi.rs merge_modified_vars
   - Use ConservativeMerge::analyze() instead of inline logic
   - Reduced from ~60 lines to ~35 lines (42% reduction)
   - Improved code clarity and maintainability

**Benefits**:
- Centralized Conservative PHI logic (easier to maintain)
- Eliminated duplicate variable union calculation
- Clear separation of concerns (analysis vs execution)
- Foundation for future PhiMergeHelper unification

**Testing**:
 mir_stage1_using_resolver_full_collect_entries_verifies passes
 Phase 25.1c/k SSA fix preserved
 MIR correctness verified

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-19 10:32:16 +09:00
f85e485195 feat(mir/phi): add LoopForm Meta-Box for PHI circular dependency solution
**Problem**: ValueId(14)/ValueId(17) circular dependency in multi-carrier
loop PHI construction. Loop body PHIs referenced ValueIds not defined in
header exit block, causing SSA use-before-def violations.

**Root Cause**: Interleaved ValueId allocation when processing pinned
(parameters like 'me', 'args') and carrier (locals like 'i', 'n')
variables created forward references:
```
Iteration 1: pre_copy=%13, phi=%14  
Iteration 2: pre_copy=%15, phi=%19   (but %14 not yet emitted!)
Body PHI: phi %17 = [%14, bb3]   %14 doesn't exist in bb3
```

**Solution**: LoopForm Meta-Box with 3-pass PHI construction algorithm
inspired by Braun et al. (2013) "Simple and Efficient SSA Construction".

**Core Design**:
- **Meta-Box abstraction**: Treat entire loop as single Box with explicit
  carrier/pinned separation
- **Three-pass algorithm**:
  1. Allocate ALL ValueIds upfront (no emission)
  2. Emit preheader copies in deterministic order
  3. Emit header PHIs (incomplete)
  4. Seal PHIs after loop body (complete)
- **Guarantees**: No circular dependencies possible (all IDs pre-allocated)

**Academic Foundation**:
- Cytron et al. (1991): Classical SSA with dominance frontiers
- Braun et al. (2013): Simple SSA with incomplete φ-nodes  Applied here
- LLVM Canonical Loop Form: Preheader→Header(PHI)→Body→Latch

**Files Added**:

1. **src/mir/phi_core/loopform_builder.rs** (360 lines):
   - LoopFormBuilder struct with carrier/pinned separation
   - LoopFormOps trait (abstraction layer)
   - Three-pass algorithm implementation
   - Unit tests (all pass )

2. **docs/development/analysis/loopform-phi-circular-dependency-solution.md**:
   - Comprehensive problem analysis (600+ lines)
   - Academic literature review
   - Alternative approaches comparison
   - Detailed implementation plan

3. **docs/development/analysis/LOOPFORM_PHI_SOLUTION_SUMMARY.md**:
   - Executive summary (250 lines)
   - Testing strategy
   - Migration timeline (4 weeks)
   - Risk assessment

4. **docs/development/analysis/LOOPFORM_PHI_NEXT_STEPS.md**:
   - Step-by-step integration guide (400 lines)
   - Code snippets for mir/loop_builder.rs
   - Troubleshooting guide
   - Success metrics

**Testing**:
-  Unit tests pass (deterministic allocation verified)
-  Integration tests (Week 2 with feature flag)
-  Selfhost support (Week 3)

**Migration Strategy**:
- Week 1 (Current):  Prototype complete
- Week 2: Integration with NYASH_LOOPFORM_PHI_V2=1 feature flag
- Week 3: Selfhost compiler support
- Week 4: Full migration, deprecate old code

**Advantages**:
1. **Correctness**: Guarantees SSA definition-before-use
2. **Simplicity**: ~360 lines (preserves Box Theory philosophy)
3. **Academic alignment**: Matches state-of-art SSA construction
4. **Backward compatible**: Feature-flagged with rollback capability

**Impact**: This resolves the fundamental ValueId circular dependency
issue blocking Stage-B selfhosting, while maintaining the LoopForm
design philosophy of "normalize everything, confine to scope".

**Total Contribution**: ~2,000 lines of code + documentation

**Next Steps**: Integrate LoopFormBuilder into src/mir/loop_builder.rs
following LOOPFORM_PHI_NEXT_STEPS.md guide (estimated 2-4 hours).

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-17 04:56:47 +09:00
9384c80623 using: safer seam defaults (fix_braces OFF by default) + path-alias handling; json_native: robust integer parse + EscapeUtils unquote; add JsonCompat layer; builder: preindex static methods + fallback for bare calls; diagnostics: seam dump + function-call trace 2025-09-25 10:23:14 +09:00