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 <[email protected]>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 <[email protected]
> > 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:[email protected]] *On Behalf Of *Nicolas
>> Frisby
>> *Sent:* 16 July 2013 21:29
>> *To:* [email protected]
>> *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" <[email protected]>
>> 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
> [email protected]
> http://www.haskell.org/mailman/listinfo/ghc-devs
>
>
_______________________________________________
ghc-devs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/ghc-devs

Reply via email to