phase29ao(p14): use block_params for pattern2 break exit join
This commit is contained in:
@ -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制約は維持)。
|
||||
|
||||
|
||||
@ -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`
|
||||
|
||||
@ -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`
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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)",
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user