Don't inline a loop breaker, even if it has an INLINE pragma
authorsimonpj@microsoft.com <unknown>
Tue, 10 Nov 2009 17:20:17 +0000 (17:20 +0000)
committersimonpj@microsoft.com <unknown>
Tue, 10 Nov 2009 17:20:17 +0000 (17:20 +0000)
We preserve the InlineRule on loop breakers, in the hope that they'll
stop being a loop breaker later.  So don't inline them!

compiler/simplCore/SimplUtils.lhs

index dfe9e83..1511a2f 100644 (file)
@@ -777,6 +777,10 @@ postInlineUnconditionally env top_lvl bndr occ_info rhs unfolding
 
 activeInline :: SimplEnv -> OutId -> Bool
 activeInline env id
+  | isNonRuleLoopBreaker (idOccInfo id)          -- Things with an INLINE pragma may have 
+                                         -- an unfolding *and* be a loop breaker
+  = False                                -- (maybe the knot is not yet untied)
+  | otherwise
   = case getMode env of
       SimplGently { sm_inline = inlining_on } 
          -> inlining_on && isEarlyActive act