Revert "Limit flattenLets to non-recursive lets only."
authorMatthijs Kooijman <m.kooijman@student.utwente.nl>
Mon, 17 Aug 2009 09:42:37 +0000 (11:42 +0200)
committerMatthijs Kooijman <m.kooijman@student.utwente.nl>
Mon, 17 Aug 2009 09:43:41 +0000 (11:43 +0200)
This reverts commit de2b45772572a90429ffe41a86a7ba08e7de6d4b.

cλash/CLasH/Utils/Core/CoreTools.hs

index 3ba262251c54131b6028b216e7ff248bc09eb18d..094b70294ceabcca23e722df69c98e93e1bd85db 100644 (file)
@@ -299,17 +299,19 @@ hasStateType expr = case getType expr of
   Just ty -> isStateType ty
 
 
--- | Flattens nested non-recursive lets into a single list of bindings. The
--- expression passed does not have to be a let expression, if it isn't an
--- empty list of bindings is returned.
+-- | Flattens nested lets into a single list of bindings. The expression
+--   passed does not have to be a let expression, if it isn't an empty list of
+--   bindings is returned.
 flattenLets ::
   CoreSyn.CoreExpr -- ^ The expression to flatten.
   -> ([Binding], CoreSyn.CoreExpr) -- ^ The bindings and resulting expression.
-flattenLets (CoreSyn.Let (CoreSyn.NonRec bndr expr) res) =
-  ((bndr, expr):bindings, res')
+flattenLets (CoreSyn.Let binds expr) = 
+  (bindings ++ bindings', expr')
   where
     -- Recursively flatten the contained expression
-    (bindings, res') = flattenLets res
+    (bindings', expr') =flattenLets expr
+    -- Flatten our own bindings to remove the Rec / NonRec constructors
+    bindings = CoreSyn.flattenBinds [binds]
 flattenLets expr = ([], expr)
 
 -- | Create bunch of nested non-recursive let expressions from the given