Generalized phase control for GHC
Roman Leshchinskiy
rl at cse.unsw.edu.au
Sun Jul 6 01:00:00 EDT 2008
Max Bolingbroke wrote:
>> If you don't need a dependency and it can be ignored anyway, why would you
>> want to specify it in the first place? I just can't quite imagine a
>> situation in which I would use this.
>
> I think it makes sense because many of the inter-pass dependencies we
> have in the GHC pipeline today are actually somewhat lenient. For
> example, something quite sensible will happen if we do CSE before full
> laziness, it will simply lead to less efficient code. In contrast,
> it's imperative that we perform strictness analysis before applying
> worker-wrapper based on the annotations it adds.
I see. I suspect I'd prefer if GHC asked me to manually resolve such
conflicts rather than silently generating suboptimal code but then
again, perhaps not. In any case, my comments mostly apply to phase
control for inlining and rule matching; other passes probably have
different requirements which I haven't thought about at all.
>> Yeah, I'd prefer the class/instance model. An example: suppose you have two
>> independent libraries which implement two optimisations and you want one of
>> them to run before another. I think we really need this if we want to
>> compose optimisations.
>
> This is an interesting observation. So, you imagine that the >user
> program itself< might import the compiler plugins and add a constraint
> between the phases they export. I'm not sure how many users would
> really want to do this, but I can see it being useful.
What I had in mind is a library/plugin which uses other
libraries/plugins. For instance, let's say we have two libraries which
both implement rule-based fusion, one for some high-level stuff and one
for something low level. Now, a third library which uses the first two
might want to specify that high-level fusion should be done before
low-level fusion. Or consider something like loop optimisations, where
you might have separate plugins which implement unrolling, PRE and so on
and one plugin which aggregates all these to provide a complete loop
optimiser. It's all about compositionality, really.
Roman
More information about the Glasgow-haskell-users
mailing list