X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2FsimplCore%2FSimplUtils.lhs;h=2664752a0b0b84304ecd85ed6429837a167ed9cb;hb=aecb51e1bbecef1872f9a3bb11856f39fa291f15;hp=fbee9847135afef666f5b28979df0853d70c2a2f;hpb=909904c56923c018b03339a85af958cfa148dbc7;p=ghc-hetmet.git diff --git a/compiler/simplCore/SimplUtils.lhs b/compiler/simplCore/SimplUtils.lhs index fbee984..2664752 100644 --- a/compiler/simplCore/SimplUtils.lhs +++ b/compiler/simplCore/SimplUtils.lhs @@ -475,9 +475,9 @@ On the other hand, it is bad not to do ANY inlining into an InlineRule, because then recursive knots in instance declarations don't get unravelled. -However, *sometimes* SimplGently must do no call-site inlining at all. -Before full laziness we must be careful not to inline wrappers, -because doing so inhibits floating +However, *sometimes* SimplGently must do no call-site inlining at all +(hence sm_inline = False). Before full laziness we must be careful +not to inline wrappers, because doing so inhibits floating e.g. ...(case f x of ...)... ==> ...(case (case x of I# x# -> fw x#) of ...)... ==> ...(case x of I# x# -> case fw x# of ...)... @@ -502,6 +502,9 @@ RULES are enabled when doing "gentle" simplification. Two reasons: to work in Template Haskell when simplifying splices, so we get simpler code for literal strings +But watch out: list fusion can prevent floating. So use phase control +to switch off those rules until after floating. + Note [Simplifying inside InlineRules] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ We must take care with simplification inside InlineRules (which come from