[GHC] #11284: Lambda-lifting fails in simple Text example
GHC
ghc-devs at haskell.org
Thu Dec 24 23:50:29 UTC 2015
#11284: Lambda-lifting fails in simple Text example
-------------------------------------+-------------------------------------
Reporter: bgamari | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 7.10.3
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
Type of failure: Runtime | Unknown/Multiple
performance bug | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by bgamari):
For what it's worth, this binding is caught by the `AnnRec` pattern of
`SetLevels.lvlBinds` by the `not (profitableFloat ...)` guard. `dest_lvl =
<1,4>` and `bind_lvl = <1,5>`. `-ffloat-all-lams` and `-ffloat-lam-
args=10` here doesn't seem to make any difference on the produced Core;
while the binding gets floated out as one would expect, later simplifier
phases later push it back in. Even after float-out, however, we still have
an inner binding,
{{{#!hs
poly_$wloop_length_s7fV
:: GHC.Prim.ByteArray# -> GHC.Prim.Int# -> GHC.Prim.Int# ->
GHC.Prim.Int# -> GHC.Prim.Int#
poly_$wloop_length_s7fV =
\ (dt_a6OV :: GHC.Prim.ByteArray#)
(a_a6OU :: GHC.Prim.Int#)
(ww_s7bR :: GHC.Prim.Int#)
(ww_s7bV :: GHC.Prim.Int#) ->
(letrec {
$wloop_length_s7fT :: GHC.Prim.Int# -> GHC.Prim.Int# ->
GHC.Prim.Int#
$wloop_length_s7fT =
\ (ww_X7c8 :: GHC.Prim.Int#) (ww_X7cd :: GHC.Prim.Int#) ->
case GHC.Prim.tagToEnum# @ Bool (GHC.Prim.>=# ww_X7cd a_a6OU)
of wild1_a6P4 {
False -> ...
True -> ww_X7c8
}; } in
$wloop_length_s7fT)
ww_s7bR ww_s7bV
}}}
Which later gets inlined back into `$wgo`.
Looking at this Core, I suppose it's plausible that there really are too
many free variables in this function to beneficially lambda-lift. It would
be nice to have a second opinion here.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/11284#comment:11>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list