diff --git a/compiler/noirc_evaluator/src/ssa/opt/inlining/inline_info.rs b/compiler/noirc_evaluator/src/ssa/opt/inlining/inline_info.rs index c98bd49d529..1ff65b30eba 100644 --- a/compiler/noirc_evaluator/src/ssa/opt/inlining/inline_info.rs +++ b/compiler/noirc_evaluator/src/ssa/opt/inlining/inline_info.rs @@ -166,6 +166,19 @@ fn compute_function_should_be_inlined( } let function = &ssa.functions[&func_id]; + let runtime = function.runtime(); + + if runtime.is_acir() { + let info = inline_infos.entry(func_id).or_default(); + info.should_inline = true; + return; + } + + let is_recursive = inline_infos.get(&func_id).is_some_and(|info| info.is_recursive); + if runtime.is_brillig() && is_recursive { + return; + } + let assert_constant_id = function.dfg.get_intrinsic(Intrinsic::AssertConstant).copied(); let static_assert_id = function.dfg.get_intrinsic(Intrinsic::StaticAssert).copied(); @@ -197,17 +210,12 @@ fn compute_function_should_be_inlined( let inline_cost = times.saturating_mul(total_weight); let retain_cost = times.saturating_mul(interface_cost) + total_weight; let net_cost = inline_cost.saturating_sub(retain_cost); - let runtime = function.runtime(); let info = inline_infos.entry(func_id).or_default(); info.contains_static_assertion = contains_static_assertion; info.weight = total_weight; info.cost = net_cost; - if runtime.is_brillig() && info.is_recursive { - return; - } - let should_inline = (net_cost < aggressiveness) || runtime.is_inline_always() || (runtime.is_no_predicates() && inline_no_predicates_functions)