Specialization plugin
Matthew Pickering
matthewtpickering at gmail.com
Mon Oct 31 20:56:51 UTC 2016
I am helping Ryan investigate this.
See https://ghc.haskell.org/trac/ghc/ticket/12791 for one example
which we have identified so far.
Matt
On Fri, Oct 28, 2016 at 10:14 PM, Simon Peyton Jones via ghc-devs
<ghc-devs at haskell.org> wrote:
> I’d really like to know why INLINABLE pragmas don’t work. Perhaps an
> example?
>
>
>
> Only the type checker currently can conjure up dictionaries. It would
> presumably not be impossible to do so later, but it’d be quite a new thing,
> involving invoking the constraint solver. The pattern-match overlap checker
> does this; but without needing to generate any evidence bindings.
>
>
>
> But let’s see what’s wrong with INLINABLE first. After all if there’s a bug
> there, fixing it will benefit everyone.
>
>
>
> SImon
>
>
>
> From: ghc-devs [mailto:ghc-devs-bounces at haskell.org] On Behalf Of Ryan
> Trinkle
> Sent: 28 October 2016 00:06
> To: ghc-devs at haskell.org
> Subject: Specialization plugin
>
>
>
> Hi everyone,
>
>
>
> I'm trying my hand at writing a GHC plugin to generate specializations for
> all uses of a particular typeclass, and I've run into some trouble. I'd
> appreciate it if someone could point me in the right direction! I'm new to
> GHC development, so I may just be overlooking some simple stuff.
>
>
>
> The original problem:
>
> Reflex's interface is presented as a typeclass, which allows the underlying
> FRP engine to be selected by instance resolution. Although some programs
> make use of this (particularly the semantics test suite), most only ever use
> one implementation. However, since their code is typically written
> polymorphically, the implementation cannot be inlined and its rewrite rules
> cannot fire. This means that the typeclass
>
>
>
> My attempted solutions:
>
> * Initially, I wrote a plugin that adds INLINABLE pragmas to everything.
> This helped; small programs now generally see the inlining/rule-firings I
> was hoping for. However, in large programs, this does not occur. I'm
> looking into this, but also trying another approach:
>
> * Now, I am attempting to write a plugin that adds a SPECIALIZE pragma to
> every binding whose type mentions Reflex.
>
>
>
> The trouble:
>
> Since SPECIALIZE pragmas seem to be removed during typechecking
> (DsBinds.dsSpec), I can't directly add them. I would like to, perhaps,
> invoke Specialise.specBind; however, I'm not sure how to obtain the
> necessary instance - as mentioned here, "only the type checker can conjure
> [dictionaries] up". Perhaps it's possible to explicitly create that
> dictionary somewhere and extract it for use during the plugin pass?
>
>
>
>
>
> Thanks,
>
> Ryan
>
>
> _______________________________________________
> ghc-devs mailing list
> ghc-devs at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
>
More information about the ghc-devs
mailing list