docs: Phase 220 architecture documentation update

- Updated joinir-architecture-overview.md with Phase 220 completion
  - Added invariant #11: P3 if-sum ConditionEnv integration
  - LoopBuilder fallback removal confirmed (Phase 187)
  - ConditionPatternBox for simple/complex condition routing
  - Loop condition variable support (Phase 220-D)
  - ExprResult routing unified across P2/P3 (Phase 221-R)

- Updated CURRENT_TASK.md with Phase 220 summary
  - Phase 220-C: condition variable remap fix
  - Phase 219-fix: ConditionPatternBox implementation
  - Phase 220-D: loop condition variable support (`loop(i < len)`)
  - Phase 221: ExprResult routing
  - Phase 221-R: ExprResultResolver Box extraction
  - Achievement: phase212_if_sum_min.hako → RC=2

- Added ConditionPatternBox documentation (Phase 219-fix)
- Added ExprResultResolver Box documentation (Phase 221-R)

E2E verification status:
 phase212_if_sum_min.hako: RC=2 (if-sum mode with variable condition)
 loop_if_phi.hako: sum=9 (legacy mode with complex condition)
 loop_min_while.hako: correct output (simple while loop)
⚠️ phase218_json_if_sum_min.hako: Blocked (if condition left variable support needed)
⚠️ phase217_if_sum_multi_min.hako: RC=0 (test-specific result)

Phase 220 芯完成: ConditionEnv/ConditionPatternBox/ExprResultResolver 統合完了
This commit is contained in:
nyash-codex
2025-12-10 08:58:37 +09:00
parent 33e80637dd
commit 92c57009c1
2 changed files with 41 additions and 0 deletions

View File

@ -25,6 +25,14 @@
- RHS structure classification + name heuristic で CounterLike/AccumulationLike 判定 - RHS structure classification + name heuristic で CounterLike/AccumulationLike 判定
- phase212 で AST lowerer 正常起動確認(`is_simple_if_sum_pattern() = true` - phase212 で AST lowerer 正常起動確認(`is_simple_if_sum_pattern() = true`
- phase218/217 は Phase 214+ (condition variable support) でブロック中 - phase218/217 は Phase 214+ (condition variable support) でブロック中
- **Phase 220 完了** ✅: P3 if-sum ConditionEnv 統合 + ExprResult routing 統一化
- **Phase 220-C**: condition variable remap fixcondition_bindings 事前登録)
- **Phase 219-fix**: ConditionPatternBox で複雑条件フィルタリング(`i % 2 == 1` → legacy mode
- **Phase 220-D**: loop 条件変数サポート(`loop(i < len)` → ConditionEnv 経由で解決)
- **Phase 221**: ExprResult routing 実装expr_result → carrier PHI dst
- **Phase 221-R**: ExprResultResolver Box 箱化Phase 33 パターン準拠、-37 行削減)
- **成果**: phase212_if_sum_min.hako → RC=2 達成、P3/P2 の expr-result 経路完全統一
- **次フェーズ**: P3/P2 expr-result 経路が揃ったので、JsonParser/selfhost への実戦適用フェーズへ移行
### 2. JsonParser / Trim / selfhost への適用状況 ### 2. JsonParser / Trim / selfhost への適用状況

View File

@ -70,6 +70,18 @@ JoinIR ラインで守るべきルールを先に書いておくよ:
- LoopBuilder は物理削除済み。JoinIR を OFF にする経路やフォールバックは存在しない。 - LoopBuilder は物理削除済み。JoinIR を OFF にする経路やフォールバックは存在しない。
- `NYASH_JOINIR_CORE` は deprecated0 を指定しても警告して無視。JoinIR の OFF トグルは提供しない。 - `NYASH_JOINIR_CORE` は deprecated0 を指定しても警告して無視。JoinIR の OFF トグルは提供しない。
11. **Phase 220: P3 if-sum の ConditionEnv 統合完了**
- **LoopBuilder へのフォールバック経路は Phase 187 で完全削除済み**。
- **P3 if-sum には ConditionPatternBox + ConditionEnv が必須**:
- 単純条件(`var CmpOp literal`)のみ if-sum mode へルーティングPhase 219-fix
- 複雑条件(`i % 2 == 1` 等)は legacy P3 経路へフォールバック。
- **Phase 220-D で loop 条件の変数サポート完了**:
- `loop(i < len)` のような変数条件を ConditionEnv で解決。
- `extract_loop_condition()` を ValueOrLiteral 対応に拡張。
- **Phase 220 で if-sum の expr-result exit contract が P2 と揃った**:
- ExprResultResolver Box で expr_result routing を統一化Phase 221-R
- phase212_if_sum_min.hako → RC=2 達成。
--- ---
## 1.9 ValueId Space Management (Phase 201) ## 1.9 ValueId Space Management (Phase 201)
@ -271,6 +283,16 @@ Local Region (1000+):
- 条件式の各変数を LoopParam / OuterLocal / LoopBodyLocal に分類。 - 条件式の各変数を LoopParam / OuterLocal / LoopBodyLocal に分類。
- 関数パラメータ誤分類バグは `condition_var_analyzer.rs` の修正で解消済みOuterLocal として扱う)。 - 関数パラメータ誤分類バグは `condition_var_analyzer.rs` の修正で解消済みOuterLocal として扱う)。
- **ConditionPatternBoxPhase 219-fix 実装済み)**
- ファイル: `src/mir/join_ir/lowering/condition_pattern.rs`
- 責務:
- if 条件の複雑度を判定SimpleComparison vs Complex
- `is_simple_comparison(cond)` で `var CmpOp literal` パターンのみ true。
- 複雑条件(`i % 2 == 1`、MethodCall 等)は false を返し、legacy P3 経路へルーティング。
- 使用箇所:
- PatternPipelineContext.is_if_sum_pattern() で条件複雑度をチェック。
- P3 if-sum mode は単純条件のみ受理、複雑条件は PoC lowerer へフォールバック。
- **LoopBodyCarrierPromoterPhase 171-C-2 実装済み)** - **LoopBodyCarrierPromoterPhase 171-C-2 実装済み)**
- ファイル: `src/mir/loop_pattern_detection/loop_body_carrier_promoter.rs` - ファイル: `src/mir/loop_pattern_detection/loop_body_carrier_promoter.rs`
- 責務: - 責務:
@ -409,6 +431,17 @@ Local Region (1000+):
- 変数再接続はヘッダ PHI の dst を使って `builder.variable_map` を更新Reconnector - 変数再接続はヘッダ PHI の dst を使って `builder.variable_map` を更新Reconnector
- expr 用の PHI には一切触れないcarrier 専用ライン)。 - expr 用の PHI には一切触れないcarrier 専用ライン)。
- **ExprResultResolverPhase 221-R 実装済み)**
- ファイル: `src/mir/builder/control_flow/joinir/merge/expr_result_resolver.rs`
- 責務:
- expr_result ValueId を exit_bindings/carrier_phis と照合し、適切な出口値を解決。
- expr_result が carrier の場合: carrier PHI dst を返す(変数再接続と統一)。
- expr_result が非 carrier の場合: remapped ValueId を返すexpr-only の値)。
- 特徴:
- Phase 33 モジュール化パターン準拠ExitMetaCollector/ExitLineReconnector と同様)。
- 4つのシナリオを unit test でカバーcarrier/non-carrier/None/error
- merge/mod.rs から 64 行を抽出、-37 行のネット削減。
- **JoinInlineBoundaryBuilderPhase 200-2 / Phase 201 完了)** - **JoinInlineBoundaryBuilderPhase 200-2 / Phase 201 完了)**
- ファイル: `src/mir/join_ir/lowering/inline_boundary_builder.rs` - ファイル: `src/mir/join_ir/lowering/inline_boundary_builder.rs`
- 責務: - 責務: