diff --git a/src/mir/join_ir_vm_bridge/joinir_block_converter.rs b/src/mir/join_ir_vm_bridge/joinir_block_converter.rs index 2c52b494..a0d0e8e2 100644 --- a/src/mir/join_ir_vm_bridge/joinir_block_converter.rs +++ b/src/mir/join_ir_vm_bridge/joinir_block_converter.rs @@ -13,6 +13,7 @@ use crate::mir::types::ConstValue; use std::collections::BTreeMap; use super::block_allocator::BlockAllocator; // Phase 269 P1.2+: Use BlockAllocator for deduplication +use super::merge_variable_handler::{emit_merge_copies, MergeBranch}; // Phase 269 P1.2+: Merge copy deduplication use super::{convert_mir_like_inst, join_func_name, JoinIrVmBridgeError}; fn log_dbg(message: impl AsRef) { @@ -652,13 +653,7 @@ impl JoinIrBlockConverter { // then block: copy then_val let mut then_block_obj = crate::mir::BasicBlock::new(then_block); - for merge in merges { - then_block_obj.instructions.push(MirInstruction::Copy { - dst: merge.dst, - src: merge.then_val, - }); - then_block_obj.instruction_spans.push(Span::unknown()); - } + emit_merge_copies(&mut then_block_obj, merges, MergeBranch::Then); then_block_obj.set_terminator(MirInstruction::Jump { target: merge_block, edge_args: None, @@ -667,13 +662,7 @@ impl JoinIrBlockConverter { // else block: copy else_val let mut else_block_obj = crate::mir::BasicBlock::new(else_block); - for merge in merges { - else_block_obj.instructions.push(MirInstruction::Copy { - dst: merge.dst, - src: merge.else_val, - }); - else_block_obj.instruction_spans.push(Span::unknown()); - } + emit_merge_copies(&mut else_block_obj, merges, MergeBranch::Else); else_block_obj.set_terminator(MirInstruction::Jump { target: merge_block, edge_args: None, @@ -779,13 +768,7 @@ impl JoinIrBlockConverter { // then block let mut then_block_obj = crate::mir::BasicBlock::new(then_block); - for merge in merges { - then_block_obj.instructions.push(MirInstruction::Copy { - dst: merge.dst, - src: merge.then_val, - }); - then_block_obj.instruction_spans.push(Span::unknown()); - } + emit_merge_copies(&mut then_block_obj, merges, MergeBranch::Then); then_block_obj.set_terminator(MirInstruction::Jump { target: merge_block, edge_args: None, @@ -794,13 +777,7 @@ impl JoinIrBlockConverter { // else block let mut else_block_obj = crate::mir::BasicBlock::new(final_else_block); - for merge in merges { - else_block_obj.instructions.push(MirInstruction::Copy { - dst: merge.dst, - src: merge.else_val, - }); - else_block_obj.instruction_spans.push(Span::unknown()); - } + emit_merge_copies(&mut else_block_obj, merges, MergeBranch::Else); else_block_obj.set_terminator(MirInstruction::Jump { target: merge_block, edge_args: None,