diff --git a/compiler/mono/src/decision_tree.rs b/compiler/mono/src/decision_tree.rs index d949172117..c033449cb0 100644 --- a/compiler/mono/src/decision_tree.rs +++ b/compiler/mono/src/decision_tree.rs @@ -419,7 +419,6 @@ fn gather_edges<'a>( let check = guarded_tests_are_complete(&relevant_tests); - // TODO remove clone let all_edges = relevant_tests .into_iter() .map(|t| edges_for(path, &branches, t)) @@ -1055,9 +1054,19 @@ fn small_defaults(branches: &[Branch], path: &[PathInstruction]) -> usize { } fn small_branching_factor(branches: &[Branch], path: &[PathInstruction]) -> usize { - let (edges, fallback) = gather_edges(branches.to_vec(), path); + // a specialized version of gather_edges that just counts the number of options - edges.len() + (if fallback.is_empty() { 0 } else { 1 }) + let relevant_tests = tests_at_path(path, branches); + + let check = guarded_tests_are_complete(&relevant_tests); + + let fallbacks = if check { + false + } else { + branches.iter().any(|b| is_irrelevant_to(path, b)) + }; + + relevant_tests.len() + (if !fallbacks { 0 } else { 1 }) } #[derive(Clone, Debug, PartialEq)]