defunctionalization

Nicolas Frisby nicolas.frisby at gmail.com
Thu Jul 18 21:30:49 CEST 2013


This table outlines my plan for the compatibility of the pragmas.

Each cell is formatted as "x/y", where "x" answers "Is the original RHS in
the interface file?" and "y" answers "Will GHC try to inline it?".

               NOINLINE   INLINABLE   INLINE
<none>         no/no      yes/yes     yes/enthusiastically

NOINLINE       error      yes/no      error
INLINABLE      -          error       error
INLINE         -          -           error

The proposed new "yes/no" option gives the GHC user more control. It
prevents GHC from inlining a function while still supporting the ability to
use the annotated function's RHS in another module, via SPECIALISE or the
special "inline" function. Moreover, the presence of the RHS in the .hi
file could be used by tools other than GHC like plugins or a super-compiler.


On Thu, Jul 18, 2013 at 4:20 AM, Simon Peyton-Jones
<simonpj at microsoft.com>wrote:

>  It seems a little weird, but the internal data types can express it, so
> if you can make the front end do the right thing I’d be happy to take it.
> (Don’t forget the manual.)****
>
> ** **
>
> SImon****
>
> ** **
>
> *From:* ghc-devs [mailto:ghc-devs-bounces at haskell.org] *On Behalf Of *Nicolas
> Frisby
> *Sent:* 16 July 2013 21:29
> *To:* ghc-devs at haskell.org
> *Subject:* Re: defunctionalization****
>
> ** **
>
> Ah, I misread that TidyPgm function.It looks like if I build the
> CoreUnfolding, GHC will respect it. It's just rejecting the pragma
> combination in HsSyn.****
>
> On Jul 16, 2013 3:22 PM, "Nicolas Frisby" <nicolas.frisby at gmail.com>
> wrote:
> >
> > I'd like to put a NOINLINE and an INLINABLE pragma on a binding.
> >
> > (I'm sketching a defunctionalization pass. I'd like the 'apply` routine
> RHS to make it into the interface file, but I do not want it to be inlined,
> since that'd undo the defunctionalization.)
> >
> > In other words, I'd like a CoreUnfolding value with the uf_guidance =
> UnfNever.
> >
> > It seems TidyPgm.addExternal ignores such a core unfolding.
> >
> > Would GHC consider a patch to make this work?
> >
> > Thanks.****
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/ghc-devs/attachments/20130718/314ae272/attachment.htm>


More information about the ghc-devs mailing list