X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FValue.h;h=6d4d7cc74ac9bea27ed04d14d7e59f6f12fef077;hb=4b84086e89d86fb16f562166d9fea8df37db6be7;hp=67af6edb8f98a6475636038f8125b0c5709372eb;hpb=afba8fe662d65b25b4baf46bb26cc18e1f9cc0a5;p=oota-llvm.git diff --git a/include/llvm/Value.h b/include/llvm/Value.h index 67af6edb8f9..6d4d7cc74ac 100644 --- a/include/llvm/Value.h +++ b/include/llvm/Value.h @@ -2,13 +2,12 @@ // // 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 file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // This file declares the Value class. -// This file also defines the Use<> template for users of value. // //===----------------------------------------------------------------------===// @@ -18,7 +17,7 @@ #include "llvm/AbstractTypeUser.h" #include "llvm/Use.h" #include "llvm/Support/Casting.h" -#include "llvm/Support/Streams.h" +#include #include namespace llvm { @@ -46,7 +45,7 @@ typedef StringMapEntry ValueName; /// the super class of other important classes such as Instruction and Function. /// All Values have a Type. Type is not a subclass of Value. All types can have /// a name and they should belong to some Module. Setting the name on the Value -/// automatically update's the module's symbol table. +/// automatically updates the module's symbol table. /// /// Every value has a "use list" that keeps track of which other Values are /// using this Value. @@ -95,6 +94,10 @@ public: /// their end. This always returns a non-null pointer. const char *getNameStart() const; + /// isName - Return true if this value has the name specified by the provided + /// nul terminated string. + bool isName(const char *N) const; + /// getNameLen - Return the length of the string, correctly handling nul /// characters embedded into them. unsigned getNameLen() const; @@ -158,12 +161,14 @@ public: /// bool hasNUsesOrMore(unsigned N) const; + bool isUsedInBasicBlock(BasicBlock *BB) const; + /// getNumUses - This method computes the number of uses of this Value. This /// is a linear time operation. Use hasOneUse, hasNUses, or hasMoreThanNUses /// to check for specific values. unsigned getNumUses() const; - /// addUse/killUse - These two methods should only be used by the Use class. + /// addUse - This method should only be used by the Use class. /// void addUse(Use &U) { U.addToList(&UseList); } @@ -187,6 +192,7 @@ public: ConstantVectorVal, // This is an instance of ConstantVector ConstantPointerNullVal, // This is an instance of ConstantPointerNull InlineAsmVal, // This is an instance of InlineAsm + PseudoSourceValueVal, // This is an instance of PseudoSourceValue InstructionVal, // This is an instance of Instruction // Markers: @@ -215,6 +221,14 @@ public: /// getRawType - This should only be used to implement the vmcore library. /// const Type *getRawType() const { return Ty.getRawType(); } + + /// stripPointerCasts - This method strips off any unneeded pointer + /// casts from the specified value, returning the original uncasted value. + /// Note that the returned value is guaranteed to have pointer type. + Value *stripPointerCasts(); + const Value *stripPointerCasts() const { + return const_cast(this)->stripPointerCasts(); + } }; inline std::ostream &operator<<(std::ostream &OS, const Value &V) { @@ -222,14 +236,9 @@ inline std::ostream &operator<<(std::ostream &OS, const Value &V) { return OS; } -void Use::init(Value *v, User *user) { - Val = v; - U = user; - if (Val) Val->addUse(*this); -} - -Use::~Use() { - if (Val) removeFromList(); +void Use::init(Value *V, User *) { + Val = V; + if (V) V->addUse(*this); } void Use::set(Value *V) {