docs(joinir): Phase 203-B update documentation for Phase 201-202
Update documentation to reflect Phase 201 (JoinValueSpace) and Phase 202 (Pattern 1-4 unification) achievements. Changes: 1. joinir-architecture-overview.md: - Add Section 1.9 "ValueId Space Management (Phase 201)" - ValueId space diagram (PHI/Param/Local regions) - Component-to-region mapping table - Design principles and value_id_ranges.rs relationship 2. CURRENT_TASK.md: - Add Phase 201 completion report (JoinValueSpace design + implementation) - Add Phase 202 completion report (Pattern 1-4 unified migration) - Add Phase 203-A completion report (dead code removal) - Include commit hashes, test results, and next steps 3. phase202-summary.md (NEW): - Complete Phase 202 summary document - Before/After comparison tables - Region usage matrix for all patterns - Test coverage (821 tests passing) - Architecture impact and benefits Documentation Coverage: - Phase 201: JoinValueSpace unified ValueId allocation - Phase 202-A: Pattern 1 migration (commit6e778948) - Phase 202-B: Pattern 3 migration (commit98e81b26) - Phase 202-C: Pattern 4 migration (commitae741d97) - Phase 203-A: Dead code removal (commitde9fe3bf) All documentation links verified and consistent. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@ -68,6 +68,74 @@ JoinIR ラインで守るべきルールを先に書いておくよ:
|
||||
|
||||
---
|
||||
|
||||
## 1.9 ValueId Space Management (Phase 201)
|
||||
|
||||
JoinIR の ValueId 割り当ては **JoinValueSpace** で一元管理され、3つの領域に分離されているよ:
|
||||
|
||||
### 1.9.1 ValueId 空間のダイアグラム
|
||||
|
||||
```
|
||||
JoinValueSpace Memory Layout:
|
||||
|
||||
0 100 1000 u32::MAX
|
||||
├──────────┼──────────┼──────────────────────────┤
|
||||
│ PHI │ Param │ Local │
|
||||
│ Reserved│ Region │ Region │
|
||||
└──────────┴──────────┴──────────────────────────┘
|
||||
|
||||
PHI Reserved (0-99):
|
||||
- LoopHeader PHI dst 用の予約領域
|
||||
- reserve_phi(id) で特定 ID をマーク
|
||||
|
||||
Param Region (100-999):
|
||||
- alloc_param() で割り当て
|
||||
- 使用箇所: ConditionEnv, CarrierInfo.join_id, CapturedEnv
|
||||
|
||||
Local Region (1000+):
|
||||
- alloc_local() で割り当て
|
||||
- 使用箇所: Pattern lowerers (Const, BinOp, etc.)
|
||||
```
|
||||
|
||||
### 1.9.2 JoinValueSpace の役割
|
||||
|
||||
- **単一の真実源 (SSOT)**: すべての JoinIR ValueId 割り当てを一箇所で管理
|
||||
- **領域分離**: Param ID、Local ID、PHI dst が決して重複しない
|
||||
- **契約検証**: デバッグモードで違反を早期検出
|
||||
- **後方互換性**: 既存 API は継続動作
|
||||
|
||||
### 1.9.3 各コンポーネントと ValueId 領域の対応表
|
||||
|
||||
| コンポーネント | 使用領域 | 割り当て方法 | 用途 |
|
||||
|--------------|---------|------------|------|
|
||||
| ConditionEnv | Param (100-999) | `alloc_param()` | ループ条件変数の JoinIR ValueId |
|
||||
| CarrierInfo.join_id | Param (100-999) | `alloc_param()` | キャリア変数の JoinIR ValueId |
|
||||
| CapturedEnv | Param (100-999) | `alloc_param()` | 関数スコープ変数の JoinIR ValueId |
|
||||
| Pattern 1 lowerer | Local (1000+) | `alloc_local()` | 中間値(Const, Compare, etc.) |
|
||||
| Pattern 2 lowerer | Local (1000+) | `alloc_local()` | 中間値(Const, BinOp, etc.) |
|
||||
| Pattern 3 lowerer | Local (1000+) | `alloc_local()` | 中間値(PHI, Select, etc.) |
|
||||
| Pattern 4 lowerer | Local (1000+) | `alloc_local()` | 中間値(Select, BinOp, etc.) |
|
||||
| LoopHeaderPhiBuilder | PHI Reserved (0-99) | `reserve_phi()` | PHI dst ID 保護(上書き防止) |
|
||||
|
||||
### 1.9.4 設計原則
|
||||
|
||||
1. **領域の固定境界**
|
||||
- 明確な境界(100, 1000)で領域を分離
|
||||
- デバッグが容易(ValueId を見ればどの領域か一目瞭然)
|
||||
- アロケータ間の調整不要
|
||||
|
||||
2. **reserve_phi() vs alloc_phi()**
|
||||
- PHI dst ID は MirBuilder(host 側)から来るため、JoinValueSpace は割り当てない
|
||||
- `reserve_phi()` はマーカーのみ(「この ID を上書きするな」という契約)
|
||||
|
||||
3. **value_id_ranges.rs との関係**
|
||||
- `value_id_ranges.rs`: **モジュールレベルの分離**(min_loop, skip_ws 等の各モジュールに大きな固定範囲を割り当て)
|
||||
- `JoinValueSpace`: **lowering 内部の分離**(param vs local vs PHI)
|
||||
- 両者は相補的な役割
|
||||
|
||||
詳細は `src/mir/join_ir/lowering/join_value_space.rs` と `phase201-join-value-space-design.md` を参照。
|
||||
|
||||
---
|
||||
|
||||
## 2. 主な箱と責務
|
||||
|
||||
### 2.1 Loop 構造・検出ライン
|
||||
|
||||
Reference in New Issue
Block a user