[LLVMdev] DominatorTrees, DominanceFrontiers, interfaces and cloning

Chris Lattner clattner at apple.com
Fri May 1 09:44:39 PDT 2009


On Apr 30, 2009, at 5:28 PM, Nick Johnson wrote:

> Hello,
>
> I have a transform that, given a function F, will produce a new
> function G such that the basic blocks of G are (copies of) a subset of
> the basic blocks of F, and such that control flow is connected as you
> would expect.  Given DominatorTree and DominanceFrontier of F, I would
> also like to efficiently compute DominatorTrees and DominanceFrontiers
> of G.  I understand how to do this mathematically, but I'm having some
> problems with the llvm codebase.
>
> I have two questions:
>
> (1) Is there any way to clone a DominatorTree or DominanceFrontier
> object, so that I can modify the cloned copy?  It looks like Pass
> makes the copy constructor private...

The passes aren't designed to be used like this, but you could extend  
them if you want.

> (2) Is there any reason why functions (such as PromoteMemToReg) accept
> parameters of types DominatorTree and DominanceFrontier instead of
> types DominatorTreeBase and DominanceFrontierBase?  It seems to me
> that they should accept the abstract interface instead of the
> implementation (and avoid the extra baggage of a pass).

DomintatorTree (and friends) isn't designed to be an abstract  
interface.  There is supposed to be exactly two subclasses of  
DominatorTreeBase: one for forward and one for reverse dominators.   
PromoteMemToReg doesn't take the base class, because it doesn't make  
sense for it to work on reverse dominators.

-Chris



More information about the llvm-dev mailing list