[GHC] #11372: Loopification does not trigger for IO even if it could
GHC
ghc-devs at haskell.org
Thu Jan 7 15:16:38 UTC 2016
#11372: Loopification does not trigger for IO even if it could
-------------------------------------+-------------------------------------
Reporter: jscholl | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 7.10.3
(CodeGen) |
Keywords: cmm, | Operating System: Unknown/Multiple
loopification, code generation |
Architecture: | Type of failure: Runtime
Unknown/Multiple | performance bug
Test Case: | Blocked By:
Blocking: | Related Tickets:
Differential Rev(s): | Wiki Page:
-------------------------------------+-------------------------------------
The loopification optimization, as I understand it, allows a self-
recursive function to jump to a local label instead of the beginning of
the function, thus skipping a potential stack check. However, I only
observe it triggering for pure functions while IO functions do not get
that benefit, even when it would be possible.
I discovered this in #8793 after looking into an unexpected speedup by
removing the IO context from an otherwise pure loop and while such a loop
can simply be changed to a pure version (the {{{IOLoop}}} examples), other
functions can not, but the optimization could be applied to them (see
{{{MapM.hs}}}).
I tried to benchmark the differences between a naive loop in IO and some
horrible {{{inlinePerformIO}}} hacks to get the loopification to fire and
the "optimized" version performs 3-5% faster on my machine.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/11372>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list