docs(phase29ab): closeout P1-P9

This commit is contained in:
2025-12-28 16:36:15 +09:00
parent c397016ac7
commit 209b04d808
12 changed files with 395 additions and 280 deletions

View File

@ -0,0 +1,62 @@
use crate::mir::basic_block::EdgeArgs;
use crate::mir::builder::control_flow::edgecfg::api::{compose, EdgeStub, ExitKind, Frag};
use crate::mir::join_ir::lowering::inline_boundary::JumpArgsLayout;
use std::collections::BTreeMap;
pub(super) fn empty_args() -> EdgeArgs {
EdgeArgs {
layout: JumpArgsLayout::CarriersOnly,
values: vec![],
}
}
pub(super) fn normal_exit_frag(
entry: crate::mir::BasicBlockId,
args: &EdgeArgs,
) -> Frag {
let mut exits = BTreeMap::new();
exits.insert(
ExitKind::Normal,
vec![EdgeStub {
from: entry,
kind: ExitKind::Normal,
target: None,
args: args.clone(),
}],
);
Frag {
entry,
exits,
wires: vec![],
branches: vec![],
}
}
pub(super) fn build_body_if_frag(
body_bb: crate::mir::BasicBlockId,
cond: crate::mir::ValueId,
then_bb: crate::mir::BasicBlockId,
else_bb: crate::mir::BasicBlockId,
step_bb: crate::mir::BasicBlockId,
empty_args: &EdgeArgs,
) -> Frag {
let then_frag = normal_exit_frag(then_bb, empty_args);
let else_frag = normal_exit_frag(else_bb, empty_args);
let step_frag = Frag {
entry: step_bb,
exits: BTreeMap::new(),
wires: vec![],
branches: vec![],
};
compose::if_(
body_bb,
cond,
then_frag,
empty_args.clone(),
else_frag,
empty_args.clone(),
step_frag,
)
}

View File

@ -21,6 +21,7 @@ mod pattern8_bool_predicate_scan;
mod pattern9_accum_const_loop;
mod pattern_scan_with_init;
mod pattern_split_scan;
mod common;
use super::{
CoreEffectPlan, CoreLoopPlan, CorePhiInfo, CorePlan, DomainPlan, Pattern1SimpleWhilePlan,

View File

@ -1,11 +1,10 @@
use super::{CoreEffectPlan, CoreLoopPlan, CorePhiInfo, CorePlan, SplitScanPlan};
use crate::mir::basic_block::EdgeArgs;
use crate::mir::builder::control_flow::edgecfg::api::{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;
use crate::mir::{BinaryOp, CompareOp, ConstValue, Effect, EffectMask, MirType};
use std::collections::BTreeMap;
use super::common::{build_body_if_frag, empty_args};
impl super::PlanNormalizer {
/// SplitScan → CorePlan 変換
@ -21,8 +20,6 @@ impl super::PlanNormalizer {
ctx: &LoopPatternContext,
) -> Result<CorePlan, String> {
use crate::mir::builder::control_flow::joinir::trace;
use crate::mir::builder::control_flow::edgecfg::api::compose;
let trace_logger = trace::trace();
let debug = ctx.debug;
@ -279,61 +276,9 @@ impl super::PlanNormalizer {
];
// Step 9.5: Build Frags for compose::if_() (Phase 281 P0)
let empty_args = EdgeArgs {
layout: JumpArgsLayout::CarriersOnly,
values: vec![],
};
let empty_args = empty_args();
let mut then_exits = BTreeMap::new();
then_exits.insert(
ExitKind::Normal,
vec![EdgeStub {
from: then_bb,
kind: ExitKind::Normal,
target: None,
args: empty_args.clone(),
}],
);
let then_frag = Frag {
entry: then_bb,
exits: then_exits,
wires: vec![],
branches: vec![],
};
let mut else_exits = BTreeMap::new();
else_exits.insert(
ExitKind::Normal,
vec![EdgeStub {
from: else_bb,
kind: ExitKind::Normal,
target: None,
args: empty_args.clone(),
}],
);
let else_frag = Frag {
entry: else_bb,
exits: else_exits,
wires: vec![],
branches: vec![],
};
let step_frag = Frag {
entry: step_bb,
exits: BTreeMap::new(),
wires: vec![],
branches: vec![],
};
let body_if_frag = compose::if_(
body_bb,
cond_match,
then_frag,
empty_args.clone(),
else_frag,
empty_args.clone(),
step_frag,
);
let body_if_frag = build_body_if_frag(body_bb, cond_match, then_bb, else_bb, step_bb, &empty_args);
// Step 10: Build block_effects
let block_effects = vec![