Let inlinetoplevel use getNormalized_maybe.
authorMatthijs Kooijman <matthijs@stdin.nl>
Fri, 5 Mar 2010 17:20:51 +0000 (18:20 +0100)
committerMatthijs Kooijman <matthijs@stdin.nl>
Mon, 8 Mar 2010 10:38:49 +0000 (11:38 +0100)
This makes the transformation slightly simpler and prepares it for
inlining dictionaries next.

cλash/CLasH/Normalize.hs

index 82cc89b3c0b5f80f0299a002f0cee42e9a755b23..91033b5b1b9bc84c928fd86129362c3d1e5b2f71 100644 (file)
@@ -338,23 +338,19 @@ inlinetoplevel, inlinetopleveltop :: Transform
 -- Any system name is candidate for inlining. Never inline user-defined
 -- functions, to preserve structure.
 inlinetoplevel expr@(Var f) | not $ isUserDefined f = do
-  norm <- isNormalizeable f
-  -- See if this is a top level binding for which we have a body
-  body_maybe <- Trans.lift $ getGlobalBind f
-  if norm && Maybe.isJust body_maybe
-    then do
-      -- Get the normalized version
-      norm <- Trans.lift $ getNormalized f
-      if needsInline norm 
-        then do
-          -- Regenerate all uniques in the to-be-inlined expression
-          norm_uniqued <- Trans.lift $ genUniques norm
-          change norm_uniqued
-        else
-          return expr
-    else
+  norm_maybe <- Trans.lift $ getNormalized_maybe f
+  case norm_maybe of
       -- No body or not normalizeable.
-      return expr
+    Nothing -> return expr
+    Just norm -> if needsInline norm then do
+        -- Regenerate all uniques in the to-be-inlined expression
+        norm_uniqued <- Trans.lift $ genUniques norm
+        -- And replace the variable reference with the unique'd body.
+        change norm_uniqued
+      else
+        -- No need to inline
+        return expr
+
 -- Leave all other expressions unchanged
 inlinetoplevel expr = return expr
 inlinetopleveltop = everywhere ("inlinetoplevel", inlinetoplevel)