[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.


More information about the llvm-dev mailing list