Unifies initialization and conversion logic across all 4 loop patterns, eliminating code duplication and establishing single source of truth. ## Changes ### Infrastructure (New) - CommonPatternInitializer (117 lines): Unified loop var extraction + CarrierInfo building - JoinIRConversionPipeline (127 lines): Unified JoinIR→MIR→Merge flow ### Pattern Refactoring - Pattern 1: Uses CommonPatternInitializer + JoinIRConversionPipeline (-25 lines) - Pattern 2: Uses CommonPatternInitializer + JoinIRConversionPipeline (-25 lines) - Pattern 3: Uses CommonPatternInitializer + JoinIRConversionPipeline (-25 lines) - Pattern 4: Uses CommonPatternInitializer + JoinIRConversionPipeline (-40 lines) ### Code Reduction - Total reduction: ~115 lines across all patterns - Zero code duplication in initialization/conversion - Pattern files: 806 lines total (down from ~920) ### Quality Improvements - Single source of truth for initialization - Consistent conversion flow across all patterns - Guaranteed boundary.loop_var_name setting (prevents SSA-undef bugs) - Improved maintainability and testability ### Testing - All 4 patterns tested and passing: - Pattern 1 (Simple While): ✅ - Pattern 2 (With Break): ✅ - Pattern 3 (If-Else PHI): ✅ - Pattern 4 (With Continue): ✅ ### Documentation - Phase 33-22 inventory and results document - Updated joinir-architecture-overview.md with new infrastructure ## Breaking Changes None - pure refactoring with no API changes 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
7.2 KiB
7.2 KiB
Phase 33-22: 箱化モジュール化・レガシー削除・共通化の最適化 - INDEX
Phase: 33-22 (Phase 33-19/33-21完了後の最適化フェーズ) Status: 📋 計画完了・実装待ち 所要時間: 2.5時間 削減見込み: 351行(実質121行削減 + 保守性大幅向上)
📚 ドキュメント構成
🎯 必読ドキュメント(優先順)
-
phase33-post-analysis.md ⭐ 最重要
- Phase 33-19/33-21完了時点での改善機会調査レポート
- 高/中/低優先度の改善提案
- 削減見込み・実装工数・テスト計画
-
phase33-optimization-guide.md ⭐ 実装ガイド
- Step by Step実装手順
- コマンド・コード例付き
- トラブルシューティング
-
phase33-duplication-map.md 📊 視覚化
- コード重複の視覚的マップ
- Before/After比較図
- 重複検出コマンド
🎯 実施内容サマリー
Phase 1: CommonPatternInitializer箱化(1時間)
目的: Pattern 1-4の初期化ロジック重複削除
削減: 200行(4パターン×50行)
成果物:
src/mir/builder/control_flow/joinir/patterns/common_init.rs(60行)
影響範囲:
- pattern1_minimal.rs: 176 → 126行(-50行、28%削減)
- pattern2_with_break.rs: 219 → 169行(-50行、23%削減)
- pattern3_with_if_phi.rs: 165 → 115行(-50行、30%削減)
- pattern4_with_continue.rs: 343 → 293行(-50行、15%削減)
Phase 2: JoinIRConversionPipeline箱化(1時間)
目的: JoinModule→MIR変換フローの統一化
削減: 120行(4パターン×30行)
成果物:
src/mir/builder/control_flow/joinir/patterns/conversion_pipeline.rs(50行)
影響範囲:
- 全パターンでさらに各30行削減
Phase 3: Legacy Fallback削除検証(30分)
目的: Phase 33-16時代のFallbackロジック必要性検証
削減: 31行(削除可能な場合)
対象:
src/mir/builder/control_flow/joinir/merge/mod.rs:277-307
検証方法:
- Fallbackコメントアウト
- テスト全実行
- PASS → 削除、FAIL → 保持(理由コメント追加)
📊 期待される効果
コード削減
| Phase | 削減行数 | 追加行数 | 実質削減 |
|---|---|---|---|
| Phase 1 | -200行 | +60行 | -140行 |
| Phase 2 | -120行 | +50行 | -70行 |
| Phase 3 | -31行 | 0行 | -31行 |
| 合計 | -351行 | +110行 | -241行 |
保守性向上
- DRY原則適用: 重複コード完全削除
- 単一責任: 初期化・変換ロジックが1箇所に集約
- テスト容易性: 各Boxを独立してテスト可能
- 拡張性: Pattern 5/6追加時も同じBoxを使用可能
✅ 完了基準
ビルド・テスト
- ビルド成功(0エラー・0警告)
- Pattern 1テストPASS(loop_min_while)
- Pattern 2テストPASS(loop_with_break)
- Pattern 3テストPASS(loop_with_if_phi_sum)
- Pattern 4テストPASS(loop_with_continue)
- SSA-undefエラーゼロ
- 全体テストPASS(cargo test --release)
コード品質
- 重複コードゼロ(grep検証)
- 単一責任の原則適用
- ドキュメント更新済み
削減目標
- patterns/モジュール: 200行削減達成
- conversion_pipeline: 120行削減達成
- merge/mod.rs: 31行削減(または保持理由明記)
🚨 リスク管理
潜在的リスク
-
テスト失敗: 初期化ロジックの微妙な差異
- 対策: 段階的移行、Pattern毎に個別テスト
-
デバッグ困難化: スタックトレースが深くなる
- 対策: 適切なエラーメッセージ維持
-
将来の拡張性: Pattern 5/6で異なる初期化が必要
- 対策: CommonPatternInitializerを柔軟に設計
ロールバック手順
# 変更前のコミットに戻る
git revert HEAD
# テスト確認
cargo test --release
# 原因分析
# → phase33-optimization-guide.md のトラブルシューティング参照
📁 関連ドキュメント
Phase 33シリーズ
- Phase 33-10 - Exit Line箱化
- Phase 33-11 - Quick Wins
- Phase 33-12 - 構造改善
- Phase 33-16 INDEX - Pattern Router設計
- Phase 33-17 実装完了 - 最終レポート
- Phase 33-19 - Continue Pattern実装(未作成)
- Phase 33-21 - Parameter remapping fix(未作成)
- Phase 33-22 - 本フェーズ(箱化モジュール化最適化)
アーキテクチャドキュメント
📝 実装スケジュール
Day 1: Phase 1実装(1時間)
- 09:00-09:05: common_init.rs作成
- 09:05-09:20: Pattern 1適用・テスト
- 09:20-09:30: Pattern 2適用・テスト
- 09:30-09:40: Pattern 3適用・テスト
- 09:40-09:50: Pattern 4適用・テスト
- 09:50-10:00: 全体テスト・検証
Day 1: Phase 2実装(1時間)
- 10:00-10:05: conversion_pipeline.rs作成
- 10:05-10:20: Pattern 1適用・テスト
- 10:20-10:30: Pattern 2適用・テスト
- 10:30-10:40: Pattern 3適用・テスト
- 10:40-10:50: Pattern 4適用・テスト
- 10:50-11:00: 全体テスト・検証
Day 1: Phase 3検証(30分)
- 11:00-11:05: Fallbackコメントアウト
- 11:05-11:25: テスト実行・エラー分析
- 11:25-11:30: 判定・コミット(または理由記録)
🎯 次のステップ(Phase 33-22完了後)
即座に実装可能
-
未使用警告整理(15分)
- detect_from_features等の警告対処
- #[allow(dead_code)]追加 or 削除
-
Pattern4Pipeline統合(30分、オプション)
- LoopUpdateAnalyzer + ContinueBranchNormalizer統合
- 可読性向上(削減なし)
Phase 195以降で検討
-
Pattern 5/6実装
- CommonPatternInitializer再利用
- JoinIRConversionPipeline再利用
-
LoopScopeShape統合
- Phase 170-C系列の統合
- Shape-based routing強化
📞 サポート・質問
実装中に困ったら
- phase33-optimization-guide.md のトラブルシューティング参照
- phase33-post-analysis.md の検証方法確認
- phase33-duplication-map.md で重複箇所再確認
エラー分類
- ビルドエラー: use文追加忘れ → optimization-guide.md Q2
- テスト失敗: ValueId mismatch → optimization-guide.md Q1
- Fallback問題: テスト失敗 → optimization-guide.md Q3
📋 変更履歴
- 2025-12-07: Phase 33-22 INDEX作成(計画フェーズ完了)
- 実装完了後: 実績記録・成果まとめ追加予定
Status: 📋 計画完了・実装待ち Next: phase33-optimization-guide.md に従って実装開始
✅ Phase 33-22準備完了!