Phase 33-2: JoinInst::Select implementation + minimal If JoinIR lowering
Implementation:
- Add JoinInst::Select variant to JoinIR schema
- Implement Select execution in JoinIR Runner (Bool/Int cond support)
- Add Select handling in JoinIR→MIR Bridge (4-block structure)
- Create test cases (joinir_if_select_simple/local.hako)
- Add dev toggle NYASH_JOINIR_IF_SELECT=1
- Create lowering infrastructure (if_select.rs, stub for Phase 33-3)
Tests:
- 3/3 unit tests pass (test_select_true/false/int_cond)
- Integration tests pass (RC: 0)
- A/B execution verified (existing if_phi vs JoinIR Select)
Files changed:
- New: apps/tests/joinir_if_select_{simple,local}.hako
- New: src/mir/join_ir/lowering/if_select.rs
- Modified: src/mir/join_ir/{mod,json,runner,vm_bridge}.rs
- Modified: src/config/env.rs (joinir_if_select_enabled)
- Modified: docs/reference/environment-variables.md
Phase 33-3 ready: MIR pattern recognition + auto-lowering pending
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@ -151,6 +151,7 @@ JoinIR は制御構造を関数呼び出し + 継続に正規化する IR 層(
|
||||
| `NYASH_JOINIR_LOWER_FROM_MIR=1` | OFF | Any | MIRベース lowering 有効化(dev-only) |
|
||||
| `NYASH_JOINIR_LOWER_GENERIC=1` | OFF | Any | 構造ベースのみで Case-A 判定(関数名フィルタを外す) |
|
||||
| `NYASH_JOINIR_VM_BRIDGE=1` | OFF | Any | VM bridge 経路(Route B)を有効化 |
|
||||
| `NYASH_JOINIR_LLVM_EXPERIMENT=1` | OFF | llvm-harness | LLVM 経路で JoinIR を試す(L-4.3a) |
|
||||
|
||||
### JoinIR 各変数の詳細
|
||||
|
||||
@ -168,6 +169,12 @@ JoinIR は制御構造を関数呼び出し + 継続に正規化する IR 層(
|
||||
- ON: LoopRegion / LoopControlShape / LoopScopeShape の構造条件を満たすループ全般を Case-A 候補として扱う
|
||||
- 注意: Phase 32 では Stage-B / Stage-1 本線については「構造テスト・JoinIR 構造観測」用途で使うトグルであり、「意味論の本番切り替え」ではない
|
||||
|
||||
**`NYASH_JOINIR_LLVM_EXPERIMENT`** (Phase 32 L-4.3a)
|
||||
- 前提: `NYASH_JOINIR_EXPERIMENT=1` と `NYASH_LLVM_USE_HARNESS=1` が必要
|
||||
- 役割: LLVM 経路(llvmlite ハーネス)で JoinIR を経由して PHI 問題を回避する実験
|
||||
- 動作: `Main.skip/1` を JoinIR 経由で MIR' に変換し、元の PHI 問題のある関数を置換
|
||||
- 検証: Route A (MIR→LLVM) の PHI エラーが Route B (MIR→JoinIR→MIR'→LLVM) で解消されることを実証済み
|
||||
|
||||
### JoinIR 使用例
|
||||
|
||||
```bash
|
||||
@ -184,6 +191,13 @@ NYASH_JOINIR_EXPERIMENT=1 \
|
||||
NYASH_JOINIR_VM_BRIDGE=1 \
|
||||
NYASH_JOINIR_LOWER_GENERIC=1 \
|
||||
./target/release/hakorune --dump-mir apps/tests/stageb_case.hako
|
||||
|
||||
# LLVM 経路で JoinIR を使う(L-4.3a)
|
||||
# Route A (MIR→LLVM) の PHI エラーが Route B (MIR→JoinIR→MIR'→LLVM) で解消される
|
||||
env NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 \
|
||||
NYASH_DISABLE_PLUGINS=1 NYASH_LLVM_USE_HARNESS=1 \
|
||||
NYASH_JOINIR_EXPERIMENT=1 NYASH_JOINIR_LLVM_EXPERIMENT=1 \
|
||||
./target/release/hakorune --backend llvm apps/tests/minimal_ssa_skip_ws.hako
|
||||
```
|
||||
|
||||
詳細: [ENV_INVENTORY.md](../private/roadmap2/phases/phase-29-longterm-joinir-full/ENV_INVENTORY.md) / [Phase 32 README](../private/roadmap2/phases/phase-32-joinir-complete-migration/README.md)
|
||||
|
||||
Reference in New Issue
Block a user