docs(phase-285): add P3 LLVM one-pass instructions

This commit is contained in:
2025-12-26 14:21:12 +09:00
parent fbd9c83b62
commit 72552cddfb
4 changed files with 46 additions and 5 deletions

View File

@ -0,0 +1,39 @@
# Phase 285 P3: LLVM One-PassVM/LLVM 一気通貫の最小ゲート)
目的: VM/LLVM の差分が “SKIPのまま固定” にならないように、LLVM を有効化したビルドで integration smoke を 1 回通す導線を SSOT 化する。
## 前提
- quick gate は常に緑: `./tools/smokes/v2/run.sh --profile quick`
- LLVM backend が無効なビルドでは、LLVM smoke は理由付き SKIP になる(想定挙動)。
## Step 1: LLVM を有効化してビルド
```bash
cargo build --release --features llvm
```
## Step 2: 既存 fixture を LLVM で一気通貫integration
この Phase では “新しい fixture を増やさず”、既に作った以下を使う:
- return-in-loop: `apps/tests/phase286_pattern5_return_min.hako`Phase 284 P2 再利用)
- weak upgrade success/fail: `apps/tests/phase285_weak_basic.hako`, `apps/tests/phase285_p2_weak_upgrade_fail_min.hako`
実行integration の該当 smoke をまとめて流す):
```bash
./tools/smokes/v2/run.sh --profile integration --filter "*phase284_p2_return_in_loop_llvm*|*phase285_p2_weak_upgrade_*_llvm*"
```
## Step 3: 結果の分類SSOT
- PASS: VM/LLVM parity が成立
- SKIP: 「LLVM backend not available」など、ビルド条件に起因P3 では許容。ただし “llvm feature を有効にしても SKIP” は要調査)
- FAIL: 実装差分。Phase 285 の差分分類A/B/C/Dへ追加して次の小タスクに切る
## 受け入れ条件
- `cargo build --release --features llvm` が通る
- 上記 integration filter が PASS または理由付き SKIP
- quick gate が緑154/154 PASS

View File

@ -5,6 +5,7 @@ Status: P0/P1/P2/P2.1/P2.2 ✅ COMPLETE (2025-12-26)
## Next (P0 docs-only → P1/P2)
- P0 手順書: `docs/development/current/main/phases/phase-285/P0-INSTRUCTIONS.md`
- P3 手順書LLVM one-pass: `docs/development/current/main/phases/phase-285/P3-INSTRUCTIONS.md`
- 言語レベルSSOT:
- lifecycle/weak/fini/GC: `docs/reference/language/lifecycle.md`
- `null`/`void`/truthiness: `docs/reference/language/types.md`
@ -20,10 +21,10 @@ P2 の weak-fail fixture明示 drop `x = null`)が “失敗→null” に
### Fix要旨
MIR 命令 `KeepAlive` を “スコープ維持 / 上書きdrop” の両方に使い分ける。
MIR 命令を “スコープ維持 / 上書きdrop” に分離して、言語スコープを優先しつつ hidden root を根治する。
- `drop_after=false`scope-end keepalive: スコープ終端まで値を生存維持language scope semantics
- `drop_after=true`overwrite drop: 変数上書き前の旧値を解放weak-fail を成立させる)
- `KeepAlive { values }`scope-end keepalive: スコープ終端まで値を生存維持language scope semantics
- `ReleaseStrong { values }`overwrite drop: 変数上書き前の旧値を解放weak-fail を成立させる)
- SSA `Copy` により同一 `Arc` を複数 `ValueId` が参照するため、VM は **alias も含めて** `regs` から除去する
実装の責務分離hygiene: