[GHC] #13104: runRW# ruins join points
GHC
ghc-devs at haskell.org
Wed Jan 11 00:07:46 UTC 2017
#13104: runRW# ruins join points
-------------------------------------+-------------------------------------
Reporter: lukemaurer | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 8.1
Keywords: JoinPoints | Operating System: Unknown/Multiple
Architecture: | Type of failure: None/Unknown
Unknown/Multiple |
Test Case: | Blocked By:
Blocking: | Related Tickets:
Differential Rev(s): | Wiki Page:
-------------------------------------+-------------------------------------
Found this while poking around in the example for #12781. Suppose we have
code like this:
{{{
let loop :: Int -> State# RealWorld -> (State# RealWorld, Int)
loop n = ... loop (n+1) {- tail call -} ...
in runRW# @ 'PtrRepLifted @ Int (loop 0)
}}}
We would love for `loop` to be a join point, but it can't be because it's
invoked in the argument to `runRW#`. In this situation, we're often
rescued by Float In, which we might hope to give us this:
{{{
runRW# @ 'PtrRepLifted @ Int (
let loop :: Int -> State# RealWorld -> (State# RealWorld, Int)
loop n s = ... loop (n+1) s' {- tail call -} ...
in loop 0
)
}}}
Two problems:
1. Float In won't do this to begin with because `loop 0` is a partial
application.
2. It's still not eligible to be a join point, again because `loop 0` is a
partial application.
What we would //like// to see is this:
{{{
runRW# @ 'PtrRepLifted @ Int (
\s0 ->
let loop :: Int -> State# RealWorld -> (State# RealWorld, Int)
loop n s = ... loop (n+1) s' {- tail call -} ...
in loop 0 s0
)
}}}
Now we're golden. But someone has to have thought to eta-expand the
argument to `runRW#` first. (Float In should then float `loop` into the
lambda because, due to the state hack, the lambda is considered one-shot.)
Perhaps the simplifier should //always// eta-expand the argument to
`runRW#`?
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/13104>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list