defunctionalization

Carter Schonwald carter.schonwald at gmail.com
Fri Jul 19 00:10:08 CEST 2013


So the idea here to make it possible to have a function that can be
specialized at certain types, and  explicitly inlined at specific use
sites, but ghc otherwise will not inline it? Cool!

one thought: might it be simpler to instead have something like
EXPLICIT-INLINABLE, rather that requiring the juxtaposition of two pragmas
which "seem" contradictory?



On Thu, Jul 18, 2013 at 3:30 PM, Nicolas Frisby <nicolas.frisby at gmail.com>wrote:

> 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.****
>>
>
>
> _______________________________________________
> ghc-devs mailing list
> ghc-devs at haskell.org
> http://www.haskell.org/mailman/listinfo/ghc-devs
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/ghc-devs/attachments/20130718/6d17206f/attachment.htm>


More information about the ghc-devs mailing list