From e82b1eed9f9d749afb1e47f0bc8f35e806fda9f6 Mon Sep 17 00:00:00 2001 From: Tom Smeding Date: Wed, 5 Nov 2025 22:29:41 +0100 Subject: Some extra Map optimisations --- src/Simplify.hs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'src/Simplify.hs') diff --git a/src/Simplify.hs b/src/Simplify.hs index 1889adc..19d0c17 100644 --- a/src/Simplify.hs +++ b/src/Simplify.hs @@ -185,6 +185,21 @@ simplify'Rec = \case ELet _ e1 (ENil _) | STNil <- typeOf e1 -> acted $ simplify' e1 + -- map (\_ -> x) e ~> build (shape e) (\_ -> x) + EMap _ e1 e2 + | Occ Zero Zero <- occCount IZ e1 + , STArr n _ <- typeOf e2 -> + acted $ simplify' $ + EBuild ext n (EShape ext e2) $ + subst (\_ t' -> \case IZ -> error "Unused variable was used" + IS i -> EVar ext t' (IS i)) + e1 + + -- vertical fusion + EMap _ e1 (EMap _ e2 e3) -> + acted $ simplify' $ + EMap ext (ELet ext e2 (weakenExpr (WCopy WSink) e1)) e3 + -- projection down-commuting EFst _ (ECase _ e1 e2 e3) -> acted $ simplify' $ -- cgit v1.2.3-70-g09d2