
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.

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"
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.

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@haskell.org] On Behalf Of Nicolas Frisby
Sent: 16 July 2013 21:29
To: ghc-devs@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"
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.

What happens when you put NOINLINE on the function and compile with
-fexpose-all-unfoldings? Does that get the behavior you want?
On Thu, Jul 18, 2013 at 2:20 AM, Simon Peyton-Jones
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@haskell.org] *On Behalf Of *Nicolas Frisby *Sent:* 16 July 2013 21:29 *To:* ghc-devs@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"
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@haskell.org http://www.haskell.org/mailman/listinfo/ghc-devs

I think that would work, but I was looking for something more precise.
On Thu, Jul 18, 2013 at 12:24 PM, Andrew Farmer
What happens when you put NOINLINE on the function and compile with -fexpose-all-unfoldings? Does that get the behavior you want?
On Thu, Jul 18, 2013 at 2:20 AM, Simon Peyton-Jones
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@haskell.org] *On Behalf Of *Nicolas Frisby *Sent:* 16 July 2013 21:29 *To:* ghc-devs@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"
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@haskell.org http://www.haskell.org/mailman/listinfo/ghc-devs

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
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@haskell.org] *On Behalf Of *Nicolas Frisby *Sent:* 16 July 2013 21:29 *To:* ghc-devs@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"
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.****

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
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
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@haskell.org] *On Behalf Of *Nicolas Frisby *Sent:* 16 July 2013 21:29 *To:* ghc-devs@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"
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@haskell.org http://www.haskell.org/mailman/listinfo/ghc-devs
participants (4)
-
Andrew Farmer
-
Carter Schonwald
-
Nicolas Frisby
-
Simon Peyton-Jones