From 94582311279e7870c1528bb69c9b2fd4cd9b6a7a Mon Sep 17 00:00:00 2001 From: tomoaki Date: Tue, 30 Dec 2025 08:09:40 +0900 Subject: [PATCH] phase29ao(p14): use block_params for pattern2 break exit join --- CURRENT_TASK.md | 10 ++--- docs/development/current/main/10-Now.md | 9 ++++- docs/development/current/main/30-Backlog.md | 4 +- .../current/main/phases/phase-29ao/README.md | 8 +++- .../plan/normalizer/pattern2_break.rs | 39 ++++++++++++------- 5 files changed, 46 insertions(+), 24 deletions(-) diff --git a/CURRENT_TASK.md b/CURRENT_TASK.md index 6170338c..8553eaa3 100644 --- a/CURRENT_TASK.md +++ b/CURRENT_TASK.md @@ -18,11 +18,8 @@ Scope: Repo root の旧リンク互換。現行の入口は `docs/development/cu **CorePlan migration 道筋 SSOT** `docs/development/current/main/design/coreplan-migration-roadmap-ssot.md` が移行タスクの Done 判定の入口。 -**Next implementation (Phase 29ao P14)** -ValueJoin exit の実使用を 1 件固定(Pattern2 Break の after join を `Frag.block_params + EdgeArgs` 化)。 - -- 指示書: `docs/development/current/main/phases/phase-29ao/P14-VALUEJOIN-REAL-USAGE-PATTERN2-BREAK-EXITJOIN-INSTRUCTIONS.md` -- Gate: `./tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh` +**Next implementation (Phase 29ao P15)** +TBD **2025-12-29: Phase 29am P0 COMPLETE (CorePlan If/Exit lowerer/verifier)** CorePlan の If/Exit を lowerer/verifier で扱えるようにして、CorePlan 移行の土台を作った。 @@ -30,6 +27,9 @@ CorePlan の If/Exit を lowerer/verifier で扱えるようにして、CorePlan **2025-12-30: Phase 29ao P12 COMPLETE (Pattern7 SplitScan step join via block_params)** Pattern7 SplitScan の step join を `Frag.block_params + EdgeArgs` で表現し、CorePhiInfo の step PHI を撤去した。 +**2025-12-30: Phase 29ao P14 COMPLETE (Pattern2 Break exit join via block_params)** +Pattern2 Break の after join を `Frag.block_params + EdgeArgs` で表現し、CorePhiInfo の after PHI を撤去した。 + **2025-12-29: Phase 29am P1 COMPLETE (CoreLoopPlan.body Seq flatten)** CoreLoopPlan.body の `Seq([Effect...])` を再帰で flatten して emit できるようにした(Effect-only制約は維持)。 diff --git a/docs/development/current/main/10-Now.md b/docs/development/current/main/10-Now.md index f6bff863..d3e02610 100644 --- a/docs/development/current/main/10-Now.md +++ b/docs/development/current/main/10-Now.md @@ -2,8 +2,8 @@ ## Current Focus: Phase 29ao(CorePlan composition) -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` +Next: Phase 29ao P15(TBD) +指示書: TBD 運用ルール: integration filter で phase143_* は回さない(JoinIR 回帰は phase29ae pack のみ) 運用ルール: phase286_pattern9_* は legacy pack (SKIP) を使う 移行道筋 SSOT: `docs/development/current/main/design/coreplan-migration-roadmap-ssot.md` @@ -78,6 +78,11 @@ Next: Phase 29ao P14(ValueJoin exit 実使用: Pattern2 Break after 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-30: Phase 29ao P14 完了** ✅ +- 目的: Pattern2 Break の after join を `Frag.block_params + EdgeArgs` に移行 +- 変更: `src/mir/builder/control_flow/plan/normalizer/pattern2_break.rs` / `docs/development/current/main/phases/phase-29ao/P14-VALUEJOIN-REAL-USAGE-PATTERN2-BREAK-EXITJOIN-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)入口を固定 - 変更: `docs/development/current/main/phases/phase-29an/README.md` / `docs/development/current/main/10-Now.md` / `docs/development/current/main/30-Backlog.md` / `CURRENT_TASK.md` diff --git a/docs/development/current/main/30-Backlog.md b/docs/development/current/main/30-Backlog.md index 19b94e18..1b25e9da 100644 --- a/docs/development/current/main/30-Backlog.md +++ b/docs/development/current/main/30-Backlog.md @@ -15,8 +15,8 @@ Related: - **Phase 29ao(active): CorePlan composition from Skeleton/Feature** - 入口: `docs/development/current/main/phases/phase-29ao/README.md` - - 状況: 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` + - 状況: P0–P14 ✅ 完了 / Next: P15(TBD) + - Next 指示書: TBD - **Phase 29af(✅ COMPLETE): Boundary hygiene / regression entrypoint / carrier layout SSOT** - 入口: `docs/development/current/main/phases/phase-29af/README.md` diff --git a/docs/development/current/main/phases/phase-29ao/README.md b/docs/development/current/main/phases/phase-29ao/README.md index b2a7530a..03001d13 100644 --- a/docs/development/current/main/phases/phase-29ao/README.md +++ b/docs/development/current/main/phases/phase-29ao/README.md @@ -88,7 +88,11 @@ Gate(SSOT): - 指示書: `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 件固定 +## 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` +- ねらい: after join の 1 PHI を `Frag.block_params + EdgeArgs` で表現し、exit join の経路を 1 件固定 + ## Next(planned) -- 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` +- P15: TBD diff --git a/src/mir/builder/control_flow/plan/normalizer/pattern2_break.rs b/src/mir/builder/control_flow/plan/normalizer/pattern2_break.rs index ca301e47..c3484ef1 100644 --- a/src/mir/builder/control_flow/plan/normalizer/pattern2_break.rs +++ b/src/mir/builder/control_flow/plan/normalizer/pattern2_break.rs @@ -1,7 +1,9 @@ use super::helpers::create_phi_bindings; use super::{CoreEffectPlan, CoreLoopPlan, CorePhiInfo, CorePlan, Pattern2BreakPlan}; use crate::mir::basic_block::EdgeArgs; -use crate::mir::builder::control_flow::edgecfg::api::{BranchStub, EdgeStub, ExitKind, Frag}; +use crate::mir::builder::control_flow::edgecfg::api::{ + BlockParams, BranchStub, EdgeStub, ExitKind, Frag, +}; use crate::mir::builder::control_flow::joinir::patterns::router::LoopPatternContext; use crate::mir::builder::MirBuilder; use crate::mir::join_ir::lowering::inline_boundary::JumpArgsLayout; @@ -22,7 +24,7 @@ impl super::PlanNormalizer { /// (optional ↓ /// update) header (back-edge) /// ↓ - /// after_bb(PHI: carrier_out) + /// after_bb(join: carrier_out) /// ↑ /// header (natural exit when !cond_loop) /// ``` @@ -195,7 +197,7 @@ impl super::PlanNormalizer { (step_bb, step_effects), ]; - // Step 10: Build PHIs + // Step 10: Build PHIs (header only) let phis = vec![ CorePhiInfo { block: header_bb, @@ -209,12 +211,6 @@ impl super::PlanNormalizer { inputs: vec![(preheader_bb, carrier_init), (step_bb, carrier_step)], tag: format!("carrier_{}", parts.carrier_var), }, - CorePhiInfo { - block: after_bb, - dst: carrier_out, - inputs: vec![(header_bb, carrier_current), (break_then_bb, carrier_break)], - tag: format!("after_{}", parts.carrier_var), - }, ]; // Step 11: Build Frag @@ -222,6 +218,14 @@ impl super::PlanNormalizer { layout: JumpArgsLayout::CarriersOnly, values: vec![], }; + let after_join_args = EdgeArgs { + layout: JumpArgsLayout::ExprResultPlusCarriers, + values: vec![carrier_current], + }; + let break_join_args = EdgeArgs { + layout: JumpArgsLayout::ExprResultPlusCarriers, + values: vec![carrier_break], + }; let branches = vec![ BranchStub { @@ -230,7 +234,7 @@ impl super::PlanNormalizer { then_target: body_bb, else_target: after_bb, then_args: empty_args.clone(), - else_args: empty_args.clone(), + else_args: after_join_args, }, BranchStub { from: body_bb, @@ -247,7 +251,7 @@ impl super::PlanNormalizer { from: break_then_bb, kind: ExitKind::Normal, target: Some(after_bb), - args: empty_args.clone(), + args: break_join_args, }, EdgeStub { from: step_bb, @@ -257,9 +261,18 @@ impl super::PlanNormalizer { }, ]; + let mut block_params = BTreeMap::new(); + block_params.insert( + after_bb, + BlockParams { + layout: JumpArgsLayout::ExprResultPlusCarriers, + params: vec![carrier_out], + }, + ); + let frag = Frag { entry: header_bb, - block_params: BTreeMap::new(), + block_params, exits: BTreeMap::new(), wires, branches, @@ -291,7 +304,7 @@ impl super::PlanNormalizer { if debug { trace_logger.debug( "normalizer/pattern2_break", - "CorePlan construction complete (6 blocks, 3 PHIs, after_bb PHI is key!)", + "CorePlan construction complete (6 blocks, 2 PHIs, after_bb uses block_params)", ); }