Only inline top level functions that are completely applied.
authorMatthijs Kooijman <matthijs@stdin.nl>
Wed, 31 Mar 2010 09:35:05 +0000 (11:35 +0200)
committerMatthijs Kooijman <matthijs@stdin.nl>
Wed, 31 Mar 2010 09:35:05 +0000 (11:35 +0200)
Partial function applications will be inlined in their entirety to make
them fully applied first.

cλash/CLasH/Normalize.hs

index 89b5a8118691d99d9eb63077be7f761734478146..cf33b7bb3d9aab751eb071db017975c35e7bb04d 100644 (file)
@@ -353,7 +353,7 @@ inlinenonreptop = everywhere ("inlinenonrep", inlinebind ((Monad.liftM not) . is
 -- By not inlining any other reference, we also prevent looping problems
 -- with funextract and inlinedict.
 inlinetoplevel, inlinetopleveltop :: Transform
-inlinetoplevel (LetBinding:_) expr =
+inlinetoplevel (LetBinding:_) expr | not (is_fun expr) =
   case collectArgs expr of
        (Var f, args) -> do
          body_maybe <- needsInline f