aboutsummaryrefslogtreecommitdiff
path: root/src/Simplify.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Simplify.hs')
-rw-r--r--src/Simplify.hs15
1 files changed, 15 insertions, 0 deletions
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' $