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 (commit 6e778948)
- Phase 202-B: Pattern 3 migration (commit 98e81b26)
- Phase 202-C: Pattern 4 migration (commit ae741d97)
- Phase 203-A: Dead code removal (commit de9fe3bf)

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:
nyash-codex
2025-12-09 19:39:01 +09:00
parent de9fe3bf85
commit c6091f414a
3 changed files with 410 additions and 0 deletions

View File

@ -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 は MirBuilderhost 側から来るため、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 構造・検出ライン