@@ -13,10 +13,12 @@ module UntypedPlutusCore.Optimize
1313 , module UntypedPlutusCore.Transform.Optimizer
1414 ) where
1515
16+ import PlutusCore.Builtin (CostingPart )
1617import PlutusCore.Compiler.Types
1718import PlutusCore.Default qualified as PLC
1819import PlutusCore.Default.Builtins
1920import PlutusCore.Name.Unique
21+ import UntypedPlutusCore.Analysis.Builtins (BuiltinsInfo , biSemanticsVariant )
2022import UntypedPlutusCore.Core.Type
2123import UntypedPlutusCore.Optimize.Opts as Opts
2224import UntypedPlutusCore.Transform.ApplyToCase (applyToCase )
@@ -31,7 +33,9 @@ import UntypedPlutusCore.Transform.Inline (InlineHints (..), inline)
3133import UntypedPlutusCore.Transform.LetFloatOut (letFloatOut )
3234import UntypedPlutusCore.Transform.Optimizer
3335
36+ import Control.Lens ((&) , (.~) )
3437import Control.Monad
38+ import Data.Default.Class (def )
3539import Data.Either (isRight )
3640import Data.List as List (foldl' )
3741import Data.Typeable
@@ -40,7 +44,7 @@ import Data.Vector.Orphans ()
4044optimizeProgram
4145 :: forall name uni fun m a
4246 . Compiling m uni fun name a
43- => OptimizeOpts name uni fun a
47+ => OptimizeOpts name a
4448 -> BuiltinSemanticsVariant fun
4549 -> Program name uni fun a
4650 -> m (Program name uni fun a )
@@ -50,7 +54,7 @@ optimizeProgram opts builtinSemanticsVariant (Program a v t) =
5054optimizeProgramWithTrace
5155 :: forall name uni fun m a
5256 . Compiling m uni fun name a
53- => OptimizeOpts name uni fun a
57+ => OptimizeOpts name a
5458 -> BuiltinSemanticsVariant fun
5559 -> Program name uni fun a
5660 -> m (Program name uni fun a , OptimizerTrace name uni fun a )
@@ -63,7 +67,7 @@ optimizeProgramWithTrace opts builtinSemanticsVariant (Program a v t) = do
6367optimizeTerm
6468 :: forall name uni fun m a
6569 . Compiling m uni fun name a
66- => OptimizeOpts name uni fun a
70+ => OptimizeOpts name a
6771 -> BuiltinSemanticsVariant fun
6872 -> Term name uni fun a
6973 -> m (Term name uni fun a )
@@ -73,7 +77,7 @@ optimizeTerm opts builtinSemanticsVariant term =
7377termOptimizer
7478 :: forall name uni fun m a
7579 . Compiling m uni fun name a
76- => OptimizeOpts name uni fun a
80+ => OptimizeOpts name a
7781 -> BuiltinSemanticsVariant fun
7882 -> Term name uni fun a
7983 -> OptimizerT name uni fun a m (Term name uni fun a )
@@ -147,10 +151,13 @@ termOptimizer opts builtinSemanticsVariant =
147151 LetFloatOutStage ->
148152 letFloatOut
149153 ConstantFoldingStage ->
150- evaluateBuiltinsPass
151- (_ooPreserveLogging opts)
152- (_ooBuiltinsInfo opts)
153- (_ooBuiltinCostModel opts)
154+ case (eqT @ uni @ PLC. DefaultUni , eqT @ fun @ DefaultFun ) of
155+ (Just Refl , Just Refl ) ->
156+ evaluateBuiltinsPass
157+ (_ooPreserveLogging opts)
158+ ((def :: BuiltinsInfo PLC. DefaultUni DefaultFun ) & biSemanticsVariant .~ builtinSemanticsVariant)
159+ (def :: CostingPart PLC. DefaultUni DefaultFun )
160+ _ -> pure
154161
155162 caseOfCase'
156163 :: Term name uni fun a
0 commit comments