X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FUse.h;h=c88d41f700544007ad8dd1cbf0778c58f3efb66d;hb=eb0107af86b9dde84cc1f57876f0cefc6707a919;hp=bbf523574cd61afc7ae94d1bc6cae48b5becb5dd;hpb=a26619748932b146a09773d51465d7b7dcdb7dd2;p=oota-llvm.git diff --git a/include/llvm/Use.h b/include/llvm/Use.h index bbf523574cd..c88d41f7005 100644 --- a/include/llvm/Use.h +++ b/include/llvm/Use.h @@ -1,10 +1,10 @@ //===-- llvm/Use.h - Definition of the Use class ----------------*- C++ -*-===// -// +// // The LLVM Compiler Infrastructure // // This file was developed by the LLVM research group and is distributed under // the University of Illinois Open Source License. See LICENSE.TXT for details. -// +// //===----------------------------------------------------------------------===// // // This defines the Use class. The Use class represents the operand of an @@ -114,7 +114,7 @@ public: value_use_iterator(const _Self &I) : U(I.U) {} value_use_iterator() {} - bool operator==(const _Self &x) const { + bool operator==(const _Self &x) const { return U == x.U; } bool operator!=(const _Self &x) const { @@ -125,14 +125,14 @@ public: _Self &operator++() { // Preincrement assert(U && "Cannot increment end iterator!"); U = U->getNext(); - return *this; + return *this; } _Self operator++(int) { // Postincrement - _Self tmp = *this; ++*this; return tmp; + _Self tmp = *this; ++*this; return tmp; } // Retrieve a reference to the current SCC - UserTy *operator*() const { + UserTy *operator*() const { assert(U && "Cannot increment end iterator!"); return U->getUser(); } @@ -140,8 +140,37 @@ public: UserTy *operator->() const { return operator*(); } Use &getUse() const { return *U; } + + /// getOperandNo - Return the operand # of this use in its User. Defined in + /// User.h + /// + unsigned getOperandNo() const; +}; + + +template<> struct simplify_type > { + typedef User* SimpleType; + + static SimpleType getSimplifiedValue(const value_use_iterator &Val) { + return *Val; + } +}; + +template<> struct simplify_type > + : public simplify_type > {}; + +template<> struct simplify_type > { + typedef const User* SimpleType; + + static SimpleType getSimplifiedValue(const + value_use_iterator &Val) { + return *Val; + } }; +template<> struct simplify_type > + : public simplify_type > {}; + } // End llvm namespace #endif