diff options
Diffstat (limited to 'llvm/lib/IR/Dominators.cpp')
-rw-r--r-- | llvm/lib/IR/Dominators.cpp | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/llvm/lib/IR/Dominators.cpp b/llvm/lib/IR/Dominators.cpp index bb1cc347dcb1..fbc28c202aec 100644 --- a/llvm/lib/IR/Dominators.cpp +++ b/llvm/lib/IR/Dominators.cpp @@ -90,9 +90,11 @@ template void llvm::DomTreeBuilder::DeleteEdge<DomTreeBuilder::BBPostDomTree>( DomTreeBuilder::BBPostDomTree &DT, BasicBlock *From, BasicBlock *To); template void llvm::DomTreeBuilder::ApplyUpdates<DomTreeBuilder::BBDomTree>( - DomTreeBuilder::BBDomTree &DT, DomTreeBuilder::BBUpdates); + DomTreeBuilder::BBDomTree &DT, DomTreeBuilder::BBDomTreeGraphDiff &, + DomTreeBuilder::BBDomTreeGraphDiff *); template void llvm::DomTreeBuilder::ApplyUpdates<DomTreeBuilder::BBPostDomTree>( - DomTreeBuilder::BBPostDomTree &DT, DomTreeBuilder::BBUpdates); + DomTreeBuilder::BBPostDomTree &DT, DomTreeBuilder::BBPostDomTreeGraphDiff &, + DomTreeBuilder::BBPostDomTreeGraphDiff *); template bool llvm::DomTreeBuilder::Verify<DomTreeBuilder::BBDomTree>( const DomTreeBuilder::BBDomTree &DT, @@ -113,8 +115,15 @@ bool DominatorTree::invalidate(Function &F, const PreservedAnalyses &PA, // dominates - Return true if Def dominates a use in User. This performs // the special checks necessary if Def and User are in the same basic block. // Note that Def doesn't dominate a use in Def itself! -bool DominatorTree::dominates(const Instruction *Def, +bool DominatorTree::dominates(const Value *DefV, const Instruction *User) const { + const Instruction *Def = dyn_cast<Instruction>(DefV); + if (!Def) { + assert((isa<Argument>(DefV) || isa<Constant>(DefV)) && + "Should be called with an instruction, argument or constant"); + return true; // Arguments and constants dominate everything. + } + const BasicBlock *UseBB = User->getParent(); const BasicBlock *DefBB = Def->getParent(); @@ -248,7 +257,14 @@ bool DominatorTree::dominates(const BasicBlockEdge &BBE, const Use &U) const { return dominates(BBE, UseBB); } -bool DominatorTree::dominates(const Instruction *Def, const Use &U) const { +bool DominatorTree::dominates(const Value *DefV, const Use &U) const { + const Instruction *Def = dyn_cast<Instruction>(DefV); + if (!Def) { + assert((isa<Argument>(DefV) || isa<Constant>(DefV)) && + "Should be called with an instruction, argument or constant"); + return true; // Arguments and constants dominate everything. + } + Instruction *UserInst = cast<Instruction>(U.getUser()); const BasicBlock *DefBB = Def->getParent(); |