docs(phase131): JoinIR → LLVM 個別修正ライン(指示書作成)
This commit is contained in:
284
docs/development/current/main/phase131_joinir_llvm_fixes.md
Normal file
284
docs/development/current/main/phase131_joinir_llvm_fixes.md
Normal file
@ -0,0 +1,284 @@
|
||||
# Phase 131: JoinIR → LLVM 個別修正ライン(最小スコープ)
|
||||
|
||||
## 🎯 ゴール
|
||||
|
||||
Phase 130 で観測した LLVM 側の「赤ポイント3つ」を、**設計を崩さずピンポイントで修正** するフェーズ。
|
||||
|
||||
目的:
|
||||
- LLVM backend の最小 re-enable(代表1本を green に)
|
||||
- ConsoleBox の LLVM ライン統一(println/log 出力)
|
||||
- JoinIR→MIR→LLVM の成功パス確立(JoinIR含み1本を green に)
|
||||
|
||||
```
|
||||
Phase 130: 赤ポイント3つを「観測・リスト化」✅
|
||||
↓
|
||||
Phase 131: その3つを「ピンポイント修正」← ← ここ!
|
||||
↓
|
||||
JoinIR/LLVM 第3章クローズ準備完了
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📋 スコープ(Phase 130 で見えた3点だけ)
|
||||
|
||||
Phase 130 で検出された問題:
|
||||
|
||||
1. **LLVM backend 機能が無効化中** → 最小 re-enable で1本 green に
|
||||
2. **ConsoleBox の LLVM ライン登録・出力経路** → LLVM runtime レイヤで統一
|
||||
3. **JoinIR→MIR は OK、MIR→LLVM は未検証** → JoinIR含みケース1本を成功させる
|
||||
|
||||
### ✅ やること
|
||||
- LLVM backend の現状確認と最小 re-enable
|
||||
- ConsoleBox の LLVM 出力経路整備
|
||||
- JoinIR含みケース1本の LLVM 実行成功
|
||||
|
||||
### ❌ やらないこと
|
||||
- 全7本のテストケースを green にする(1-2本で十分)
|
||||
- LLVM最適化パスの追加
|
||||
- 大規模な設計変更
|
||||
|
||||
---
|
||||
|
||||
## 🏗️ 4 つのタスク
|
||||
|
||||
### Task 1: LLVM backend の現状確認 & 最小 re-enable
|
||||
|
||||
**目標**: 代表1本(`peek_expr_block.hako`)を LLVM ハーネスで green にする
|
||||
|
||||
**やること**:
|
||||
|
||||
1. **LLVM backend 設定の確認**:
|
||||
```bash
|
||||
# Cargo.toml で llvm feature の定義確認
|
||||
rg "features.*llvm" Cargo.toml
|
||||
|
||||
# 現在のビルド確認
|
||||
./target/release/nyash --version
|
||||
```
|
||||
|
||||
2. **LLVM feature 付きビルド**:
|
||||
```bash
|
||||
cargo build --release --features llvm
|
||||
```
|
||||
- ビルドエラーがあれば記録(Phase 130 docs に追記)
|
||||
- 成功すれば次へ
|
||||
|
||||
3. **Python/llvmlite 環境確認**:
|
||||
```bash
|
||||
# llvmlite ハーネス確認
|
||||
ls -la src/llvm_py/venv/
|
||||
|
||||
# 無ければ再構築
|
||||
cd src/llvm_py
|
||||
python3 -m venv venv
|
||||
./venv/bin/pip install llvmlite
|
||||
cd ../..
|
||||
```
|
||||
|
||||
4. **代表1本を LLVM 実行**:
|
||||
```bash
|
||||
# peek_expr_block.hako を LLVM で実行
|
||||
LLVM_SYS_180_PREFIX=$(llvm-config-18 --prefix) \
|
||||
NYASH_LLVM_USE_HARNESS=1 \
|
||||
./target/release/nyash --backend llvm apps/tests/peek_expr_block.hako
|
||||
```
|
||||
- ✅ green なら Task 1 完了
|
||||
- ❌ 赤なら、エラーメッセージを docs に記録して次の Task へ
|
||||
|
||||
5. **Phase 130 docs 更新**:
|
||||
- `phase130_joinir_llvm_baseline.md` の結果表を更新
|
||||
- LLVM backend の re-enable 手順を記録
|
||||
|
||||
---
|
||||
|
||||
### Task 2: ConsoleBox の LLVM ライン整合
|
||||
|
||||
**目標**: ConsoleBox の println/log を LLVM runtime レイヤで統一
|
||||
|
||||
**やること**:
|
||||
|
||||
1. **Rust VM での ConsoleBox 登録確認**:
|
||||
```bash
|
||||
# TypeRegistry で ConsoleBox の println/log スロット確認
|
||||
rg "ConsoleBox.*println" src/runtime/type_registry.rs
|
||||
|
||||
# Phase 122 の変更内容確認
|
||||
rg "Phase 122" docs/development/current/main/
|
||||
```
|
||||
|
||||
2. **LLVM runtime での ConsoleBox 対応**:
|
||||
- 候補A: LLVM ハーネス側で print/log 外部関数を追加
|
||||
- 候補B: LLVM backend に println/log の簡易実装を追加
|
||||
- **推奨**: 候補A(Python ハーネス側での外部関数実装)
|
||||
|
||||
3. **Python ハーネス修正**(推奨アプローチ):
|
||||
```python
|
||||
# src/llvm_py/llvm_builder.py または runtime.py
|
||||
|
||||
# extern_print 関数を追加(既存の print 処理を流用)
|
||||
def extern_println(msg):
|
||||
print(f"[Console LOG] {msg}")
|
||||
|
||||
# LLVM IR 生成時に externCall("println", ...) を処理
|
||||
```
|
||||
|
||||
4. **検証**:
|
||||
```bash
|
||||
# esc_dirname_smoke.hako を LLVM で実行
|
||||
LLVM_SYS_180_PREFIX=$(llvm-config-18 --prefix) \
|
||||
NYASH_LLVM_USE_HARNESS=1 \
|
||||
./target/release/nyash --backend llvm apps/tests/esc_dirname_smoke.hako
|
||||
```
|
||||
- 期待出力: `[Console LOG] dir1/dir2`
|
||||
|
||||
5. **Phase 130 docs 更新**:
|
||||
- ConsoleBox の LLVM 対応状況を記録
|
||||
|
||||
---
|
||||
|
||||
### Task 3: JoinIR→MIR→LLVM の成功パス確立
|
||||
|
||||
**目標**: JoinIR含みケース1本を LLVM で green にする
|
||||
|
||||
**やること**:
|
||||
|
||||
1. **JoinIR含みケースの選定**:
|
||||
- 候補1: `local_tests/phase123_simple_if.hako`(シンプルな if)
|
||||
- 候補2: `apps/tests/joinir_if_select_simple.hako`(IfSelect)
|
||||
- **推奨**: `phase123_simple_if.hako`(軽量で検証しやすい)
|
||||
|
||||
2. **Rust VM での確認**(比較用):
|
||||
```bash
|
||||
./target/release/nyash --backend vm local_tests/phase123_simple_if.hako
|
||||
# 出力: RC: 0
|
||||
```
|
||||
|
||||
3. **LLVM 実行**:
|
||||
```bash
|
||||
LLVM_SYS_180_PREFIX=$(llvm-config-18 --prefix) \
|
||||
NYASH_LLVM_USE_HARNESS=1 \
|
||||
./target/release/nyash --backend llvm local_tests/phase123_simple_if.hako
|
||||
```
|
||||
|
||||
4. **エラー対応**:
|
||||
- JoinIR → MIR 変換: ✅ Phase 130 で確認済み(問題なし)
|
||||
- MIR → LLVM IR: ここでエラーが出る可能性
|
||||
- 未対応命令(BoxCall/NewBox/PHI)があれば記録
|
||||
- 軽微な修正(1-2箇所)なら対応
|
||||
- 大規模修正が必要なら Phase 132 に回す
|
||||
|
||||
5. **成功条件**:
|
||||
- ✅ JoinIR含みケース1本が LLVM で実行成功
|
||||
- または
|
||||
- ⚠️ 未対応命令を特定して docs に記録(修正は Phase 132)
|
||||
|
||||
---
|
||||
|
||||
### Task 4: ドキュメント & CURRENT_TASK 更新
|
||||
|
||||
**やること**:
|
||||
|
||||
1. **phase130_joinir_llvm_baseline.md 更新**:
|
||||
```markdown
|
||||
## Phase 131 修正内容
|
||||
|
||||
### LLVM backend re-enable
|
||||
- ✅ `cargo build --release --features llvm` 成功
|
||||
- ✅ peek_expr_block.hako: Rust VM ✅ → LLVM ✅
|
||||
|
||||
### ConsoleBox LLVM 統合
|
||||
- ✅ Python ハーネス側で println/log 外部関数実装
|
||||
- ✅ esc_dirname_smoke.hako: Rust VM ✅ → LLVM ✅
|
||||
|
||||
### JoinIR→LLVM 成功パス
|
||||
- ✅ phase123_simple_if.hako: Rust VM ✅ → LLVM ✅
|
||||
- または
|
||||
- ⚠️ 未対応: [具体的な命令名] → Phase 132 対応予定
|
||||
|
||||
### 修正後の結果表
|
||||
|
||||
| .hako ファイル | Rust VM | LLVM (Phase 130) | LLVM (Phase 131) | メモ |
|
||||
|---|---|---|---|---|
|
||||
| peek_expr_block.hako | ✅ | ❌ | ✅ | re-enable 成功 |
|
||||
| esc_dirname_smoke.hako | ❌ | ❌ | ✅ | ConsoleBox 統合 |
|
||||
| phase123_simple_if.hako | ✅ | ❌ | ✅ or ⚠️ | JoinIR パス |
|
||||
```
|
||||
|
||||
2. **CURRENT_TASK.md 更新**:
|
||||
```markdown
|
||||
### Phase 131: JoinIR → LLVM 個別修正ライン ✅
|
||||
|
||||
**完了内容**:
|
||||
- LLVM backend 最小 re-enable(peek_expr_block.hako ✅)
|
||||
- ConsoleBox LLVM 統合(esc_dirname_smoke.hako ✅)
|
||||
- JoinIR→LLVM 成功パス確立(phase123_simple_if.hako ✅ or ⚠️)
|
||||
|
||||
**修正箇所**:
|
||||
- Cargo.toml: llvm feature 確認
|
||||
- src/llvm_py/*: ConsoleBox println/log 外部関数追加
|
||||
- [その他、修正したファイルを列挙]
|
||||
|
||||
**テスト結果**:
|
||||
- 修正前: LLVM 0/7 実行可能
|
||||
- 修正後: LLVM 2-3/7 実行可能(最小成功パス確立)
|
||||
|
||||
**成果**:
|
||||
- JoinIR → LLVM 経路の基本導線が動作確認できた
|
||||
- Phase 132 以降で残りのケースを green にする準備完了
|
||||
|
||||
**次フェーズ**: Phase 132 - LLVM 未対応命令の個別対応(必要に応じて)
|
||||
```
|
||||
|
||||
3. **30-Backlog.md 更新**:
|
||||
```markdown
|
||||
### Phase 132: LLVM 未対応命令の個別対応(必要時)
|
||||
|
||||
Phase 131 で未解決の問題:
|
||||
- [Phase 131 で検出された未対応命令を列挙]
|
||||
- 例: BoxCall の特定メソッド、PHI の特殊ケース等
|
||||
|
||||
または、Phase 131 で全て解決した場合:
|
||||
- ✅ JoinIR → LLVM 第3章クローズ
|
||||
- 次: selfhost Stage-4 拡張 or 次の大型改善へ
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ✅ 完成チェックリスト(Phase 131)
|
||||
|
||||
- [ ] LLVM backend が `--features llvm` でビルド成功
|
||||
- [ ] Python/llvmlite 環境が構築済み
|
||||
- [ ] peek_expr_block.hako が LLVM で実行成功(✅)
|
||||
- [ ] esc_dirname_smoke.hako が LLVM で実行成功(✅、ConsoleBox 出力確認)
|
||||
- [ ] phase123_simple_if.hako が LLVM で実行成功(✅ or ⚠️ + 問題記録)
|
||||
- [ ] phase130_joinir_llvm_baseline.md に Phase 131 修正内容追記
|
||||
- [ ] CURRENT_TASK.md に Phase 131 完了行追加
|
||||
- [ ] 30-Backlog.md 更新(Phase 132 予告 or クローズ宣言)
|
||||
- [ ] git commit で記録
|
||||
|
||||
---
|
||||
|
||||
## 所要時間
|
||||
|
||||
**6〜8 時間程度**
|
||||
|
||||
- Task 1 (LLVM backend re-enable): 2時間
|
||||
- Task 2 (ConsoleBox 統合): 2時間
|
||||
- Task 3 (JoinIR→LLVM 成功パス): 2〜3時間
|
||||
- Task 4 (ドキュメント更新): 1時間
|
||||
|
||||
---
|
||||
|
||||
## 次のステップ
|
||||
|
||||
**Phase 132 or クローズ判断**:
|
||||
- Phase 131 で全て解決 → JoinIR→LLVM 第3章クローズ
|
||||
- Phase 131 で未解決問題あり → Phase 132 で個別対応
|
||||
|
||||
---
|
||||
|
||||
## 進捗
|
||||
|
||||
- ✅ Phase 130: JoinIR → LLVM ベースライン確立(完了)
|
||||
- 🎯 Phase 131: JoinIR → LLVM 個別修正ライン(← **現在のフェーズ**)
|
||||
- 📋 Phase 132: LLVM 未対応命令の個別対応(必要に応じて)
|
||||
Reference in New Issue
Block a user