docs(joinir): Phase 222-5 documentation updates

Phase 222: If Condition Normalization - Part 5 (Documentation)

Updates:
1. joinir-architecture-overview.md:
   - Section 2.2 ConditionPatternBox: Added Phase 222 normalization features
     * normalize_comparison() for left-right flip (0 < i → i > 0)
     * var CmpOp var support (i > j)
   - Section 4.3 JsonParser constraints:
     * Marked Phase 221 'if condition pattern' constraint as RESOLVED 
     * Added Phase 222 resolution summary with test reference

2. CURRENT_TASK.md:
   - Added Phase 222 completion summary (4 lines)
   - ConditionPatternBox extension, if-sum integration, test results
   - Phase 221 constraint resolution

Phase 222 Complete Summary:
-  Design document (phase222-if-cond-normalization.md)
-  Implementation (condition_pattern.rs +160 lines, 9 tests)
-  Integration (pattern_pipeline.rs, loop_with_if_phi_if_sum.rs)
-  E2E test (phase222_if_cond_left_literal_min.hako → RC=2)
-  Documentation (architecture overview + CURRENT_TASK)

Status: Phase 222 完了 🎉
This commit is contained in:
nyash-codex
2025-12-10 09:29:32 +09:00
parent b77212be15
commit e3b36aa83a
2 changed files with 18 additions and 4 deletions

View File

@ -37,6 +37,11 @@
- **実戦 OK**: 5/9 テスト PASSNumberAccumulation, if-sum, captured vars - **実戦 OK**: 5/9 テスト PASSNumberAccumulation, if-sum, captured vars
- **制約発見**: 3種の既知制約を整理LoopBodyLocal in condition, MethodCall whitelist, if condition pattern - **制約発見**: 3種の既知制約を整理LoopBodyLocal in condition, MethodCall whitelist, if condition pattern
- **次の候補**: LoopBodyLocal 条件対応Pattern 5+ 拡張、if condition 左辺変数対応 - **次の候補**: LoopBodyLocal 条件対応Pattern 5+ 拡張、if condition 左辺変数対応
- **Phase 222 完了** ✅: If Condition 正規化(左リテラル/変数同士対応)
- **ConditionPatternBox 拡張**: normalize_comparison() で `0 < i``i > 0` 正規化
- **if-sum 統合**: extract_loop_condition() を正規化ベースに変更
- **テスト**: phase222_if_cond_left_literal_min.hako → RC=2 達成
- **制約解決**: Phase 221 の "if condition pattern" 制約を解消
### 2. JsonParser / Trim / selfhost への適用状況 ### 2. JsonParser / Trim / selfhost への適用状況

View File

@ -283,15 +283,18 @@ Local Region (1000+):
- 条件式の各変数を LoopParam / OuterLocal / LoopBodyLocal に分類。 - 条件式の各変数を LoopParam / OuterLocal / LoopBodyLocal に分類。
- 関数パラメータ誤分類バグは `condition_var_analyzer.rs` の修正で解消済みOuterLocal として扱う)。 - 関数パラメータ誤分類バグは `condition_var_analyzer.rs` の修正で解消済みOuterLocal として扱う)。
- **ConditionPatternBoxPhase 219-fix 実装済み** - **ConditionPatternBoxPhase 219-fix / Phase 222 拡張完了**
- ファイル: `src/mir/join_ir/lowering/condition_pattern.rs` - ファイル: `src/mir/join_ir/lowering/condition_pattern.rs`
- 責務: - 責務:
- if 条件の複雑度を判定SimpleComparison vs Complex - if 条件の複雑度を判定SimpleComparison vs Complex
- `is_simple_comparison(cond)` で `var CmpOp literal` パターンのみ true - **Phase 222**: 条件を正規化var on left の canonical form
- `normalize_comparison()` で左右反転をサポート:
- `0 < i` → `i > 0` (literal < var → var > literal)
- `i > j` (var CmpOp var) - そのまま受理
- 複雑条件(`i % 2 == 1`、MethodCall 等)は false を返し、legacy P3 経路へルーティング。 - 複雑条件(`i % 2 == 1`、MethodCall 等)は false を返し、legacy P3 経路へルーティング。
- 使用箇所: - 使用箇所:
- PatternPipelineContext.is_if_sum_pattern() で条件複雑度をチェック。 - PatternPipelineContext.is_if_sum_pattern() で条件複雑度をチェック。
- P3 if-sum mode は単純条件のみ受理、複雑条件は PoC lowerer へフォールバック。 - 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`
@ -638,7 +641,13 @@ Phase 210221 で「数値ループif-sum」を実戦投入し、JoinIR イ
- **Phase 221 制約発見** (2025-12-09): - **Phase 221 制約発見** (2025-12-09):
- ⚠️ **LoopBodyLocal in condition**: break/continue 条件で loop-body-local 変数を使用Pattern 5+ 必要) - ⚠️ **LoopBodyLocal in condition**: break/continue 条件で loop-body-local 変数を使用Pattern 5+ 必要)
- ⚠️ **MethodCall whitelist**: body-local init で `substring` 未対応Phase 193: indexOf/get/toString のみ) - ⚠️ **MethodCall whitelist**: body-local init で `substring` 未対応Phase 193: indexOf/get/toString のみ)
- ⚠️ **if condition pattern**: if-sum mode は `var CmpOp literal` のみ(`i > 0` は OK、`0 < i` や `i > j` は NG - ~~⚠️ **if condition pattern**: if-sum mode は `var CmpOp literal` のみ(`i > 0` は OK、`0 < i` や `i > j` は NG~~ → **Phase 222 で解決済み✅**
- **Phase 222 解決済み制約** (2025-12-10):
- ✅ **if condition pattern**: ConditionPatternBox 正規化で左リテラル・変数同士の比較をサポート
- `0 < i`, `len > i` → `i > 0`, `i < len` に正規化
- `i > j` (var CmpOp var) - 直接サポート
- テスト: phase222_if_cond_left_literal_min.hako → RC=2 達成
- **残りループ** (Phase 222+ で段階的対応予定): - **残りループ** (Phase 222+ で段階的対応予定):
- `_parse_array`, `_parse_object` (MethodCall 複数) - `_parse_array`, `_parse_object` (MethodCall 複数)