A long time ago, I’ve tried to inject plugin logic to allows some control over the driver pipeline (phase ordering) and hooking various code gen related functions.
At that time I ran into issues that might simply not exist with plugins anymore today, but I haven’t looked.
The whole design wasn’t quite right and injects everything into the dynflags. Also ghc wanted to be able to compile the plugin on the fly, but I needed the plugin to be loaded very early during the startup phase to exert enough control of the rest of the pipeline through the plugin.
Cheers,
Moritz
Sent from my iPhone
Adding "pluggable backends" to spin up new targets seems to require quite a bit of additional infrastructure for initialising a library directory and package database. But there are probably more specific use cases that need inspecting/modifying STG or Cmm where plugins would already be useful in practice.
I think setting up a new global libdir/pkgdb is beyond the scope ofbackend plugins. The user shall implement his/her own boot script toconfigure for the new architecture, generate relevant headers, runCabal's Setup program to launch GHC with the plugin loaded.Hooks (or rather their locations in the pipeline) are rather ad hoc by nature, but for Asterius a hook that takes Cmm and takes over from there seems like a reasonable approach given the current state of things. I think the Cmm hook you implemented (or something similar) would be perfectly acceptable to use for now.
For the use case of asterius itself, indeed Hooks already fit the usecase for now. But since we seek to upstream our newly added featuresin our ghc fork back to ghc hq, we should upstream those changes earlyand make them more principled. Compared to Hooks, I prefer to move toPlugins entirely since:* Plugins are more composable, you can load multiple plugins in oneghc invocation. Hooks are not.* If I implement the same mechanisms in Plugins, this can bebeneficial to other projects. Currently, in asterius, everything worksvia a pile of hacks upon hacks in ghc-toolkit, and it's not good forreuse.* The newly added backend plugins shouldn't have visiblecorrectness/performance impact if they're not used, and it's just afew local modifications in the ghc codebase.On Thu, Oct 4, 2018 at 3:56 PM Shao, Cheng <cheng.shao@tweag.io> wrote:
Hi all,
I'm thinking of adding "backend plugins" in the current Plugins
mechanism which allows one to inspect/modify the IRs post simplifier
pass (STG/Cmm), similar to the recently added source plugins for HsSyn
IRs. This can be useful for anyone creating a custom GHC backend to
target an experimental platform (e.g. the Asterius compiler which
targets WebAssembly), and previously in order to retrieve those IRs
from the regular pipeline, we need to use Hooks which is somewhat
hacky.
Does this sound a good idea to you? If so, I can open a trac ticket
and a Phab diff for this feature.
Best,
Shao Cheng
_______________________________________________
ghc-devs mailing list
ghc-devs@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
_______________________________________________ghc-devs mailing listghc-devs@haskell.orghttp://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs