phase29ao(p13): block_params for pattern3 if-phi merge join
This commit is contained in:
@ -2,8 +2,8 @@
|
||||
|
||||
## Current Focus: Phase 29ao(CorePlan composition)
|
||||
|
||||
Next: Phase 29ao P13(ValueJoin expr_result minimal usage)
|
||||
指示書: TBD
|
||||
Next: Phase 29ao P14(ValueJoin exit 実使用: Pattern2 Break after join)
|
||||
指示書: `docs/development/current/main/phases/phase-29ao/P14-VALUEJOIN-REAL-USAGE-PATTERN2-BREAK-EXITJOIN-INSTRUCTIONS.md`
|
||||
運用ルール: integration filter で phase143_* は回さない(JoinIR 回帰は phase29ae pack のみ)
|
||||
運用ルール: phase286_pattern9_* は legacy pack (SKIP) を使う
|
||||
移行道筋 SSOT: `docs/development/current/main/design/coreplan-migration-roadmap-ssot.md`
|
||||
@ -71,7 +71,12 @@ Next: Phase 29ao P13(ValueJoin expr_result minimal usage)
|
||||
**2025-12-30: Phase 29ao P12 完了** ✅
|
||||
- 目的: Pattern7 SplitScan の step join を `Frag.block_params + EdgeArgs` に移行
|
||||
- 変更: `src/mir/builder/control_flow/plan/normalizer/pattern_split_scan.rs` / `src/mir/builder/control_flow/plan/normalizer/common.rs`
|
||||
- 検証: `cargo test --release -p nyash-rust --lib` (FAILED: runtime::plugin_loader_v2::enabled::loader::library::tests::load_all_plugins_strict_fails_on_missing_library) / `cargo build --release` / `./tools/smokes/v2/run.sh --profile quick` / `./tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh`
|
||||
- 検証: `cargo test --release -p nyash-rust --lib` / `cargo build --release` / `./tools/smokes/v2/run.sh --profile quick` / `./tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh`
|
||||
|
||||
**2025-12-30: Phase 29ao P13 完了** ✅
|
||||
- 目的: Pattern3 If‑Phi の merge join を `Frag.block_params + EdgeArgs` に移行(expr_result 的な join 値の実使用)
|
||||
- 変更: `src/mir/builder/control_flow/plan/normalizer/pattern3_if_phi.rs` / `docs/development/current/main/phases/phase-29ao/P13-VALUEJOIN-REAL-USAGE-PATTERN3-IFPHI-MERGE-INSTRUCTIONS.md`
|
||||
- 検証: `cargo test --release -p nyash-rust --lib` / `cargo build --release` / `./tools/smokes/v2/run.sh --profile quick` / `./tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh`
|
||||
|
||||
**2025-12-29: Phase 29an P15 完了** ✅
|
||||
- 目的: P0–P14 の成果を closeout 形式でまとめ、次フェーズ(Phase 29ao)入口を固定
|
||||
|
||||
@ -15,8 +15,8 @@ Related:
|
||||
|
||||
- **Phase 29ao(active): CorePlan composition from Skeleton/Feature**
|
||||
- 入口: `docs/development/current/main/phases/phase-29ao/README.md`
|
||||
- 状況: P0/P1/P2/P3/P4/P5/P6/P7/P8/P9/P10/P11/P12 ✅ 完了 / Next: P13(TBD)
|
||||
- Next 指示書: TBD
|
||||
- 状況: P0–P13 ✅ 完了 / Next: P14(Pattern2 Break after join → block_params)
|
||||
- Next 指示書: `docs/development/current/main/phases/phase-29ao/P14-VALUEJOIN-REAL-USAGE-PATTERN2-BREAK-EXITJOIN-INSTRUCTIONS.md`
|
||||
|
||||
- **Phase 29af(✅ COMPLETE): Boundary hygiene / regression entrypoint / carrier layout SSOT**
|
||||
- 入口: `docs/development/current/main/phases/phase-29af/README.md`
|
||||
|
||||
@ -0,0 +1,85 @@
|
||||
---
|
||||
Status: Ready
|
||||
Scope: code(仕様不変)
|
||||
Related:
|
||||
- docs/development/current/main/phases/phase-29ao/README.md
|
||||
- docs/development/current/main/design/post-phi-final-form-ssot.md
|
||||
- docs/development/current/main/design/edgecfg-fragments.md
|
||||
- docs/development/current/main/phases/phase-29ae/README.md
|
||||
---
|
||||
|
||||
# Phase 29ao P13: ValueJoin expr_result の実使用(Pattern3 If‑Phi の merge join を block_params 化)
|
||||
|
||||
Date: 2025-12-30
|
||||
Status: Ready for execution
|
||||
Scope: 仕様不変。P10 で用意した `Frag.block_params → emit_frag() の PHI` を、**実経路(Pattern3 If‑Phi)**で 1 箇所だけ使い始める。
|
||||
|
||||
## 目的
|
||||
|
||||
- Pattern3 If‑Phi の `then/else → merge_bb` の合流(これまで `CorePhiInfo` で表現していた PHI)を、
|
||||
**`Frag.block_params + EdgeArgs(values)`** に置き換える。
|
||||
- これにより “expr_result 的な join 値(単一値)を EdgeCFG の SSOT(block params + edge-args)で表す” を、実経路で 1 件固定できる。
|
||||
|
||||
## 非目的
|
||||
|
||||
- loop header の 2 PHI(loop_var/carrier)を block_params 化する(今回は merge join の 1 本だけ)
|
||||
- DomainPlan/Planner の拡張(P13 は Normalizer の内部表現だけ差し替え)
|
||||
- 新 env var 追加、恒常ログ追加、エラー文字列変更
|
||||
|
||||
## 対象(最小)
|
||||
|
||||
- `src/mir/builder/control_flow/plan/normalizer/pattern3_if_phi.rs`
|
||||
- 現状: `CorePhiInfo` 3 本(header 2 本 + merge 1 本)
|
||||
- 変更: **merge の 1 本だけ**を block_params へ移し、`CorePhiInfo` から除去する
|
||||
|
||||
## 変換方針(SSOT)
|
||||
|
||||
### before
|
||||
|
||||
- `merge_bb` に `CorePhiInfo { dst: carrier_next, inputs: [(then_bb, carrier_then), (else_bb, carrier_else)] }`
|
||||
- `then_bb → merge_bb` / `else_bb → merge_bb` の Normal exit args は空(`CarriersOnly + values=[]`)
|
||||
|
||||
### after
|
||||
|
||||
- `Frag.block_params[merge_bb] = BlockParams { layout: ExprResultPlusCarriers, params: [carrier_next] }`
|
||||
- `then_bb → merge_bb` の Normal exit args:
|
||||
- `layout=ExprResultPlusCarriers`
|
||||
- `values=[carrier_then]`
|
||||
- `else_bb → merge_bb` の Normal exit args:
|
||||
- `layout=ExprResultPlusCarriers`
|
||||
- `values=[carrier_else]`
|
||||
|
||||
注: `ExprResultPlusCarriers` は “先頭 1 slot + carriers” の SSOT 語彙だが、P13 では **join の単一値を運ぶ最小ラベル**として使う。
|
||||
(layout/len が一致していれば、PHI は機械的に挿入できる。)
|
||||
|
||||
## 実装手順
|
||||
|
||||
### Step 1: merge PHI 1 本を CorePhiInfo から削除
|
||||
|
||||
- `pattern3_if_phi.rs` の `phis` 生成で、`block: merge_bb` の 1 件を削除する
|
||||
- `header_bb` の 2 PHI はそのまま維持する(仕様不変)
|
||||
|
||||
### Step 2: then/else の Normal args を “join 値” にする
|
||||
|
||||
- `then_bb → merge_bb` / `else_bb → merge_bb` の `EdgeStub.args` を `ExprResultPlusCarriers + values=[…]` に差し替える
|
||||
- それ以外の branch/wire の args は既存どおり空のまま
|
||||
|
||||
### Step 3: frag に block_params を追加
|
||||
|
||||
- `frag.block_params.insert(merge_bb, BlockParams { layout: ExprResultPlusCarriers, params: vec![carrier_next] })`
|
||||
- これにより P10 の `emit_frag()` が merge_bb に 1 本の PHI を挿入する
|
||||
|
||||
## 検証(必須)
|
||||
|
||||
- `cargo test --release -p nyash-rust --lib`
|
||||
- `cargo build --release`
|
||||
- `./tools/smokes/v2/run.sh --profile quick`
|
||||
- `./tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh`
|
||||
|
||||
任意(Pattern3 固定を強くしたい場合):
|
||||
- `./tools/smokes/v2/run.sh --profile integration --filter "phase118_pattern3_if_sum_vm"`
|
||||
|
||||
## コミット
|
||||
|
||||
- `git add -A`
|
||||
- `git commit -m "phase29ao(p13): use block_params for pattern3 if-phi merge join"`
|
||||
@ -0,0 +1,89 @@
|
||||
---
|
||||
Status: Ready
|
||||
Scope: code(仕様不変)
|
||||
Related:
|
||||
- docs/development/current/main/phases/phase-29ao/README.md
|
||||
- docs/development/current/main/design/post-phi-final-form-ssot.md
|
||||
- docs/development/current/main/design/edgecfg-fragments.md
|
||||
- docs/development/current/main/phases/phase-29ae/README.md
|
||||
---
|
||||
|
||||
# Phase 29ao P14: ValueJoin exit の実使用(Pattern2 Break の after join を block_params 化)
|
||||
|
||||
Date: 2025-12-30
|
||||
Status: Ready for execution
|
||||
Scope: 仕様不変。P10 の `Frag.block_params → emit_frag() の PHI` を、**exit join(loop の出口合流)**で 1 箇所だけ使い始める。
|
||||
|
||||
## 目的
|
||||
|
||||
- Pattern2 Break の loop exit 合流(`after_bb` の PHI)を **`Frag.block_params + EdgeArgs(values)`** に置き換える。
|
||||
- `CorePhiInfo` の “exit 側の PHI” を減らし、join の表現を EdgeCFG の SSOT に寄せる。
|
||||
- JoinIR 回帰 SSOT(phase29ae pack)を緑のまま維持する(Pattern2 は pack に入っている)。
|
||||
|
||||
## 非目的
|
||||
|
||||
- loop header の 2 PHI(loop_var/carrier)を block_params 化する
|
||||
- break/continue の ExitMap 合成や cleanup の拡張(今回の対象は “after join 1 本” のみ)
|
||||
- 新 env var 追加、恒常ログ追加、エラー文字列変更
|
||||
|
||||
## 対象(最小)
|
||||
|
||||
- `src/mir/builder/control_flow/plan/normalizer/pattern2_break.rs`
|
||||
- 現状: `CorePhiInfo` 3 本(header 2 本 + after 1 本)
|
||||
- 変更: **after の 1 本だけ**を block_params へ移し、`CorePhiInfo` から除去する
|
||||
|
||||
## 変換方針(SSOT)
|
||||
|
||||
### before
|
||||
|
||||
- `after_bb` に `CorePhiInfo { dst: carrier_out, inputs: [(header_bb, carrier_current), (break_then_bb, carrier_break)] }`
|
||||
- `header_bb → after_bb` の else_args は空(`CarriersOnly + values=[]`)
|
||||
- `break_then_bb → after_bb` の wire args も空
|
||||
|
||||
### after
|
||||
|
||||
- `Frag.block_params[after_bb] = BlockParams { layout: ExprResultPlusCarriers, params: [carrier_out] }`
|
||||
- `header_bb → after_bb`(loop 終了)の else_args:
|
||||
- `layout=ExprResultPlusCarriers`
|
||||
- `values=[carrier_current]`
|
||||
- `break_then_bb → after_bb` の Normal wire args:
|
||||
- `layout=ExprResultPlusCarriers`
|
||||
- `values=[carrier_break]`
|
||||
|
||||
注: `ExprResultPlusCarriers` は “先頭 1 slot + carriers” の SSOT 語彙だが、P14 では **exit join の単一値を運ぶ最小ラベル**として使う。
|
||||
|
||||
## 実装手順
|
||||
|
||||
### Step 1: after PHI 1 本を CorePhiInfo から削除
|
||||
|
||||
- `pattern2_break.rs` の `phis` 生成で、`block: after_bb` の 1 件を削除する
|
||||
- `header_bb` の 2 PHI はそのまま維持する(仕様不変)
|
||||
|
||||
### Step 2: header の loop exit edge args を “join 値” にする
|
||||
|
||||
- `header_bb` の loop condition branch(`cond_loop`)で、`else_target=after_bb` の `else_args` を差し替える
|
||||
|
||||
### Step 3: break_then → after の args を “join 値” にする
|
||||
|
||||
- `break_then_bb → after_bb` の `EdgeStub.args` を差し替える
|
||||
|
||||
### Step 4: frag に block_params を追加
|
||||
|
||||
- `frag.block_params.insert(after_bb, BlockParams { layout: ExprResultPlusCarriers, params: vec![carrier_out] })`
|
||||
- これにより P10 の `emit_frag()` が after_bb に 1 本の PHI を挿入する
|
||||
|
||||
## 検証(必須)
|
||||
|
||||
- `cargo test --release -p nyash-rust --lib`
|
||||
- `cargo build --release`
|
||||
- `./tools/smokes/v2/run.sh --profile quick`
|
||||
- `./tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh`
|
||||
|
||||
任意(Pattern2 だけ回す):
|
||||
- `./tools/smokes/v2/run.sh --profile integration --filter "phase29ab_pattern2_"`
|
||||
|
||||
## コミット
|
||||
|
||||
- `git add -A`
|
||||
- `git commit -m "phase29ao(p14): use block_params for pattern2 break exit join"`
|
||||
|
||||
@ -83,6 +83,12 @@ Gate(SSOT):
|
||||
- 指示書: `docs/development/current/main/phases/phase-29ao/P12-VALUEJOIN-FIRST-REAL-USAGE-PATTERN7-SPLITSCAN-INSTRUCTIONS.md`
|
||||
- ねらい: step join の 2 PHI を `Frag.block_params + EdgeArgs` で表現し、emit_frag() の挿入経路を 1 件固定
|
||||
|
||||
## P13: ValueJoin expr_result の実使用(Pattern3 If‑Phi の merge join を block_params 化)✅
|
||||
|
||||
- 指示書: `docs/development/current/main/phases/phase-29ao/P13-VALUEJOIN-REAL-USAGE-PATTERN3-IFPHI-MERGE-INSTRUCTIONS.md`
|
||||
- ねらい: merge join の 1 PHI を `Frag.block_params + EdgeArgs` で表現し、expr_result 的な join 値の経路を 1 件固定
|
||||
|
||||
## Next(planned)
|
||||
|
||||
- P13: ValueJoin expr_result の最小実使用(TBD)
|
||||
- P14: ValueJoin exit の実使用(Pattern2 Break の after join を block_params 化)
|
||||
- 指示書: `docs/development/current/main/phases/phase-29ao/P14-VALUEJOIN-REAL-USAGE-PATTERN2-BREAK-EXITJOIN-INSTRUCTIONS.md`
|
||||
|
||||
Reference in New Issue
Block a user