docs(phase29ab): closeout P1-P9
This commit is contained in:
62
src/mir/builder/control_flow/plan/normalizer/common.rs
Normal file
62
src/mir/builder/control_flow/plan/normalizer/common.rs
Normal 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,
|
||||
)
|
||||
}
|
||||
@ -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,
|
||||
|
||||
@ -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![
|
||||
|
||||
Reference in New Issue
Block a user