From 4e928f39dbc28fd70a8ff7a7e89ac102b01601f5 Mon Sep 17 00:00:00 2001 From: microproofs Date: Fri, 1 Mar 2024 11:10:37 -0500 Subject: [PATCH] start adding no inline flag to functions --- crates/aiken-lang/src/gen_uplc.rs | 15 +++++++++++---- crates/uplc/src/optimize.rs | 22 ++++++++-------------- crates/uplc/src/optimize/shrinker.rs | 2 ++ 3 files changed, 21 insertions(+), 18 deletions(-) diff --git a/crates/aiken-lang/src/gen_uplc.rs b/crates/aiken-lang/src/gen_uplc.rs index 44b7f16f..5a3f71e3 100644 --- a/crates/aiken-lang/src/gen_uplc.rs +++ b/crates/aiken-lang/src/gen_uplc.rs @@ -4419,7 +4419,7 @@ impl<'a> CodeGenerator<'a> { } if !recursive { - term = term.lambda(func_name).apply(func_body); + term = term.lambda(func_name).apply(func_body.lambda(NO_INLINE)); Some(term) } else { @@ -4431,7 +4431,7 @@ impl<'a> CodeGenerator<'a> { .lambda(func_name.clone()) .apply(Term::var(func_name.clone()).apply(Term::var(func_name.clone()))) .lambda(func_name) - .apply(func_body); + .apply(func_body.lambda(NO_INLINE)); } else { // If we have parameters that remain static in each recursive call, // we can construct an *outer* function to take those in @@ -4452,7 +4452,9 @@ impl<'a> CodeGenerator<'a> { } // And finally, fold that definition into the rest of our program - term = term.lambda(&func_name).apply(outer_func_body); + term = term + .lambda(&func_name) + .apply(outer_func_body.lambda(NO_INLINE)); } Some(term) @@ -4500,7 +4502,12 @@ impl<'a> CodeGenerator<'a> { .lambda(&func_name) .apply(Term::var(&func_name).apply(Term::var(&func_name))) .lambda(&func_name) - .apply(cyclic_body.lambda("__chooser").lambda(func_name)); + .apply( + cyclic_body + .lambda("__chooser") + .lambda(func_name) + .lambda(NO_INLINE), + ); Some(term) } diff --git a/crates/uplc/src/optimize.rs b/crates/uplc/src/optimize.rs index 2c52c33f..7868a2ff 100644 --- a/crates/uplc/src/optimize.rs +++ b/crates/uplc/src/optimize.rs @@ -4,7 +4,7 @@ mod interner; pub mod shrinker; pub fn aiken_optimize_and_intern(program: Program) -> Program { - let w = program + program .builtin_force_reducer() .lambda_reducer() .inline_reducer() @@ -12,17 +12,11 @@ pub fn aiken_optimize_and_intern(program: Program) -> Program { .inline_reducer() .force_delay_reducer() .cast_data_reducer() - .convert_arithmetic_ops(); - - // println!("{:#?}", w); - - let x = w.builtin_curry_reducer(); - - // println!("{:#?}", x); - - let y = x.lambda_reducer().inline_reducer().builtin_curry_reducer(); - - // println!("{:#?}", y); - - y.lambda_reducer().inline_reducer() + .convert_arithmetic_ops() + .builtin_curry_reducer() + .lambda_reducer() + .inline_reducer() + .builtin_curry_reducer() + .lambda_reducer() + .inline_reducer() } diff --git a/crates/uplc/src/optimize/shrinker.rs b/crates/uplc/src/optimize/shrinker.rs index b554b90f..dd60f148 100644 --- a/crates/uplc/src/optimize/shrinker.rs +++ b/crates/uplc/src/optimize/shrinker.rs @@ -86,6 +86,8 @@ impl Default for IdGen { } } +pub const NO_INLINE: &str = "__no_inline__"; + #[derive(PartialEq, PartialOrd, Default, Debug, Clone)] pub struct VarLookup { found: bool,