[LLVMdev] Passes propose passes

Eli Friedman eli.friedman at gmail.com
Fri Dec 2 12:51:57 PST 2011


On Fri, Dec 2, 2011 at 11:56 AM, Carl-Philip Hänsch
<cphaensch at googlemail.com> wrote:
> While trying to find a solution for this bug
> http://llvm.org/bugs/show_bug.cgi?id=11235 ,
> I came to the conclusion that the following things can happen while
> optimizing:
>  - after gvn, I get new constants which are inserted into br and
> add/sum/..., so there should be at least one more jump-threading and/or
> instsimplify
>  - after instsimplify, I get new constants which are inserted into br, so
> there should be one more jump-threading pass
>  - after jump-threading, new bigger blocks occur with redundant loads which
> need an other gvn pass
>
> At least for -O3 we will need those optimizations.
> Is there a kind of "I need at least one more $XYZ pass" call that can be
> invoked from a Pass?
>
> So my suggestion to implement in LLVM is:
>  - Detect where exactly constants are inserted
>  - Detect which pass is responsible to continue folding it
>  - Insert that pass if allowed and if it is not in the queue by a
> ProposePass function
>
> ProposePass should decide wether it's worth to further constant fold the
> block by running the proposed pass. Once accepted, the pass should be
> inserted into the pass queue at a position where it is most effective.
>
> What do you think about that idea? How much would be the effort of
> implementing it? Does it fit the layering design?

One thing that this proposal doesn't really address is that running
GVN is expensive; on common testcases, it takes much more time to run
than any other pass.  We really don't want to be inserting extra runs
of GVN into the pass pipeline.

-Eli




More information about the llvm-dev mailing list