Phase 131-3 完了: MIR→LLVM lowering 棚卸し テスト結果マトリックス: - Case A (phase87_llvm_exe_min.hako): ✅ PASS (baseline) - Case B (loop_min_while.hako): ❌ TAG-EMIT (PHI after terminator) - Case B2 (print(42) simple): ✅ PASS (BoxCall works) - Case C (llvm_stage3_loop_only.hako): ❌ TAG-EMIT (JoinIR pattern gap) Critical Bugs: 1. Bug #1: PHI After Terminator (Case B) - 原因: function_lower.py が terminator を PHI より先に emit - 修正: 4-pass block emission (2-3h) 2. Bug #2: JoinIR Pattern Gap (Case C) - 原因: loop(true) { break } パターンが JoinIR 未対応 - 修正: Pattern 5 設計・実装 (3-4h) Next Actions: - P1 (推奨): PHI ordering 修正 → 80% のループを有効化 - P2: JoinIR Pattern 5 → infinite loop 対応 ドキュメント: - phase131-3-llvm-lowering-inventory.md: 詳細棚卸し結果 - phase87-selfhost-llvm-exe-line.md: LLVM IR parsing error 追記 - CURRENT_TASK.md: phase131-3 参照追加 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
108 lines
6.1 KiB
Markdown
108 lines
6.1 KiB
Markdown
# JoinIR / Selfhost INDEX(読み始めガイド)
|
||
|
||
Status: Active
|
||
Scope: JoinIR と Selfhost(Stage‑B/Stage‑1/Stage‑3)に関する「最初に読むべき現役ドキュメント」だけを集約した入口。
|
||
|
||
このファイルは、JoinIR と Selfhost ラインの主戦場をすばやく把握するためのインデックスだよ。
|
||
歴史メモや詳細な Phase 文書に飛ぶ前に、まずここに載っている現役ドキュメントから辿っていくことを想定しているよ。
|
||
|
||
|
||
---
|
||
|
||
## 1. まず全体像だけ掴みたいとき
|
||
|
||
- JoinIR 全体像(SSOT)
|
||
- `docs/development/current/main/joinir-architecture-overview.md`
|
||
- Selfhost / Stage‑B〜3 の代表フロー
|
||
- `docs/development/current/main/selfhost_stage3_expected_flow.md`
|
||
- 「いまどこまで進んでいるか」の現状サマリ
|
||
- `docs/development/current/main/10-Now.md`
|
||
- 「JoinIR / Loop / If ライン」
|
||
- 「JsonParser / Selfhost depth‑2 ライン」
|
||
- Phase 86–90(Loop frontends)の要約(1枚)
|
||
- `docs/development/current/main/phase86-90-loop-frontends-summary.md`
|
||
|
||
---
|
||
|
||
## 2. JoinIR をこれから触る人向け
|
||
|
||
JoinIR の箱構造と責務、ループ/if の lowering パターンを把握したいときの読み順だよ。
|
||
|
||
1. JoinIR の基本設計(SSOT)
|
||
- `docs/development/current/main/joinir-architecture-overview.md`
|
||
2. ループパターン空間とパターン番号の意味
|
||
- `docs/development/current/main/loop_pattern_space.md`
|
||
3. Boundary / ExitLine / Carrier の具体パターン
|
||
- `docs/development/current/main/joinir-boundary-builder-pattern.md`
|
||
4. Scope/BindingId(shadowing・束縛同一性の段階移行)
|
||
- `docs/development/current/main/phase73-scope-manager-design.md`
|
||
- `docs/development/current/main/PHASE_74_SUMMARY.md`
|
||
- `docs/development/current/main/PHASE_75_SUMMARY.md`
|
||
- `docs/development/current/main/PHASE_77_EXECUTIVE_SUMMARY.md`
|
||
- `docs/development/current/main/phase78-bindingid-promoted-carriers.md`
|
||
- `docs/development/current/main/phase80-bindingid-p3p4-plan.md`(P3/P4 への配線計画)
|
||
- `docs/development/current/main/phase81-pattern2-exitline-contract.md`(promoted carriers の ExitLine 契約検証)
|
||
5. Boxification feedback(Phase 78–85 の振り返りと Phase 86 推奨)
|
||
- `docs/development/current/main/phase78-85-boxification-feedback.md`
|
||
6. Phase 86: Carrier Init Builder + Error Tags ✅
|
||
- **Status**: COMPLETE (2025-12-13)
|
||
- **Modules**:
|
||
- `src/mir/builder/control_flow/joinir/merge/carrier_init_builder.rs` (+8 tests)
|
||
- `src/mir/join_ir/lowering/error_tags.rs` (+5 tests)
|
||
- **Achievements**: SSOT 確立(CarrierInit → ValueId 生成統一、エラータグ中央化、DebugOutputBox 完全移行)
|
||
- **Impact**: 987/987 tests PASS, +13 unit tests, Single Responsibility validated
|
||
7. Phase 87: LLVM Exe Line SSOT ✅
|
||
- **Status**: COMPLETE (2025-12-13)
|
||
- **SSOT**: `tools/build_llvm.sh` - Single pipeline for .hako → executable
|
||
- **Deliverables**:
|
||
- Design doc: `phase87-selfhost-llvm-exe-line.md` (full troubleshooting + advanced usage)
|
||
- Minimal fixture: `apps/tests/phase87_llvm_exe_min.hako` (exit code 42)
|
||
- Integration smoke: `tools/smokes/v2/profiles/integration/apps/phase87_llvm_exe_min.sh` (SKIP if no LLVM)
|
||
- **Policy**: No script duplication, integration smoke only (not quick), graceful SKIP
|
||
- **Impact**: Standard procedure established, prerequisites documented
|
||
8. 代表的な Phase 文書(現役ラインとの接点だけ絞ったもの)
|
||
- `docs/development/current/main/phase33-16-INDEX.md`
|
||
- `docs/development/current/main/phase33-17-joinir-modularization-analysis.md`
|
||
- `docs/development/current/main/phase183-selfhost-depth2-joinir-status.md`
|
||
9. Phase 86–90(Loop frontends)の要約(1枚)
|
||
- `docs/development/current/main/phase86-90-loop-frontends-summary.md`
|
||
|
||
Phase 文書は歴史や検証ログも含むので、「JoinIR の現役設計を確認した上で、必要なときだけ掘る」という前提で読んでね。
|
||
|
||
---
|
||
|
||
## 3. Selfhost(Stage‑B / Stage‑1 / Stage‑3)を触る人向け
|
||
|
||
自己ホストコンパイラのフローや実行手順、Ny Executor ラインの計画を押さえたいときの読み順だよ。
|
||
|
||
1. Selfhost 全体フロー(Stage‑B / Stage‑1 / Stage‑3 と JSON v0)
|
||
- `docs/development/current/main/selfhost_stage3_expected_flow.md`
|
||
2. 実行手順・クイックスタート
|
||
- `docs/development/selfhosting/quickstart.md`
|
||
- `docs/development/testing/selfhost_exe_stageb_quick_guide.md`
|
||
3. Ny Executor(Ny で MIR(JSON v0) を実行)のロードマップ
|
||
- `docs/development/roadmap/selfhosting-ny-executor.md`
|
||
4. Stage‑3 / depth‑2 関連で「現役」として参照する Phase 文書
|
||
- `docs/development/current/main/phase150_selfhost_stage3_depth1_baseline.md`
|
||
- `docs/development/current/main/phase150_selfhost_stage3_depth1_results.md`
|
||
- `docs/development/current/main/phase183-selfhost-depth2-joinir-status.md`
|
||
- `docs/development/current/main/phase120_selfhost_stable_paths.md`
|
||
|
||
---
|
||
|
||
## 4. 迷ったときの読み分けガイド
|
||
|
||
- JoinIR の箱や契約で迷っているとき
|
||
- → 2章の 1〜3 をこの順番で読む。
|
||
- Selfhost のビルド / 実行フローで迷っているとき
|
||
- → 3章の 1〜3 をこの順番で読む。
|
||
- VM backend の Box 解決(ConsoleBox / plugin / builtin)で迷っているとき
|
||
- → `docs/development/current/main/phase131-2-box-resolution-map.md`(経路図)
|
||
- → `docs/development/current/main/phase131-2-summary.md`(要点)
|
||
- LLVM(Python llvmlite)lowering の不具合切り分けで迷っているとき
|
||
- → `docs/development/current/main/phase131-3-llvm-lowering-inventory.md`(再現ケース表 + 根本原因候補)
|
||
- → `docs/development/current/main/phase87-selfhost-llvm-exe-line.md`(実行パイプラインのSSOT)
|
||
- 「この Phase 文書は現役か?」で迷ったとき
|
||
- → まず `docs/development/current/main/10-Now.md` と
|
||
`docs/development/current/main/30-Backlog.md` を確認し、そこで名前が挙がっている Phase 文書を優先して読んでね。
|