[GHC] #8905: Function arguments are always spilled/reloaded if scrutinee is already in WHNF
GHC
ghc-devs at haskell.org
Mon Mar 17 08:29:43 UTC 2014
#8905: Function arguments are always spilled/reloaded if scrutinee is already in
WHNF
--------------------------------------------+------------------------------
Reporter: tibbe | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 7.9
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
Type of failure: Runtime performance bug | Unknown/Multiple
Test Case: | Difficulty: Unknown
Blocking: | Blocked By:
| Related Tickets:
--------------------------------------------+------------------------------
Comment (by simonpj):
I'm puzzled by why the spill code is before the eval check rather than
after. Before spilling etc I'd expect to see:
{{{
...
if <eval check> goto Leval else goto Ldone
Leval: call (I64[R1])(R1) returns to Ldone
Ldone: // Now it's evaluated
}}}
Then the stack-layout stuff should insert spills and reloads ''around the
call'', but not interfering with the fast path.
So how come the spills affect the fast path at all? Is there some special
code-size-saving magic in the code generator?
Simon
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8905#comment:8>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list