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:
@ -70,6 +70,18 @@ JoinIR ラインで守るべきルールを先に書いておくよ:
|
||||
- LoopBuilder は物理削除済み。JoinIR を OFF にする経路やフォールバックは存在しない。
|
||||
- `NYASH_JOINIR_CORE` は deprecated(0 を指定しても警告して無視)。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)
|
||||
@ -271,6 +283,16 @@ Local Region (1000+):
|
||||
- 条件式の各変数を LoopParam / OuterLocal / LoopBodyLocal に分類。
|
||||
- 関数パラメータ誤分類バグは `condition_var_analyzer.rs` の修正で解消済み(OuterLocal として扱う)。
|
||||
|
||||
- **ConditionPatternBox(Phase 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 へフォールバック。
|
||||
|
||||
- **LoopBodyCarrierPromoter(Phase 171-C-2 実装済み)**
|
||||
- ファイル: `src/mir/loop_pattern_detection/loop_body_carrier_promoter.rs`
|
||||
- 責務:
|
||||
@ -409,6 +431,17 @@ Local Region (1000+):
|
||||
- 変数再接続はヘッダ PHI の dst を使って `builder.variable_map` を更新(Reconnector)。
|
||||
- expr 用の PHI には一切触れない(carrier 専用ライン)。
|
||||
|
||||
- **ExprResultResolver(Phase 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 行のネット削減。
|
||||
|
||||
- **JoinInlineBoundaryBuilder(Phase 200-2 / Phase 201 完了)**
|
||||
- ファイル: `src/mir/join_ir/lowering/inline_boundary_builder.rs`
|
||||
- 責務:
|
||||
|
||||
Reference in New Issue
Block a user