diff --git a/compiler/noirc_evaluator/src/ssa/function_builder/data_bus.rs b/compiler/noirc_evaluator/src/ssa/function_builder/data_bus.rs index 2da7c377514..0130a0b0e26 100644 --- a/compiler/noirc_evaluator/src/ssa/function_builder/data_bus.rs +++ b/compiler/noirc_evaluator/src/ssa/function_builder/data_bus.rs @@ -3,7 +3,7 @@ use std::{collections::BTreeMap, sync::Arc}; use crate::ssa::ir::{ function::RuntimeType, types::{NumericType, Type}, - value::ValueId, + value::{ValueId, resolve_value}, }; use acvm::FieldElement; use fxhash::FxHashMap as HashMap; @@ -94,6 +94,12 @@ impl DataBus { DataBus { call_data, return_data: self.return_data.map(&mut f) } } + pub(crate) fn replace_values(&mut self, values_to_replace: &HashMap) { + if !values_to_replace.is_empty() { + self.map_values_mut(|value_id| resolve_value(values_to_replace, value_id)); + } + } + /// Updates the databus values in place with the provided function pub(crate) fn map_values_mut(&mut self, mut f: impl FnMut(ValueId) -> ValueId) { for cd in self.call_data.iter_mut() { diff --git a/compiler/noirc_evaluator/src/ssa/ir/dfg.rs b/compiler/noirc_evaluator/src/ssa/ir/dfg.rs index bd627097806..15597bf6ef5 100644 --- a/compiler/noirc_evaluator/src/ssa/ir/dfg.rs +++ b/compiler/noirc_evaluator/src/ssa/ir/dfg.rs @@ -389,7 +389,7 @@ impl DataFlowGraph { block: BasicBlockId, values_to_replace: &HashMap, ) { - if self[block].terminator().is_some() { + if !values_to_replace.is_empty() && self[block].terminator().is_some() { self[block] .unwrap_terminator_mut() .map_values_mut(|value_id| resolve_value(values_to_replace, value_id)); diff --git a/compiler/noirc_evaluator/src/ssa/ir/value.rs b/compiler/noirc_evaluator/src/ssa/ir/value.rs index ee61d6965b2..0c50ba6e83e 100644 --- a/compiler/noirc_evaluator/src/ssa/ir/value.rs +++ b/compiler/noirc_evaluator/src/ssa/ir/value.rs @@ -73,7 +73,7 @@ impl Value { } } -pub(super) fn resolve_value( +pub(crate) fn resolve_value( values_to_replace: &HashMap, value_id: ValueId, ) -> ValueId { diff --git a/compiler/noirc_evaluator/src/ssa/opt/as_slice_length.rs b/compiler/noirc_evaluator/src/ssa/opt/as_slice_length.rs index 29685ac9f90..441b6aa0dc3 100644 --- a/compiler/noirc_evaluator/src/ssa/opt/as_slice_length.rs +++ b/compiler/noirc_evaluator/src/ssa/opt/as_slice_length.rs @@ -66,6 +66,8 @@ impl Function { *self.dfg[block].instructions_mut() = instruction_ids; self.dfg.replace_values_in_block_terminator(block, &values_to_replace); } + + self.dfg.data_bus.replace_values(&values_to_replace); } } diff --git a/compiler/noirc_evaluator/src/ssa/opt/remove_truncate_after_range_check.rs b/compiler/noirc_evaluator/src/ssa/opt/remove_truncate_after_range_check.rs index 58316eda686..9636f596549 100644 --- a/compiler/noirc_evaluator/src/ssa/opt/remove_truncate_after_range_check.rs +++ b/compiler/noirc_evaluator/src/ssa/opt/remove_truncate_after_range_check.rs @@ -77,6 +77,8 @@ impl Function { *self.dfg[block].instructions_mut() = instruction_ids; self.dfg.replace_values_in_block_terminator(block, &values_to_replace); } + + self.dfg.data_bus.replace_values(&values_to_replace); } }