diff options
author | Chris Lattner <sabre@nondot.org> | 2007-10-11 04:18:11 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2007-10-11 04:18:11 +0000 |
commit | 34c0acb8d79bea365cda272af96c0b94cbdeb8ac (patch) | |
tree | b179649549eed3d0516011a9f586ea518400dc53 | |
parent | 2c327ce67629962e2131e590fd1a2529d91e0844 (diff) | |
download | external_llvm-34c0acb8d79bea365cda272af96c0b94cbdeb8ac.zip external_llvm-34c0acb8d79bea365cda272af96c0b94cbdeb8ac.tar.gz external_llvm-34c0acb8d79bea365cda272af96c0b94cbdeb8ac.tar.bz2 |
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
-rw-r--r-- | include/llvm/Support/CFG.h | 11 | ||||
-rw-r--r-- | 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 4efefa7..a2cc22c 100644 --- a/include/llvm/Support/CFG.h +++ b/include/llvm/Support/CFG.h @@ -29,7 +29,6 @@ namespace llvm { template <class _Ptr, class _USE_iterator> // 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<TerminatorInst>(*It)) + while (!It.atEnd() && !isa<TerminatorInst>(*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<TerminatorInst>(*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 c88d41f..ce13648 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 |