//===----------------------------------------------------------------------===//
//
// This file declares the Value class.
-// This file also defines the Use<> template for users of value.
//
//===----------------------------------------------------------------------===//
#include "llvm/AbstractTypeUser.h"
#include "llvm/Use.h"
#include "llvm/Support/Casting.h"
-#include "llvm/Support/Streams.h"
+#include <iosfwd>
#include <string>
namespace llvm {
/// This field is initialized to zero by the ctor.
unsigned short SubclassData;
private:
- PATypeHolder Ty;
+ PATypeHolder VTy;
Use *UseList;
friend class ValueSymbolTable; // Allow ValueSymbolTable to directly mod Name.
/// All values are typed, get the type of this value.
///
- inline const Type *getType() const { return Ty; }
+ inline const Type *getType() const { return VTy; }
// All values can potentially be named...
inline bool hasName() const { return Name != 0; }
/// Note that names can have null characters within the string as well as at
/// their end. This always returns a non-null pointer.
const char *getNameStart() const;
+ /// getNameEnd - Return a pointer to the end of the name.
+ const char *getNameEnd() const { return getNameStart() + getNameLen(); }
/// isName - Return true if this value has the name specified by the provided
/// nul terminated string.
///
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.
/// getRawType - This should only be used to implement the vmcore library.
///
- const Type *getRawType() const { return Ty.getRawType(); }
+ const Type *getRawType() const { return VTy.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<Value*>(this)->stripPointerCasts();
+ }
};
inline std::ostream &operator<<(std::ostream &OS, const Value &V) {