From 3ef437d137afe7409b93310a2092a2f8a8dbfcca Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Thu, 11 Oct 2007 04:18:11 +0000 Subject: [PATCH] Add a new use_iterator::atEnd() method, which allows us to shrink pred_iterator down to a single ivar. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42859 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Support/CFG.h | 11 +++++------ include/llvm/Use.h | 3 +++ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/include/llvm/Support/CFG.h b/include/llvm/Support/CFG.h index 4efefa72531..a2cc22c910d 100644 --- a/include/llvm/Support/CFG.h +++ b/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/include/llvm/Use.h b/include/llvm/Use.h index c88d41f7005..ce13648f9b8 100644 --- a/include/llvm/Use.h +++ b/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