Are join points inlined differently from normal bindings?

I have quite a complicated program which relies on the optimiser inlining very aggressively. In 8.0.2, it works fine and produces the core I am expecting. In 8.2.2, one of the bindings is identified as a join point and then not inlined when doing so would lead to the same code. Bumping the unfolding-use-threshold to 10 (from 8) causes it to be inlined and produces the right core. Here is the core for reference - https://gist.github.com/mpickering/be30105b97fa7e4149c9fa935d72cd1c I haven't dug into which exact part of my program introduces this join point but this seems like a regression from 8.0.2. However, I make a mailing list post as I unsure how to expect the inliner to treat join points. Questions. 1. Does the inliner treat join point bindings differently to normal bindings? 2. How can I stop the compiler introducing this join point which seems to get in the way of the inliner? Cheers, Matt

| 1. Does the inliner treat join point bindings differently to normal
| bindings?
I don't think so. Use -dverbose-core2core -ddump-inlinings -ddump-occur-anal to see exactly what is getting inlined and why.
| 2. How can I stop the compiler introducing this join point which seems to
| get in the way of the inliner?
I don't think you can. I don't see why they should get in the way ... quite the reverse actually.
Simon
| -----Original Message-----
| From: ghc-devs [mailto:ghc-devs-bounces@haskell.org] On Behalf Of Matthew
| Pickering
| Sent: 16 January 2018 11:16
| To: GHC developers
participants (2)
-
Matthew Pickering
-
Simon Peyton Jones