[GHC] #9660: unnecessary indirect jump when returning a case scrutinee
GHC
ghc-devs at haskell.org
Wed Oct 22 14:57:43 UTC 2014
#9660: unnecessary indirect jump when returning a case scrutinee
-------------------------------------+-------------------------------------
Reporter: rwbarton | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 7.8.3
(CodeGen) | Keywords:
Resolution: | Architecture: Unknown/Multiple
Operating System: | Difficulty: Unknown
Unknown/Multiple | Blocked By:
Type of failure: Runtime | Related Tickets:
performance bug |
Test Case: |
Blocking: |
Differential Revisions: |
-------------------------------------+-------------------------------------
Comment (by rwbarton):
Replying to [comment:6 schyler]:
> Could you show the core difference (for us who don't really understand
the original ticket that well)?
There is no difference at the Core level. In either case the core is
{{{
Test.f =
\ (x_arU :: GHC.Types.Int) ->
case x_arU of wild_a10j { GHC.Types.I# x1_a10l ->
case GHC.Prim.tagToEnum# @ GHC.Types.Bool (GHC.Prim.<# x1_a10l 0)
of _ [Occ=Dead] {
GHC.Types.False -> GHC.Types.I# (GHC.Prim.+# x1_a10l 1);
GHC.Types.True -> wild_a10j
}
}
}}}
The difference is that in the generated Cmm, we don't re-enter `wild_a10j`
in the True case, since we know it has already been reduced to WHNF by the
first `case`.
> Also, if you dump and attach the ASM I'd be happy to sift through and
find the problem.
I don't have a copy of the instances I was looking at any more, but in one
case the change seemed to affect the unique names chosen, which apparently
led to laying out functions in a different order... annoying for trying to
diff.
My main question here is whether it's actually a good idea to use an
error/panic in the LambdaFormInfo, or is it better to add a new
constructor. I sort of like the error in that if something goes wrong,
it's more likely to do so at compile time than at run time; but it's also
a bit ugly.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9660#comment:7>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list