Phase 25.1b: VM undefined-value diagnostics and builder SSA helpers
This commit is contained in:
@ -10,9 +10,16 @@ impl BlockScheduleBox {
|
||||
pub fn ensure_after_phis_copy(builder: &mut MirBuilder, src: ValueId) -> Result<ValueId, String> {
|
||||
if let Some(bb) = builder.current_block {
|
||||
if let Some(&cached) = builder.schedule_mat_map.get(&(bb, src)) {
|
||||
if std::env::var("NYASH_SCHEDULE_TRACE").ok().as_deref() == Some("1") {
|
||||
eprintln!("[schedule/after-phis] bb={:?} src=%{} cached dst=%{}", bb, src.0, cached.0);
|
||||
}
|
||||
return Ok(cached);
|
||||
}
|
||||
let dst = builder.next_value_id();
|
||||
if std::env::var("NYASH_SCHEDULE_TRACE").ok().as_deref() == Some("1") {
|
||||
eprintln!("[schedule/after-phis] bb={:?} src=%{} new dst=%{} (inserting Copy) builder.current_block={:?}",
|
||||
bb, src.0, dst.0, builder.current_block);
|
||||
}
|
||||
builder.insert_copy_after_phis(dst, src)?;
|
||||
builder.schedule_mat_map.insert((bb, src), dst);
|
||||
return Ok(dst);
|
||||
@ -26,6 +33,10 @@ impl BlockScheduleBox {
|
||||
// Prefer to reuse the after-phis materialized id for this src in this block
|
||||
let base = Self::ensure_after_phis_copy(builder, src)?;
|
||||
let dst = builder.next_value_id();
|
||||
if std::env::var("NYASH_SCHEDULE_TRACE").ok().as_deref() == Some("1") {
|
||||
eprintln!("[schedule/before-call] bb={:?} src=%{} base=%{} dst=%{} (emitting Copy)",
|
||||
builder.current_block, src.0, base.0, dst.0);
|
||||
}
|
||||
builder.emit_instruction(MirInstruction::Copy { dst, src: base })?;
|
||||
// Propagate metadata to keep dst consistent with base
|
||||
crate::mir::builder::metadata::propagate::propagate(builder, base, dst);
|
||||
|
||||
Reference in New Issue
Block a user