X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FUser.h;h=1ea5e189ba8263351d4e1ce99fd468b2855657ce;hb=1a957d563fe894c797e0eba00bf069fbe7ecba77;hp=0e98da50e9360620b8354bcc79af2298f927f95e;hpb=f718e70c7ee45daee8a46d1601d054ed9fd8f31d;p=oota-llvm.git diff --git a/include/llvm/User.h b/include/llvm/User.h index 0e98da50e93..1ea5e189ba8 100644 --- a/include/llvm/User.h +++ b/include/llvm/User.h @@ -1,10 +1,10 @@ //===-- llvm/User.h - User class definition ---------------------*- 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 class defines the interface that one who 'use's a Value must implement. @@ -20,7 +20,6 @@ #define LLVM_USER_H #include "llvm/Value.h" -#include namespace llvm { @@ -39,11 +38,10 @@ protected: unsigned NumOperands; public: - User(const Type *Ty, unsigned vty, Use *OpList, unsigned NumOps, - const std::string &name = "") - : Value(Ty, vty, name), OperandList(OpList), NumOperands(NumOps) {} + User(const Type *Ty, unsigned vty, Use *OpList, unsigned NumOps) + : Value(Ty, vty), OperandList(OpList), NumOperands(NumOps) {} - Value *getOperand(unsigned i) const { + Value *getOperand(unsigned i) const { assert(i < NumOperands && "getOperand() out of range!"); return OperandList[i]; } @@ -69,7 +67,7 @@ public: // 'delete' a whole class at a time, even though there may be circular // references... first all references are dropped, and all use counts go to // zero. Then everything is delete'd for real. Note that no operations are - // valid on an object that has "dropped all references", except operator + // valid on an object that has "dropped all references", except operator // delete. // void dropAllReferences() { @@ -92,24 +90,33 @@ public: template<> struct simplify_type { typedef Value* SimpleType; - + static SimpleType getSimplifiedValue(const User::op_iterator &Val) { return static_cast(Val->get()); } }; + template<> struct simplify_type : public simplify_type {}; template<> struct simplify_type { typedef Value* SimpleType; - + static SimpleType getSimplifiedValue(const User::const_op_iterator &Val) { return static_cast(Val->get()); } }; + template<> struct simplify_type : public simplify_type {}; + +// value_use_iterator::getOperandNo - Requires the definition of the User class. +template +unsigned value_use_iterator::getOperandNo() const { + return U - U->getUser()->op_begin(); +} + } // End llvm namespace #endif