From fb2ca0e3e0b8d659eb02c432c91a528587eb3af5 Mon Sep 17 00:00:00 2001 From: microproofs Date: Fri, 29 Sep 2023 16:31:28 -0400 Subject: [PATCH] inline is actually cheaper in a lot of cases --- crates/uplc/src/optimize/shrinker.rs | 22 +--------------------- 1 file changed, 1 insertion(+), 21 deletions(-) diff --git a/crates/uplc/src/optimize/shrinker.rs b/crates/uplc/src/optimize/shrinker.rs index dcb0fe44..751a35c6 100644 --- a/crates/uplc/src/optimize/shrinker.rs +++ b/crates/uplc/src/optimize/shrinker.rs @@ -334,9 +334,7 @@ fn inline_single_occurrence_reducer(term: &mut Term) { let occurrences = var_occurrences(body, parameter_name.clone()); let delays = delayed_execution(body.as_ref()); - let recursive = is_recursive(arg); - // We don't want to inline recursive functions - if occurrences == 1 && !recursive { + if occurrences == 1 { if delays == 0 { *term = substitute_term(body.as_ref(), parameter_name.clone(), arg); } else if let Term::Var(_) @@ -525,24 +523,6 @@ fn var_occurrences(term: &Term, search_for: Rc) -> usize { } } -fn is_recursive(term: &Term) -> bool { - match term { - Term::Delay(body) => is_recursive(body.as_ref()), - Term::Lambda { body, .. } => is_recursive(body.as_ref()), - Term::Apply { function, argument } => { - if let (Term::Var(a), Term::Var(b)) = (function.as_ref(), argument.as_ref()) { - a.as_ref() == b.as_ref() - } else { - is_recursive(function.as_ref()) || is_recursive(argument.as_ref()) - } - } - Term::Force(x) => is_recursive(x.as_ref()), - Term::Case { .. } => todo!(), - Term::Constr { .. } => todo!(), - _ => false, - } -} - fn delayed_execution(term: &Term) -> usize { match term { Term::Delay(body) => 1 + delayed_execution(body.as_ref()),