Commit Graph

4 Commits

Author SHA1 Message Date
b73413566d feat(joinir): Phase 61-4 loop-outside If JoinIR infrastructure
Phase 61-4 ループ外 If の JoinIR 基盤実装:

1. env フラグ追加:
   - HAKO_JOINIR_IF_TOPLEVEL: 本番経路有効化
   - HAKO_JOINIR_IF_TOPLEVEL_DRYRUN: dry-run モード

2. IfPhiContext 拡張:
   - pure_if() コンストラクタ追加(ループ外 if 用)

3. if_form.rs 統合:
   - JoinIR 試行コード追加(dry-run対応)
   - フォールバック経路維持(既存PHI生成)

現状:
- dry-run モード動作確認済み
- 関数名ガードにより main 関数はスキップ
- 本番経路は未実装(関数名ガード拡張が必要)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 15:08:23 +09:00
9037467ac7 feat(joinir): Phase 61-3 IfInLoopPhiEmitter箱実装
If-in-loop PHI生成を箱化モジュール化:

## 新規ファイル
- if_in_loop_phi_emitter.rs: IfInLoopPhiEmitter 箱(~250行)
  - emit_header_phis(): VarLookup方式でPHI生成
  - ユニットテスト2件: basic / same_value

## 変更ファイル
- mod.rs: IfInLoopPhiEmitter モジュール追加・pub use
- if_lowering.rs: Phase 61-3本番経路統合
  - HAKO_JOINIR_IF_IN_LOOP_ENABLE=1 で IfInLoopPhiEmitter 使用
  - JoinIRパターンマッチ成功時のみ動作
- if_phi_context.rs: unused imports削除

## 箱理論
- IfInLoopPhiEmitter: PHI命令発行に専念(Thin Box)
- VarLookup方式: snapshot lookup + pre_val fallback
- CFG非依存: incoming値はsnapshotから直接取得

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 14:39:51 +09:00
f4fb798ec8 feat(joinir): Phase 61-3 devフラグ・if_phi_context拡張準備
Phase 61-3(If-in-loop JoinIR本番切り替え)の基盤準備:

- env.rs: joinir_if_in_loop_enable() 追加
  - HAKO_JOINIR_IF_IN_LOOP_ENABLE=1 で本番経路有効化
  - デフォルトOFF(安全第一)

- if_phi_context.rs: Phase 61-3拡張準備
  - BTreeMap, ValueId, BasicBlockId import追加
  - ドキュメント更新(incoming値解決メソッド予告)

設計書: docs/private/.../phase61-3-box-design.md(別途)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 14:19:53 +09:00
3ea397fd3e feat(joinir): Phase 61-1 If-in-loop JoinIR化インフラ整備完了
## 実装内容

### 新規ファイル
- `if_phi_context.rs`: If-in-loop用PHIコンテキスト構造体 (135行)
  - `IfPhiContext::for_loop_body()`: ループ内if用コンストラクタ
  - `is_carrier()`: ループキャリア変数判定
  - 単体テスト2個完全動作

### 既存ファイル拡張
- `if_select.rs`, `if_merge.rs`: context パラメータ追加 (+68行)
  - `with_context()` コンストラクタ実装
  - Pure If との完全互換性維持
- `mod.rs`: `try_lower_if_to_joinir()` シグネチャ拡張 (+25行)
  - `context: Option<&IfPhiContext>` パラメータ追加
  - 既存呼び出し箇所6箇所修正完了
- `loop_builder.rs`: JoinIR経路実装 (+43行)
  - `NYASH_JOINIR_IF_SELECT=1` で試行
  - フォールバック設計(PhiBuilderBox経路保持)
  - デバッグログ完備

## テスト結果
-  loopform テスト 14/14 PASS(退行なし)
-  ビルド成功(エラー0件)
-  Borrow Checker 問題解決

## コード変更量
- 新規: +135行
- 拡張: +136行
- 削除: -18行
- 純増: +253行(インフラ投資、Phase 61-3で-226行削減予定)

## 次のステップ
Phase 61-2: join_inst dry-run実装で実際のPHI生成を行う

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 11:53:57 +09:00