diff --git a/include/llvm/Analysis/Dominators.h b/include/llvm/Analysis/Dominators.h index 7622326ced9..5d1e8ecf128 100644 --- a/include/llvm/Analysis/Dominators.h +++ b/include/llvm/Analysis/Dominators.h @@ -404,11 +404,15 @@ public: return dominatedBySlowTreeWalk(A, B); } - inline bool dominates(NodeT *A, NodeT *B) { + inline bool dominates(const NodeT *A, const NodeT *B) { if (A == B) return true; - return dominates(getNode(A), getNode(B)); + // Cast away the const qualifiers here. This is ok since + // this function doesn't actually return the values returned + // from getNode. + return dominates(getNode(const_cast(A)), + getNode(const_cast(B))); } NodeT *getRoot() const { @@ -736,15 +740,15 @@ public: return DT->dominates(A, B); } - inline bool dominates(BasicBlock* A, BasicBlock* B) const { + inline bool dominates(const BasicBlock* A, const BasicBlock* B) const { return DT->dominates(A, B); } // dominates - Return true if A dominates B. This performs the // special checks necessary if A and B are in the same basic block. - bool dominates(Instruction *A, Instruction *B) const { - BasicBlock *BBA = A->getParent(), *BBB = B->getParent(); - if (BBA != BBB) return DT->dominates(BBA, BBB); + bool dominates(const Instruction *A, const Instruction *B) const { + const BasicBlock *BBA = A->getParent(), *BBB = B->getParent(); + if (BBA != BBB) return dominates(BBA, BBB); // It is not possible to determine dominance between two PHI nodes // based on their ordering. @@ -752,7 +756,7 @@ public: return false; // Loop through the basic block until we find A or B. - BasicBlock::iterator I = BBA->begin(); + BasicBlock::const_iterator I = BBA->begin(); for (; &*I != A && &*I != B; ++I) /*empty*/; //if(!DT.IsPostDominators) {