[GHC] #11372: Loopification does not trigger for IO even if it could
GHC
ghc-devs at haskell.org
Tue Jan 12 23:04:18 UTC 2016
#11372: Loopification does not trigger for IO even if it could
-------------------------------------+-------------------------------------
Reporter: jscholl | Owner:
Type: bug | Status: patch
Priority: normal | Milestone:
Component: Compiler | Version: 7.10.3
(CodeGen) | Keywords: cmm,
Resolution: | loopification, code generation
Operating System: Unknown/Multiple | Architecture:
Type of failure: Runtime | Unknown/Multiple
performance bug | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s): Phab:D1767
Wiki Page: |
-------------------------------------+-------------------------------------
Changes (by jscholl):
* status: new => patch
* differential: => Phab:D1767
Comment:
The problem with loopification for loops in {{{IO}}} / any monad of the
form {{{State# s -> (# State s, a #)}}} is indeed caused by the extra
{{{State#}}} tokens. While they have no runtime representation and thus
are not passed to a self-recursive call, they are still counted as
arguments when considering a self-recursive call for loopification.
So I tried to fix this by adding an additional parameter to
{{{getCallMethod}}}, namely the number of void arguments, and subtract
that number before checking if the correct number of arguments is present
(I could not just remove void arguments from the arguments as the number
of arguments is used in other places as well and I think there these void
arguments have to generate {{{stg_ap_v}}} calls or something similar). I
also tried to add a note describing the situation with these void
arguments and loopification.
I also did a nofib-run. Most things changed only a little bit, but most of
the code seems to run a little bit faster, though in praxis it is even
less than in my benchmark, but this is not suprising as most code does not
(only) consist of such loops in IO.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/11372#comment:2>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list