[LLVMdev] PassManager Dependence Question

David Greene dag at cray.com
Fri Sep 19 15:20:31 PDT 2008


On Friday 19 September 2008 17:11, David Greene wrote:

> What I'd really like to do is have Pass X re-run but not Pass Y.  Pass Y
> only uses some bookkeeping from Pass X to speed itself up.  Having Pass X
> not re-run could cause Pass Y to give wrong answers, but once Pass X is
> up-to-date, Pass Y will be fine.

To make this a bit more concrete:

I noticed that the Verifier takes a VERY long time on large programs.  This
appears to be due to its checking of defs dominating uses.  When a def
and use are in the same BasicBlock, DominatorTrees iterates over the
block until it finds one or the other.  Since Verifier does this for each 
Instruction, this is an n^2 algorithm.

Now, I could go and rewrite Verifier to be a little smarter about how it
checks this (with a fair amount of pain, I would add) but that doesn't help 
all of the other passes that want to know if two instructions have a dominance 
relationship.

So I thought about adding a pass that simply numbers Instructions, have 
DominatorTrees depend on that pass and then the dominates() question can just 
return whether one Instruction number is > the other.

The number will get out of date as soon as Instructions are added or reordered 
(deleting instructions should be ok), but I don't want to go and recalculate 
all dominator information.  I just need to update the numbering.

                                                            -Dave



More information about the llvm-dev mailing list