[GHC] #13104: runRW# ruins join points
GHC
ghc-devs at haskell.org
Wed Oct 24 03:43:34 UTC 2018
#13104: runRW# ruins join points
-------------------------------------+-------------------------------------
Reporter: lukemaurer | Owner: chessai
Type: bug | Status: new
Priority: normal | Milestone: 8.8.1
Component: Compiler | Version: 8.1
Resolution: | Keywords: JoinPoints
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 chessai):
Replying to [comment:16 sgraf]:
> I very much agree with what nomeata (comment:10) and simonpj
(comment:14) said. We should aim for `loop 0` to be eta-expanded by
realising that `runRW#` only calls its argument once.
>
> I would begin by looking at how `runRW#` gets its demand signature. It's
not listed in primops.txt.pp, so it doesn't seem to be hard-coded into the
compiler. It gets 'inlined' in CorePrep and in `cpe_app` there's a test
for `runRWKey`.
>
> The problem, I guess, is that `runRW#` isn't a recognized primop. On the
other hand, it doesn't seem to be a regular identifier, either: If the
demand analyser were to look into its definition, it would be given a
demand signature of `<C(S), C1(U)>`, e.g. a signature saying that it calls
its argument exactly once with one argument. We want the one-shot (i.e.
usage demand) part, but apparently (see Note [runRW magic] in CorePrep)
not the strictness part.
>
> So, I'd say `runRW#` should be handled as a regular primop like i.e.
`catch#` and give it a `lazyApply1Dmd`. If this doesn't help, we could
always fall back to more special cases.
This is pretty useful information, thanks!
When you say 'handle _like_ a regular primop', do you mean to say 'make it
a primop'?
To be clear, while currently the demand signature of `runRW#` is `<C(S),
C1(U)>`, and you'd rather it be `< L, C1(U)>`? Why? How is this laziness
related to the problem related to the Note [runRW magic]?
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/13104#comment:17>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list