Home | History | Annotate | Download | only in IR
      1 //===-- llvm/Value.h - Definition of the Value class ------------*- C++ -*-===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 // This file declares the Value class.
     11 //
     12 //===----------------------------------------------------------------------===//
     13 
     14 #ifndef LLVM_IR_VALUE_H
     15 #define LLVM_IR_VALUE_H
     16 
     17 #include "llvm-c/Core.h"
     18 #include "llvm/ADT/iterator_range.h"
     19 #include "llvm/IR/Use.h"
     20 #include "llvm/Support/CBindingWrapping.h"
     21 #include "llvm/Support/Casting.h"
     22 #include "llvm/Support/Compiler.h"
     23 
     24 namespace llvm {
     25 
     26 class APInt;
     27 class Argument;
     28 class AssemblyAnnotationWriter;
     29 class BasicBlock;
     30 class Constant;
     31 class DataLayout;
     32 class Function;
     33 class GlobalAlias;
     34 class GlobalObject;
     35 class GlobalValue;
     36 class GlobalVariable;
     37 class InlineAsm;
     38 class Instruction;
     39 class LLVMContext;
     40 class MDNode;
     41 class Module;
     42 class StringRef;
     43 class Twine;
     44 class Type;
     45 class ValueHandleBase;
     46 class ValueSymbolTable;
     47 class raw_ostream;
     48 
     49 template<typename ValueTy> class StringMapEntry;
     50 typedef StringMapEntry<Value*> ValueName;
     51 
     52 //===----------------------------------------------------------------------===//
     53 //                                 Value Class
     54 //===----------------------------------------------------------------------===//
     55 
     56 /// This is a very important LLVM class. It is the base class of all values
     57 /// computed by a program that may be used as operands to other values. Value is
     58 /// the super class of other important classes such as Instruction and Function.
     59 /// All Values have a Type. Type is not a subclass of Value. Some values can
     60 /// have a name and they belong to some Module.  Setting the name on the Value
     61 /// automatically updates the module's symbol table.
     62 ///
     63 /// Every value has a "use list" that keeps track of which other Values are
     64 /// using this Value.  A Value can also have an arbitrary number of ValueHandle
     65 /// objects that watch it and listen to RAUW and Destroy events.  See
     66 /// llvm/IR/ValueHandle.h for details.
     67 ///
     68 /// @brief LLVM Value Representation
     69 class Value {
     70   Type *VTy;
     71   Use *UseList;
     72 
     73   friend class ValueSymbolTable; // Allow ValueSymbolTable to directly mod Name.
     74   friend class ValueHandleBase;
     75   ValueName *Name;
     76 
     77   const unsigned char SubclassID;   // Subclass identifier (for isa/dyn_cast)
     78   unsigned char HasValueHandle : 1; // Has a ValueHandle pointing to this?
     79 protected:
     80   /// SubclassOptionalData - This member is similar to SubclassData, however it
     81   /// is for holding information which may be used to aid optimization, but
     82   /// which may be cleared to zero without affecting conservative
     83   /// interpretation.
     84   unsigned char SubclassOptionalData : 7;
     85 
     86 private:
     87   /// SubclassData - This member is defined by this class, but is not used for
     88   /// anything.  Subclasses can use it to hold whatever state they find useful.
     89   /// This field is initialized to zero by the ctor.
     90   unsigned short SubclassData;
     91 
     92   template <typename UseT> // UseT == 'Use' or 'const Use'
     93   class use_iterator_impl
     94       : public std::iterator<std::forward_iterator_tag, UseT *, ptrdiff_t> {
     95     typedef std::iterator<std::forward_iterator_tag, UseT *, ptrdiff_t> super;
     96 
     97     UseT *U;
     98     explicit use_iterator_impl(UseT *u) : U(u) {}
     99     friend class Value;
    100 
    101   public:
    102     typedef typename super::reference reference;
    103     typedef typename super::pointer pointer;
    104 
    105     use_iterator_impl() : U() {}
    106 
    107     bool operator==(const use_iterator_impl &x) const { return U == x.U; }
    108     bool operator!=(const use_iterator_impl &x) const { return !operator==(x); }
    109 
    110     use_iterator_impl &operator++() { // Preincrement
    111       assert(U && "Cannot increment end iterator!");
    112       U = U->getNext();
    113       return *this;
    114     }
    115     use_iterator_impl operator++(int) { // Postincrement
    116       auto tmp = *this;
    117       ++*this;
    118       return tmp;
    119     }
    120 
    121     UseT &operator*() const {
    122       assert(U && "Cannot dereference end iterator!");
    123       return *U;
    124     }
    125 
    126     UseT *operator->() const { return &operator*(); }
    127 
    128     operator use_iterator_impl<const UseT>() const {
    129       return use_iterator_impl<const UseT>(U);
    130     }
    131   };
    132 
    133   template <typename UserTy> // UserTy == 'User' or 'const User'
    134   class user_iterator_impl
    135       : public std::iterator<std::forward_iterator_tag, UserTy *, ptrdiff_t> {
    136     typedef std::iterator<std::forward_iterator_tag, UserTy *, ptrdiff_t> super;
    137 
    138     use_iterator_impl<Use> UI;
    139     explicit user_iterator_impl(Use *U) : UI(U) {}
    140     friend class Value;
    141 
    142   public:
    143     typedef typename super::reference reference;
    144     typedef typename super::pointer pointer;
    145 
    146     user_iterator_impl() {}
    147 
    148     bool operator==(const user_iterator_impl &x) const { return UI == x.UI; }
    149     bool operator!=(const user_iterator_impl &x) const { return !operator==(x); }
    150 
    151     /// \brief Returns true if this iterator is equal to user_end() on the value.
    152     bool atEnd() const { return *this == user_iterator_impl(); }
    153 
    154     user_iterator_impl &operator++() { // Preincrement
    155       ++UI;
    156       return *this;
    157     }
    158     user_iterator_impl operator++(int) { // Postincrement
    159       auto tmp = *this;
    160       ++*this;
    161       return tmp;
    162     }
    163 
    164     // Retrieve a pointer to the current User.
    165     UserTy *operator*() const {
    166       return UI->getUser();
    167     }
    168 
    169     UserTy *operator->() const { return operator*(); }
    170 
    171     operator user_iterator_impl<const UserTy>() const {
    172       return user_iterator_impl<const UserTy>(*UI);
    173     }
    174 
    175     Use &getUse() const { return *UI; }
    176 
    177     /// \brief Return the operand # of this use in its User.
    178     /// FIXME: Replace all callers with a direct call to Use::getOperandNo.
    179     unsigned getOperandNo() const { return UI->getOperandNo(); }
    180   };
    181 
    182   void operator=(const Value &) LLVM_DELETED_FUNCTION;
    183   Value(const Value &) LLVM_DELETED_FUNCTION;
    184 
    185 protected:
    186   Value(Type *Ty, unsigned scid);
    187 public:
    188   virtual ~Value();
    189 
    190   /// dump - Support for debugging, callable in GDB: V->dump()
    191   //
    192   void dump() const;
    193 
    194   /// print - Implement operator<< on Value.
    195   ///
    196   void print(raw_ostream &O) const;
    197 
    198   /// \brief Print the name of this Value out to the specified raw_ostream.
    199   /// This is useful when you just want to print 'int %reg126', not the
    200   /// instruction that generated it. If you specify a Module for context, then
    201   /// even constanst get pretty-printed; for example, the type of a null
    202   /// pointer is printed symbolically.
    203   void printAsOperand(raw_ostream &O, bool PrintType = true,
    204                       const Module *M = nullptr) const;
    205 
    206   /// All values are typed, get the type of this value.
    207   ///
    208   Type *getType() const { return VTy; }
    209 
    210   /// All values hold a context through their type.
    211   LLVMContext &getContext() const;
    212 
    213   // All values can potentially be named.
    214   bool hasName() const { return Name != nullptr && SubclassID != MDStringVal; }
    215   ValueName *getValueName() const { return Name; }
    216   void setValueName(ValueName *VN) { Name = VN; }
    217 
    218   /// getName() - Return a constant reference to the value's name. This is cheap
    219   /// and guaranteed to return the same reference as long as the value is not
    220   /// modified.
    221   StringRef getName() const;
    222 
    223   /// setName() - Change the name of the value, choosing a new unique name if
    224   /// the provided name is taken.
    225   ///
    226   /// \param Name The new name; or "" if the value's name should be removed.
    227   void setName(const Twine &Name);
    228 
    229 
    230   /// takeName - transfer the name from V to this value, setting V's name to
    231   /// empty.  It is an error to call V->takeName(V).
    232   void takeName(Value *V);
    233 
    234   /// replaceAllUsesWith - Go through the uses list for this definition and make
    235   /// each use point to "V" instead of "this".  After this completes, 'this's
    236   /// use list is guaranteed to be empty.
    237   ///
    238   void replaceAllUsesWith(Value *V);
    239 
    240   //----------------------------------------------------------------------
    241   // Methods for handling the chain of uses of this Value.
    242   //
    243   bool               use_empty() const { return UseList == nullptr; }
    244 
    245   typedef use_iterator_impl<Use>       use_iterator;
    246   typedef use_iterator_impl<const Use> const_use_iterator;
    247   use_iterator       use_begin()       { return use_iterator(UseList); }
    248   const_use_iterator use_begin() const { return const_use_iterator(UseList); }
    249   use_iterator       use_end()         { return use_iterator();   }
    250   const_use_iterator use_end()   const { return const_use_iterator();   }
    251   iterator_range<use_iterator> uses() {
    252     return iterator_range<use_iterator>(use_begin(), use_end());
    253   }
    254   iterator_range<const_use_iterator> uses() const {
    255     return iterator_range<const_use_iterator>(use_begin(), use_end());
    256   }
    257 
    258   typedef user_iterator_impl<User>       user_iterator;
    259   typedef user_iterator_impl<const User> const_user_iterator;
    260   user_iterator       user_begin()       { return user_iterator(UseList); }
    261   const_user_iterator user_begin() const { return const_user_iterator(UseList); }
    262   user_iterator       user_end()         { return user_iterator();   }
    263   const_user_iterator user_end()   const { return const_user_iterator();   }
    264   User               *user_back()        { return *user_begin(); }
    265   const User         *user_back()  const { return *user_begin(); }
    266   iterator_range<user_iterator> users() {
    267     return iterator_range<user_iterator>(user_begin(), user_end());
    268   }
    269   iterator_range<const_user_iterator> users() const {
    270     return iterator_range<const_user_iterator>(user_begin(), user_end());
    271   }
    272 
    273   /// hasOneUse - Return true if there is exactly one user of this value.  This
    274   /// is specialized because it is a common request and does not require
    275   /// traversing the whole use list.
    276   ///
    277   bool hasOneUse() const {
    278     const_use_iterator I = use_begin(), E = use_end();
    279     if (I == E) return false;
    280     return ++I == E;
    281   }
    282 
    283   /// hasNUses - Return true if this Value has exactly N users.
    284   ///
    285   bool hasNUses(unsigned N) const;
    286 
    287   /// hasNUsesOrMore - Return true if this value has N users or more.  This is
    288   /// logically equivalent to getNumUses() >= N.
    289   ///
    290   bool hasNUsesOrMore(unsigned N) const;
    291 
    292   bool isUsedInBasicBlock(const BasicBlock *BB) const;
    293 
    294   /// getNumUses - This method computes the number of uses of this Value.  This
    295   /// is a linear time operation.  Use hasOneUse, hasNUses, or hasNUsesOrMore
    296   /// to check for specific values.
    297   unsigned getNumUses() const;
    298 
    299   /// addUse - This method should only be used by the Use class.
    300   ///
    301   void addUse(Use &U) { U.addToList(&UseList); }
    302 
    303   /// An enumeration for keeping track of the concrete subclass of Value that
    304   /// is actually instantiated. Values of this enumeration are kept in the
    305   /// Value classes SubclassID field. They are used for concrete type
    306   /// identification.
    307   enum ValueTy {
    308     ArgumentVal,              // This is an instance of Argument
    309     BasicBlockVal,            // This is an instance of BasicBlock
    310     FunctionVal,              // This is an instance of Function
    311     GlobalAliasVal,           // This is an instance of GlobalAlias
    312     GlobalVariableVal,        // This is an instance of GlobalVariable
    313     UndefValueVal,            // This is an instance of UndefValue
    314     BlockAddressVal,          // This is an instance of BlockAddress
    315     ConstantExprVal,          // This is an instance of ConstantExpr
    316     ConstantAggregateZeroVal, // This is an instance of ConstantAggregateZero
    317     ConstantDataArrayVal,     // This is an instance of ConstantDataArray
    318     ConstantDataVectorVal,    // This is an instance of ConstantDataVector
    319     ConstantIntVal,           // This is an instance of ConstantInt
    320     ConstantFPVal,            // This is an instance of ConstantFP
    321     ConstantArrayVal,         // This is an instance of ConstantArray
    322     ConstantStructVal,        // This is an instance of ConstantStruct
    323     ConstantVectorVal,        // This is an instance of ConstantVector
    324     ConstantPointerNullVal,   // This is an instance of ConstantPointerNull
    325     MDNodeVal,                // This is an instance of MDNode
    326     MDStringVal,              // This is an instance of MDString
    327     InlineAsmVal,             // This is an instance of InlineAsm
    328     InstructionVal,           // This is an instance of Instruction
    329     // Enum values starting at InstructionVal are used for Instructions;
    330     // don't add new values here!
    331 
    332     // Markers:
    333     ConstantFirstVal = FunctionVal,
    334     ConstantLastVal  = ConstantPointerNullVal
    335   };
    336 
    337   /// getValueID - Return an ID for the concrete type of this object.  This is
    338   /// used to implement the classof checks.  This should not be used for any
    339   /// other purpose, as the values may change as LLVM evolves.  Also, note that
    340   /// for instructions, the Instruction's opcode is added to InstructionVal. So
    341   /// this means three things:
    342   /// # there is no value with code InstructionVal (no opcode==0).
    343   /// # there are more possible values for the value type than in ValueTy enum.
    344   /// # the InstructionVal enumerator must be the highest valued enumerator in
    345   ///   the ValueTy enum.
    346   unsigned getValueID() const {
    347     return SubclassID;
    348   }
    349 
    350   /// getRawSubclassOptionalData - Return the raw optional flags value
    351   /// contained in this value. This should only be used when testing two
    352   /// Values for equivalence.
    353   unsigned getRawSubclassOptionalData() const {
    354     return SubclassOptionalData;
    355   }
    356 
    357   /// clearSubclassOptionalData - Clear the optional flags contained in
    358   /// this value.
    359   void clearSubclassOptionalData() {
    360     SubclassOptionalData = 0;
    361   }
    362 
    363   /// hasSameSubclassOptionalData - Test whether the optional flags contained
    364   /// in this value are equal to the optional flags in the given value.
    365   bool hasSameSubclassOptionalData(const Value *V) const {
    366     return SubclassOptionalData == V->SubclassOptionalData;
    367   }
    368 
    369   /// intersectOptionalDataWith - Clear any optional flags in this value
    370   /// that are not also set in the given value.
    371   void intersectOptionalDataWith(const Value *V) {
    372     SubclassOptionalData &= V->SubclassOptionalData;
    373   }
    374 
    375   /// hasValueHandle - Return true if there is a value handle associated with
    376   /// this value.
    377   bool hasValueHandle() const { return HasValueHandle; }
    378 
    379   /// \brief Strips off any unneeded pointer casts, all-zero GEPs and aliases
    380   /// from the specified value, returning the original uncasted value.
    381   ///
    382   /// If this is called on a non-pointer value, it returns 'this'.
    383   Value *stripPointerCasts();
    384   const Value *stripPointerCasts() const {
    385     return const_cast<Value*>(this)->stripPointerCasts();
    386   }
    387 
    388   /// \brief Strips off any unneeded pointer casts and all-zero GEPs from the
    389   /// specified value, returning the original uncasted value.
    390   ///
    391   /// If this is called on a non-pointer value, it returns 'this'.
    392   Value *stripPointerCastsNoFollowAliases();
    393   const Value *stripPointerCastsNoFollowAliases() const {
    394     return const_cast<Value*>(this)->stripPointerCastsNoFollowAliases();
    395   }
    396 
    397   /// \brief Strips off unneeded pointer casts and all-constant GEPs from the
    398   /// specified value, returning the original pointer value.
    399   ///
    400   /// If this is called on a non-pointer value, it returns 'this'.
    401   Value *stripInBoundsConstantOffsets();
    402   const Value *stripInBoundsConstantOffsets() const {
    403     return const_cast<Value*>(this)->stripInBoundsConstantOffsets();
    404   }
    405 
    406   /// \brief Strips like \c stripInBoundsConstantOffsets but also accumulates
    407   /// the constant offset stripped.
    408   ///
    409   /// Stores the resulting constant offset stripped into the APInt provided.
    410   /// The provided APInt will be extended or truncated as needed to be the
    411   /// correct bitwidth for an offset of this pointer type.
    412   ///
    413   /// If this is called on a non-pointer value, it returns 'this'.
    414   Value *stripAndAccumulateInBoundsConstantOffsets(const DataLayout &DL,
    415                                                    APInt &Offset);
    416   const Value *stripAndAccumulateInBoundsConstantOffsets(const DataLayout &DL,
    417                                                          APInt &Offset) const {
    418     return const_cast<Value *>(this)
    419         ->stripAndAccumulateInBoundsConstantOffsets(DL, Offset);
    420   }
    421 
    422   /// \brief Strips off unneeded pointer casts and any in-bounds offsets from
    423   /// the specified value, returning the original pointer value.
    424   ///
    425   /// If this is called on a non-pointer value, it returns 'this'.
    426   Value *stripInBoundsOffsets();
    427   const Value *stripInBoundsOffsets() const {
    428     return const_cast<Value*>(this)->stripInBoundsOffsets();
    429   }
    430 
    431   /// isDereferenceablePointer - Test if this value is always a pointer to
    432   /// allocated and suitably aligned memory for a simple load or store.
    433   bool isDereferenceablePointer(const DataLayout *DL = nullptr) const;
    434 
    435   /// DoPHITranslation - If this value is a PHI node with CurBB as its parent,
    436   /// return the value in the PHI node corresponding to PredBB.  If not, return
    437   /// ourself.  This is useful if you want to know the value something has in a
    438   /// predecessor block.
    439   Value *DoPHITranslation(const BasicBlock *CurBB, const BasicBlock *PredBB);
    440 
    441   const Value *DoPHITranslation(const BasicBlock *CurBB,
    442                                 const BasicBlock *PredBB) const{
    443     return const_cast<Value*>(this)->DoPHITranslation(CurBB, PredBB);
    444   }
    445 
    446   /// MaximumAlignment - This is the greatest alignment value supported by
    447   /// load, store, and alloca instructions, and global values.
    448   static const unsigned MaximumAlignment = 1u << 29;
    449 
    450   /// mutateType - Mutate the type of this Value to be of the specified type.
    451   /// Note that this is an extremely dangerous operation which can create
    452   /// completely invalid IR very easily.  It is strongly recommended that you
    453   /// recreate IR objects with the right types instead of mutating them in
    454   /// place.
    455   void mutateType(Type *Ty) {
    456     VTy = Ty;
    457   }
    458 
    459 protected:
    460   unsigned short getSubclassDataFromValue() const { return SubclassData; }
    461   void setValueSubclassData(unsigned short D) { SubclassData = D; }
    462 };
    463 
    464 inline raw_ostream &operator<<(raw_ostream &OS, const Value &V) {
    465   V.print(OS);
    466   return OS;
    467 }
    468 
    469 void Use::set(Value *V) {
    470   if (Val) removeFromList();
    471   Val = V;
    472   if (V) V->addUse(*this);
    473 }
    474 
    475 
    476 // isa - Provide some specializations of isa so that we don't have to include
    477 // the subtype header files to test to see if the value is a subclass...
    478 //
    479 template <> struct isa_impl<Constant, Value> {
    480   static inline bool doit(const Value &Val) {
    481     return Val.getValueID() >= Value::ConstantFirstVal &&
    482       Val.getValueID() <= Value::ConstantLastVal;
    483   }
    484 };
    485 
    486 template <> struct isa_impl<Argument, Value> {
    487   static inline bool doit (const Value &Val) {
    488     return Val.getValueID() == Value::ArgumentVal;
    489   }
    490 };
    491 
    492 template <> struct isa_impl<InlineAsm, Value> {
    493   static inline bool doit(const Value &Val) {
    494     return Val.getValueID() == Value::InlineAsmVal;
    495   }
    496 };
    497 
    498 template <> struct isa_impl<Instruction, Value> {
    499   static inline bool doit(const Value &Val) {
    500     return Val.getValueID() >= Value::InstructionVal;
    501   }
    502 };
    503 
    504 template <> struct isa_impl<BasicBlock, Value> {
    505   static inline bool doit(const Value &Val) {
    506     return Val.getValueID() == Value::BasicBlockVal;
    507   }
    508 };
    509 
    510 template <> struct isa_impl<Function, Value> {
    511   static inline bool doit(const Value &Val) {
    512     return Val.getValueID() == Value::FunctionVal;
    513   }
    514 };
    515 
    516 template <> struct isa_impl<GlobalVariable, Value> {
    517   static inline bool doit(const Value &Val) {
    518     return Val.getValueID() == Value::GlobalVariableVal;
    519   }
    520 };
    521 
    522 template <> struct isa_impl<GlobalAlias, Value> {
    523   static inline bool doit(const Value &Val) {
    524     return Val.getValueID() == Value::GlobalAliasVal;
    525   }
    526 };
    527 
    528 template <> struct isa_impl<GlobalValue, Value> {
    529   static inline bool doit(const Value &Val) {
    530     return isa<GlobalObject>(Val) || isa<GlobalAlias>(Val);
    531   }
    532 };
    533 
    534 template <> struct isa_impl<GlobalObject, Value> {
    535   static inline bool doit(const Value &Val) {
    536     return isa<GlobalVariable>(Val) || isa<Function>(Val);
    537   }
    538 };
    539 
    540 template <> struct isa_impl<MDNode, Value> {
    541   static inline bool doit(const Value &Val) {
    542     return Val.getValueID() == Value::MDNodeVal;
    543   }
    544 };
    545 
    546 // Value* is only 4-byte aligned.
    547 template<>
    548 class PointerLikeTypeTraits<Value*> {
    549   typedef Value* PT;
    550 public:
    551   static inline void *getAsVoidPointer(PT P) { return P; }
    552   static inline PT getFromVoidPointer(void *P) {
    553     return static_cast<PT>(P);
    554   }
    555   enum { NumLowBitsAvailable = 2 };
    556 };
    557 
    558 // Create wrappers for C Binding types (see CBindingWrapping.h).
    559 DEFINE_ISA_CONVERSION_FUNCTIONS(Value, LLVMValueRef)
    560 
    561 /* Specialized opaque value conversions.
    562  */
    563 inline Value **unwrap(LLVMValueRef *Vals) {
    564   return reinterpret_cast<Value**>(Vals);
    565 }
    566 
    567 template<typename T>
    568 inline T **unwrap(LLVMValueRef *Vals, unsigned Length) {
    569 #ifdef DEBUG
    570   for (LLVMValueRef *I = Vals, *E = Vals + Length; I != E; ++I)
    571     cast<T>(*I);
    572 #endif
    573   (void)Length;
    574   return reinterpret_cast<T**>(Vals);
    575 }
    576 
    577 inline LLVMValueRef *wrap(const Value **Vals) {
    578   return reinterpret_cast<LLVMValueRef*>(const_cast<Value**>(Vals));
    579 }
    580 
    581 } // End llvm namespace
    582 
    583 #endif
    584