From b6c1d3a9d0651aa25ea5f03d514a214a3347f7a4 Mon Sep 17 00:00:00 2001 From: Tom Smeding Date: Sat, 5 Apr 2025 18:26:31 +0200 Subject: Split product lets before chad --- src/CHAD/Top.hs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'src/CHAD') diff --git a/src/CHAD/Top.hs b/src/CHAD/Top.hs index ced7550..ea7449d 100644 --- a/src/CHAD/Top.hs +++ b/src/CHAD/Top.hs @@ -12,6 +12,7 @@ module CHAD.Top where import Analysis.Identity import AST +import AST.SplitLets import AST.Weaken.Auto import CHAD import CHAD.Accum @@ -87,7 +88,7 @@ chad config env (term :: Ex env t) &. #tl (d1e env)) (#d :++: #acenv :++: #tl) (#acenv :++: #d :++: #tl)) $ - freezeRet descr (drev descr VarMap.empty (identityAnalysis env term))) $ + freezeRet descr (drev descr VarMap.empty term')) $ EPair ext (EFst ext (EFst ext (EVar ext tvar IZ))) (reassembleD2E descr (EPair ext (ESnd ext (EVar ext tvar IZ)) (ESnd ext (EFst ext (EVar ext tvar IZ))))) @@ -95,7 +96,9 @@ chad config env (term :: Ex env t) | False <- chcArgArrayAccum config , Refl <- mergeEnvNoAccum env , Refl <- mergeEnvOnlyMerge env - = let ?config = config in freezeRet (mergeDescr env) (drev (mergeDescr env) VarMap.empty (identityAnalysis env term)) + = let ?config = config in freezeRet (mergeDescr env) (drev (mergeDescr env) VarMap.empty term') + where + term' = identityAnalysis env (splitLets term) chad' :: CHADConfig -> SList STy env -> Ex env t -> Ex (D2 t : env) (TPair t (Tup (D2E env))) chad' config env term -- cgit v1.2.3-70-g09d2