Skip to content

Remove the `isInlinePragma prag` test

This is a spin off of ticket:11781#comment:118828, where simonpj writes:

What is more mysterious to me is why the unfolding for $fApplicativeIO_$c*> doesn't have bindIO, and then bindIO inlined into it, which would allow a cascade of further improvements, which would, I think, produce essentially the same code as thenIO.

The offending corner is this

active_unfolding_gentle id
=  isInlinePragma prag    -- WHY??
&& isEarlyActive (inlinePragmaActivation prag)

So I tried removing the isInlinePragma prag test, and indeed the code becomes identical.

Conclusion:

  • I'd love to make the above change to active_unfolding_gentle and see if any other performance numbers budge. I doubt that anything will change a lot -- it really only affects whether optimisation happens before or after inlining -- but it should improve compiler performance a bit for that very reason. This could be a separate ticket

Incidentally, see #5928 which is somewhat related.

This ticket tracks that idea.

Edited by Simon Jakobi
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information