RE: new pragma name ideas? (was: defunctionalization)

2013-07-19 Thread Simon Peyton-Jones
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!
That's almost exactly what INLINABLE means.  I agree that SPECIALISABLE would 
have been a better name.

The only difference between INLINABLE and what you say is that GHC is *free* to 
inline an INLINABLE if it thinks it'd be a good idea, whereas you want a 
promise that it will never do so.  (I'm not sure why.)  But they are pretty 
close already.

My suggestion

* Rename INLINABLE to SPECIALISABLE (deprecating the former)

* Allow SPECIALISABLE in conjunction with the existing NOINLINE

Simon


From: ghc-devs [mailto:ghc-devs-boun...@haskell.org] On Behalf Of Nicolas Frisby
Sent: 18 July 2013 23:19
To: ghc-devs@haskell.org
Subject: new pragma name ideas? (was: defunctionalization)

On Thu, Jul 18, 2013 at 5:10 PM, Carter Schonwald 
carter.schonw...@gmail.commailto:carter.schonw...@gmail.com wrote:
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?

I like that idea. How about SPECIALISABLE? This is a nod to the possibility 
that GHC might someday automatically specialize an imported function.

Or EXPOSE? Or EXTERNAL? Bikeshed activate!
___
ghc-devs mailing list
ghc-devs@haskell.org
http://www.haskell.org/mailman/listinfo/ghc-devs


RE: defunctionalization

2013-07-18 Thread 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-boun...@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 
nicolas.fri...@gmail.commailto:nicolas.fri...@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@haskell.org
http://www.haskell.org/mailman/listinfo/ghc-devs


Re: defunctionalization

2013-07-18 Thread 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
simo...@microsoft.comwrote:

  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-boun...@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 nicolas.fri...@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@haskell.org
 http://www.haskell.org/mailman/listinfo/ghc-devs


___
ghc-devs mailing list
ghc-devs@haskell.org
http://www.haskell.org/mailman/listinfo/ghc-devs


Re: defunctionalization

2013-07-18 Thread Nicolas Frisby
I think that would work, but I was looking for something more precise.


On Thu, Jul 18, 2013 at 12:24 PM, Andrew Farmer afar...@ittc.ku.edu wrote:

 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 simo...@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-boun...@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 nicolas.fri...@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@haskell.org
 http://www.haskell.org/mailman/listinfo/ghc-devs



___
ghc-devs mailing list
ghc-devs@haskell.org
http://www.haskell.org/mailman/listinfo/ghc-devs


Re: defunctionalization

2013-07-18 Thread 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
simo...@microsoft.comwrote:

  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-boun...@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 nicolas.fri...@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@haskell.org
http://www.haskell.org/mailman/listinfo/ghc-devs


Re: defunctionalization

2013-07-18 Thread Carter Schonwald
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.fri...@gmail.comwrote:

 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 simo...@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-boun...@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 nicolas.fri...@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@haskell.org
 http://www.haskell.org/mailman/listinfo/ghc-devs


___
ghc-devs mailing list
ghc-devs@haskell.org
http://www.haskell.org/mailman/listinfo/ghc-devs


new pragma name ideas? (was: defunctionalization)

2013-07-18 Thread Nicolas Frisby
On Thu, Jul 18, 2013 at 5:10 PM, Carter Schonwald 
carter.schonw...@gmail.com wrote:

 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?


I like that idea. How about SPECIALISABLE? This is a nod to the possibility
that GHC might someday automatically specialize an imported function.

Or EXPOSE? Or EXTERNAL? Bikeshed activate!
___
ghc-devs mailing list
ghc-devs@haskell.org
http://www.haskell.org/mailman/listinfo/ghc-devs


Re: new pragma name ideas? (was: defunctionalization)

2013-07-18 Thread Mateusz Kowalczyk
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1

On 18/07/13 23:18, Nicolas Frisby wrote:
 On Thu, Jul 18, 2013 at 5:10 PM, Carter Schonwald  
 carter.schonw...@gmail.com wrote:
 
 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?
 
 
 I like that idea. How about SPECIALISABLE? This is a nod to the
 possibility that GHC might someday automatically specialize an
 imported function.
 
 Or EXPOSE? Or EXTERNAL? Bikeshed activate!
 
 
 
 ___ ghc-devs mailing
 list ghc-devs@haskell.org 
 http://www.haskell.org/mailman/listinfo/ghc-devs
 
Maybe we need a BIKESHED pragma that will let us alias any extensions
within the project to anything we like.

- -- 
Mateusz K.
-BEGIN PGP SIGNATURE-
Version: GnuPG v2.0.20 (GNU/Linux)

iQIcBAEBAgAGBQJR6G1uAAoJEM1mucMq2pqXrbYP/RXWS0yeI6Ewy6hx35rmqxPG
TfCK5U9KjW9WkvWXZqJq407Z0Qluiif0UIfMFy8oujj3RnjJUKN+1Co/zVdYxyiD
0LGdS4SxDQO4aRTd1uRAjaMGzVUA4xkAp+lQNI9jKN0ZojMiSQHXr4FoThkNTV1r
wWUlYwTeDJlm1HJgqcNMIjhegeG1GJrmz3i5BZgW7WBI65TL/8MfwEozFO8jjtzD
R44gF0sIg7rWEfzO3jFuhr+F3w9vwZ24KzAFPLjAIJlmB/YiBK7WwiIXI0tQhdg/
/72vVgQQMGsmSauZ0j2hjfImGDU45wLZ21w26/kkn7F6k9k+6BRFsedI1qI0Bf7V
UqTG4oWLaZ5+EYQhvLH4VjYtH7h3UgGacHiYHcKHnmL49rr6GjDWQqBE8pieAtkQ
ckhTw+fpMPQZd6T6J5OX5VNsnWcEG4C89PPCvYL9Jvw8tq6uzcTdRbxc+Thu3Plr
I6hmcM5Ibz0n+nvqWLzsY/4voQb/CtiZWQQZ+c2VbIx1HpWsKTH0NFdHX891faTn
ijsm8wsO0YcyvtlFPfZxKoQfb1GiBN+ttdlYStS7i15YmDujl7GYlXeHz0nr9FYv
nNpHoNkz+U+fH3Neeh4epCOGxUhkAPWG/u1tMTAxQad0JiLpedKxB/IMBen+16pb
IT4deYFnfsQjp/HAQfHQ
=h5Nz
-END PGP SIGNATURE-

___
ghc-devs mailing list
ghc-devs@haskell.org
http://www.haskell.org/mailman/listinfo/ghc-devs


defunctionalization

2013-07-16 Thread 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.
___
ghc-devs mailing list
ghc-devs@haskell.org
http://www.haskell.org/mailman/listinfo/ghc-devs