diff --git a/llvm/include/llvm/Support/CFG.h b/llvm/include/llvm/Support/CFG.h index 4efefa72531f..a2cc22c910d9 100644 --- a/llvm/include/llvm/Support/CFG.h +++ b/llvm/include/llvm/Support/CFG.h @@ -29,7 +29,6 @@ namespace llvm { template // Predecessor Iterator class PredIterator : public forward_iterator<_Ptr, ptrdiff_t> { typedef forward_iterator<_Ptr, ptrdiff_t> super; - _Ptr *BB; _USE_iterator It; public: typedef PredIterator<_Ptr,_USE_iterator> _Self; @@ -37,26 +36,26 @@ public: inline void advancePastNonTerminators() { // Loop to ignore non terminator uses (for example PHI nodes)... - while (It != BB->use_end() && !isa(*It)) + while (!It.atEnd() && !isa(*It)) ++It; } - inline PredIterator(_Ptr *bb) : BB(bb), It(bb->use_begin()) { + inline PredIterator(_Ptr *bb) : It(bb->use_begin()) { advancePastNonTerminators(); } - inline PredIterator(_Ptr *bb, bool) : BB(bb), It(bb->use_end()) {} + inline PredIterator(_Ptr *bb, bool) : It(bb->use_end()) {} inline bool operator==(const _Self& x) const { return It == x.It; } inline bool operator!=(const _Self& x) const { return !operator==(x); } inline pointer operator*() const { - assert(It != BB->use_end() && "pred_iterator out of range!"); + assert(!It.atEnd() && "pred_iterator out of range!"); return cast(*It)->getParent(); } inline pointer *operator->() const { return &(operator*()); } inline _Self& operator++() { // Preincrement - assert(It != BB->use_end() && "pred_iterator out of range!"); + assert(!It.atEnd() && "pred_iterator out of range!"); ++It; advancePastNonTerminators(); return *this; } diff --git a/llvm/include/llvm/Use.h b/llvm/include/llvm/Use.h index c88d41f70054..ce13648f9b88 100644 --- a/llvm/include/llvm/Use.h +++ b/llvm/include/llvm/Use.h @@ -120,6 +120,9 @@ public: bool operator!=(const _Self &x) const { return !operator==(x); } + + /// atEnd - return true if this iterator is equal to use_end() on the value. + bool atEnd() const { return U == 0; } // Iterator traversal: forward iteration only _Self &operator++() { // Preincrement