Do a bit more CSE
authorSimon Peyton Jones <simonpj@microsoft.com>
Mon, 31 Jul 2017 10:00:33 +0000 (11:00 +0100)
committerSimon Peyton Jones <simonpj@microsoft.com>
Mon, 31 Jul 2017 12:36:49 +0000 (13:36 +0100)
I discovered that in

   let x = MkT y in ....(MKT y |> co)....

we weren't CSE'ing the (MkT y).  The fix is easy.

compiler/simplCore/CSE.hs

index 83f5ee6..ccbdf35 100644 (file)
@@ -454,7 +454,7 @@ cseExpr _   (Lit lit)             = Lit lit
 cseExpr env (Var v)               = lookupSubst env v
 cseExpr env (App f a)             = App (cseExpr env f) (tryForCSE env a)
 cseExpr env (Tick t e)            = Tick t (cseExpr env e)
 cseExpr env (Var v)               = lookupSubst env v
 cseExpr env (App f a)             = App (cseExpr env f) (tryForCSE env a)
 cseExpr env (Tick t e)            = Tick t (cseExpr env e)
-cseExpr env (Cast e co)           = Cast (cseExpr env e) (substCo (csEnvSubst env) co)
+cseExpr env (Cast e co)           = Cast (tryForCSE env e) (substCo (csEnvSubst env) co)
 cseExpr env (Lam b e)             = let (env', b') = addBinder env b
                                     in Lam b' (cseExpr env' e)
 cseExpr env (Let bind e)          = let (env', bind') = cseBind NotTopLevel env bind
 cseExpr env (Lam b e)             = let (env', b') = addBinder env b
                                     in Lam b' (cseExpr env' e)
 cseExpr env (Let bind e)          = let (env', bind') = cseBind NotTopLevel env bind