FloutOut.wrapTick: don't forget to tick the args of a constructor app
authorSimon Marlow <marlowsd@gmail.com>
Thu, 2 Aug 2012 10:53:58 +0000 (11:53 +0100)
committerSimon Marlow <marlowsd@gmail.com>
Thu, 2 Aug 2012 10:57:30 +0000 (11:57 +0100)
Thanks to Peter Wortmann for pointing out this bug.

compiler/coreSyn/CoreUtils.lhs
compiler/simplCore/FloatOut.lhs

index 7815aac..12a3fb3 100644 (file)
@@ -10,7 +10,7 @@ Utility functions on @Core@ syntax
 module CoreUtils (
         -- * Constructing expressions
         mkCast,
-        mkTick, mkTickNoHNF,
+        mkTick, mkTickNoHNF, tickHNFArgs,
         bindNonRec, needsCaseBinding,
         mkAltExpr,
 
index 93397d8..ac62f41 100644 (file)
@@ -562,7 +562,7 @@ wrapTick t (FB tops defns)
     wrap_one (FloatLet bind)      = FloatLet (wrap_bind bind)
     wrap_one (FloatCase e b c bs) = FloatCase (maybe_tick e) b c bs
 
-    maybe_tick e | exprIsHNF e = e
+    maybe_tick e | exprIsHNF e = tickHNFArgs t e
                  | otherwise   = mkTick t e
       -- we don't need to wrap a tick around an HNF when we float it
       -- outside a tick: that is an invariant of the tick semantics