Make letmerge work with non-recursive lets.
authorMatthijs Kooijman <m.kooijman@student.utwente.nl>
Fri, 14 Aug 2009 13:43:09 +0000 (15:43 +0200)
committerMatthijs Kooijman <m.kooijman@student.utwente.nl>
Fri, 14 Aug 2009 13:43:09 +0000 (15:43 +0200)
cλash/CLasH/Normalize.hs

index 53bec0278f492c759fa069c4faaa96e698a7952b..0995dbd1fa9653708892d790e0fd4359c8f35579 100644 (file)
@@ -228,9 +228,10 @@ letremoveunusedtop = everywhere ("letremoveunused", letremoveunused)
 -- TODO: We would very much like to use GHC's CSE module for this, but that
 -- doesn't track if something changed or not, so we can't use it properly.
 letmerge, letmergetop :: Transform
-letmerge expr@(Let (Rec binds) res) = do
+letmerge expr@(Let _ _) = do
+  let (binds, res) = flattenLets expr
   binds' <- domerge binds
-  return (Let (Rec binds') res)
+  return $ MkCore.mkCoreLets (map (uncurry NonRec) binds') res
   where
     domerge :: [(CoreBndr, CoreExpr)] -> TransformMonad [(CoreBndr, CoreExpr)]
     domerge [] = return []