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/ADT/iterator_range.h"
18#include "llvm/IR/Use.h"
19#include "llvm/Support/CBindingWrapping.h"
20#include "llvm/Support/Casting.h"
21#include "llvm/Support/Compiler.h"
22
23namespace llvm {
24
25class APInt;
26class Argument;
27class AssemblyAnnotationWriter;
28class BasicBlock;
29class Constant;
30class DataLayout;
31class Function;
32class GlobalAlias;
33class GlobalObject;
34class GlobalValue;
35class GlobalVariable;
36class InlineAsm;
37class Instruction;
38class LLVMContext;
39class Module;
40class ModuleSlotTracker;
41class StringRef;
42class Twine;
43class Type;
44class ValueHandleBase;
45class ValueSymbolTable;
46class raw_ostream;
47
48template<typename ValueTy> class StringMapEntry;
49typedef StringMapEntry<Value*> ValueName;
50
51//===----------------------------------------------------------------------===//
52//                                 Value Class
53//===----------------------------------------------------------------------===//
54
55/// \brief LLVM Value Representation
56///
57/// This is a very important LLVM class. It is the base class of all values
58/// computed by a program that may be used as operands to other values. Value is
59/// the super class of other important classes such as Instruction and Function.
60/// All Values have a Type. Type is not a subclass of Value. Some values can
61/// have a name and they belong to some Module.  Setting the name on the Value
62/// automatically updates the module's symbol table.
63///
64/// Every value has a "use list" that keeps track of which other Values are
65/// using this Value.  A Value can also have an arbitrary number of ValueHandle
66/// objects that watch it and listen to RAUW and Destroy events.  See
67/// llvm/IR/ValueHandle.h for details.
68class Value {
69  Type *VTy;
70  Use *UseList;
71
72  friend class ValueAsMetadata; // Allow access to IsUsedByMD.
73  friend class ValueHandleBase;
74
75  const unsigned char SubclassID;   // Subclass identifier (for isa/dyn_cast)
76  unsigned char HasValueHandle : 1; // Has a ValueHandle pointing to this?
77protected:
78  /// \brief Hold subclass data that can be dropped.
79  ///
80  /// This member is similar to SubclassData, however it is for holding
81  /// information which may be used to aid optimization, but which may be
82  /// cleared to zero without affecting conservative interpretation.
83  unsigned char SubclassOptionalData : 7;
84
85private:
86  /// \brief Hold arbitrary subclass data.
87  ///
88  /// This member is defined by this class, but is not used for anything.
89  /// Subclasses can use it to hold whatever state they find useful.  This
90  /// field is initialized to zero by the ctor.
91  unsigned short SubclassData;
92
93protected:
94  /// \brief The number of operands in the subclass.
95  ///
96  /// This member is defined by this class, but not used for anything.
97  /// Subclasses can use it to store their number of operands, if they have
98  /// any.
99  ///
100  /// This is stored here to save space in User on 64-bit hosts.  Since most
101  /// instances of Value have operands, 32-bit hosts aren't significantly
102  /// affected.
103  ///
104  /// Note, this should *NOT* be used directly by any class other than User.
105  /// User uses this value to find the Use list.
106  enum : unsigned { NumUserOperandsBits = 28 };
107  unsigned NumUserOperands : NumUserOperandsBits;
108
109  bool IsUsedByMD : 1;
110  bool HasName : 1;
111  bool HasHungOffUses : 1;
112  bool HasDescriptor : 1;
113
114private:
115  template <typename UseT> // UseT == 'Use' or 'const Use'
116  class use_iterator_impl
117      : public std::iterator<std::forward_iterator_tag, UseT *> {
118    UseT *U;
119    explicit use_iterator_impl(UseT *u) : U(u) {}
120    friend class Value;
121
122  public:
123    use_iterator_impl() : U() {}
124
125    bool operator==(const use_iterator_impl &x) const { return U == x.U; }
126    bool operator!=(const use_iterator_impl &x) const { return !operator==(x); }
127
128    use_iterator_impl &operator++() { // Preincrement
129      assert(U && "Cannot increment end iterator!");
130      U = U->getNext();
131      return *this;
132    }
133    use_iterator_impl operator++(int) { // Postincrement
134      auto tmp = *this;
135      ++*this;
136      return tmp;
137    }
138
139    UseT &operator*() const {
140      assert(U && "Cannot dereference end iterator!");
141      return *U;
142    }
143
144    UseT *operator->() const { return &operator*(); }
145
146    operator use_iterator_impl<const UseT>() const {
147      return use_iterator_impl<const UseT>(U);
148    }
149  };
150
151  template <typename UserTy> // UserTy == 'User' or 'const User'
152  class user_iterator_impl
153      : public std::iterator<std::forward_iterator_tag, UserTy *> {
154    use_iterator_impl<Use> UI;
155    explicit user_iterator_impl(Use *U) : UI(U) {}
156    friend class Value;
157
158  public:
159    user_iterator_impl() {}
160
161    bool operator==(const user_iterator_impl &x) const { return UI == x.UI; }
162    bool operator!=(const user_iterator_impl &x) const { return !operator==(x); }
163
164    /// \brief Returns true if this iterator is equal to user_end() on the value.
165    bool atEnd() const { return *this == user_iterator_impl(); }
166
167    user_iterator_impl &operator++() { // Preincrement
168      ++UI;
169      return *this;
170    }
171    user_iterator_impl operator++(int) { // Postincrement
172      auto tmp = *this;
173      ++*this;
174      return tmp;
175    }
176
177    // Retrieve a pointer to the current User.
178    UserTy *operator*() const {
179      return UI->getUser();
180    }
181
182    UserTy *operator->() const { return operator*(); }
183
184    operator user_iterator_impl<const UserTy>() const {
185      return user_iterator_impl<const UserTy>(*UI);
186    }
187
188    Use &getUse() const { return *UI; }
189  };
190
191  void operator=(const Value &) = delete;
192  Value(const Value &) = delete;
193
194protected:
195  Value(Type *Ty, unsigned scid);
196public:
197  virtual ~Value();
198
199  /// \brief Support for debugging, callable in GDB: V->dump()
200  void dump() const;
201
202  /// \brief Implement operator<< on Value.
203  /// @{
204  void print(raw_ostream &O, bool IsForDebug = false) const;
205  void print(raw_ostream &O, ModuleSlotTracker &MST,
206             bool IsForDebug = false) const;
207  /// @}
208
209  /// \brief Print the name of this Value out to the specified raw_ostream.
210  ///
211  /// This is useful when you just want to print 'int %reg126', not the
212  /// instruction that generated it. If you specify a Module for context, then
213  /// even constanst get pretty-printed; for example, the type of a null
214  /// pointer is printed symbolically.
215  /// @{
216  void printAsOperand(raw_ostream &O, bool PrintType = true,
217                      const Module *M = nullptr) const;
218  void printAsOperand(raw_ostream &O, bool PrintType,
219                      ModuleSlotTracker &MST) const;
220  /// @}
221
222  /// \brief All values are typed, get the type of this value.
223  Type *getType() const { return VTy; }
224
225  /// \brief All values hold a context through their type.
226  LLVMContext &getContext() const;
227
228  // \brief All values can potentially be named.
229  bool hasName() const { return HasName; }
230  ValueName *getValueName() const;
231  void setValueName(ValueName *VN);
232
233private:
234  void destroyValueName();
235  void setNameImpl(const Twine &Name);
236
237public:
238  /// \brief Return a constant reference to the value's name.
239  ///
240  /// This is cheap and guaranteed to return the same reference as long as the
241  /// value is not modified.
242  StringRef getName() const;
243
244  /// \brief Change the name of the value.
245  ///
246  /// Choose a new unique name if the provided name is taken.
247  ///
248  /// \param Name The new name; or "" if the value's name should be removed.
249  void setName(const Twine &Name);
250
251
252  /// \brief Transfer the name from V to this value.
253  ///
254  /// After taking V's name, sets V's name to empty.
255  ///
256  /// \note It is an error to call V->takeName(V).
257  void takeName(Value *V);
258
259  /// \brief Change all uses of this to point to a new Value.
260  ///
261  /// Go through the uses list for this definition and make each use point to
262  /// "V" instead of "this".  After this completes, 'this's use list is
263  /// guaranteed to be empty.
264  void replaceAllUsesWith(Value *V);
265
266  /// replaceUsesOutsideBlock - Go through the uses list for this definition and
267  /// make each use point to "V" instead of "this" when the use is outside the
268  /// block. 'This's use list is expected to have at least one element.
269  /// Unlike replaceAllUsesWith this function does not support basic block
270  /// values or constant users.
271  void replaceUsesOutsideBlock(Value *V, BasicBlock *BB);
272
273  //----------------------------------------------------------------------
274  // Methods for handling the chain of uses of this Value.
275  //
276  // Materializing a function can introduce new uses, so these methods come in
277  // two variants:
278  // The methods that start with materialized_ check the uses that are
279  // currently known given which functions are materialized. Be very careful
280  // when using them since you might not get all uses.
281  // The methods that don't start with materialized_ assert that modules is
282  // fully materialized.
283#ifdef NDEBUG
284  void assertModuleIsMaterialized() const {}
285#else
286  void assertModuleIsMaterialized() const;
287#endif
288
289  bool use_empty() const {
290    assertModuleIsMaterialized();
291    return UseList == nullptr;
292  }
293
294  typedef use_iterator_impl<Use> use_iterator;
295  typedef use_iterator_impl<const Use> const_use_iterator;
296  use_iterator materialized_use_begin() { return use_iterator(UseList); }
297  const_use_iterator materialized_use_begin() const {
298    return const_use_iterator(UseList);
299  }
300  use_iterator use_begin() {
301    assertModuleIsMaterialized();
302    return materialized_use_begin();
303  }
304  const_use_iterator use_begin() const {
305    assertModuleIsMaterialized();
306    return materialized_use_begin();
307  }
308  use_iterator use_end() { return use_iterator(); }
309  const_use_iterator use_end() const { return const_use_iterator(); }
310  iterator_range<use_iterator> materialized_uses() {
311    return make_range(materialized_use_begin(), use_end());
312  }
313  iterator_range<const_use_iterator> materialized_uses() const {
314    return make_range(materialized_use_begin(), use_end());
315  }
316  iterator_range<use_iterator> uses() {
317    assertModuleIsMaterialized();
318    return materialized_uses();
319  }
320  iterator_range<const_use_iterator> uses() const {
321    assertModuleIsMaterialized();
322    return materialized_uses();
323  }
324
325  bool user_empty() const {
326    assertModuleIsMaterialized();
327    return UseList == nullptr;
328  }
329
330  typedef user_iterator_impl<User> user_iterator;
331  typedef user_iterator_impl<const User> const_user_iterator;
332  user_iterator materialized_user_begin() { return user_iterator(UseList); }
333  const_user_iterator materialized_user_begin() const {
334    return const_user_iterator(UseList);
335  }
336  user_iterator user_begin() {
337    assertModuleIsMaterialized();
338    return materialized_user_begin();
339  }
340  const_user_iterator user_begin() const {
341    assertModuleIsMaterialized();
342    return materialized_user_begin();
343  }
344  user_iterator user_end() { return user_iterator(); }
345  const_user_iterator user_end() const { return const_user_iterator(); }
346  User *user_back() {
347    assertModuleIsMaterialized();
348    return *materialized_user_begin();
349  }
350  const User *user_back() const {
351    assertModuleIsMaterialized();
352    return *materialized_user_begin();
353  }
354  iterator_range<user_iterator> users() {
355    assertModuleIsMaterialized();
356    return make_range(materialized_user_begin(), user_end());
357  }
358  iterator_range<const_user_iterator> users() const {
359    assertModuleIsMaterialized();
360    return make_range(materialized_user_begin(), user_end());
361  }
362
363  /// \brief Return true if there is exactly one user of this value.
364  ///
365  /// This is specialized because it is a common request and does not require
366  /// traversing the whole use list.
367  bool hasOneUse() const {
368    const_use_iterator I = use_begin(), E = use_end();
369    if (I == E) return false;
370    return ++I == E;
371  }
372
373  /// \brief Return true if this Value has exactly N users.
374  bool hasNUses(unsigned N) const;
375
376  /// \brief Return true if this value has N users or more.
377  ///
378  /// This is logically equivalent to getNumUses() >= N.
379  bool hasNUsesOrMore(unsigned N) const;
380
381  /// \brief Check if this value is used in the specified basic block.
382  bool isUsedInBasicBlock(const BasicBlock *BB) const;
383
384  /// \brief This method computes the number of uses of this Value.
385  ///
386  /// This is a linear time operation.  Use hasOneUse, hasNUses, or
387  /// hasNUsesOrMore to check for specific values.
388  unsigned getNumUses() const;
389
390  /// \brief This method should only be used by the Use class.
391  void addUse(Use &U) { U.addToList(&UseList); }
392
393  /// \brief Concrete subclass of this.
394  ///
395  /// An enumeration for keeping track of the concrete subclass of Value that
396  /// is actually instantiated. Values of this enumeration are kept in the
397  /// Value classes SubclassID field. They are used for concrete type
398  /// identification.
399  enum ValueTy {
400#define HANDLE_VALUE(Name) Name##Val,
401#include "llvm/IR/Value.def"
402
403    // Markers:
404#define HANDLE_CONSTANT_MARKER(Marker, Constant) Marker = Constant##Val,
405#include "llvm/IR/Value.def"
406  };
407
408  /// \brief Return an ID for the concrete type of this object.
409  ///
410  /// This is used to implement the classof checks.  This should not be used
411  /// for any other purpose, as the values may change as LLVM evolves.  Also,
412  /// note that for instructions, the Instruction's opcode is added to
413  /// InstructionVal. So this means three things:
414  /// # there is no value with code InstructionVal (no opcode==0).
415  /// # there are more possible values for the value type than in ValueTy enum.
416  /// # the InstructionVal enumerator must be the highest valued enumerator in
417  ///   the ValueTy enum.
418  unsigned getValueID() const {
419    return SubclassID;
420  }
421
422  /// \brief Return the raw optional flags value contained in this value.
423  ///
424  /// This should only be used when testing two Values for equivalence.
425  unsigned getRawSubclassOptionalData() const {
426    return SubclassOptionalData;
427  }
428
429  /// \brief Clear the optional flags contained in this value.
430  void clearSubclassOptionalData() {
431    SubclassOptionalData = 0;
432  }
433
434  /// \brief Check the optional flags for equality.
435  bool hasSameSubclassOptionalData(const Value *V) const {
436    return SubclassOptionalData == V->SubclassOptionalData;
437  }
438
439  /// \brief Clear any optional flags not set in the given Value.
440  void intersectOptionalDataWith(const Value *V) {
441    SubclassOptionalData &= V->SubclassOptionalData;
442  }
443
444  /// \brief Return true if there is a value handle associated with this value.
445  bool hasValueHandle() const { return HasValueHandle; }
446
447  /// \brief Return true if there is metadata referencing this value.
448  bool isUsedByMetadata() const { return IsUsedByMD; }
449
450  /// \brief Strip off pointer casts, all-zero GEPs, and aliases.
451  ///
452  /// Returns the original uncasted value.  If this is called on a non-pointer
453  /// value, it returns 'this'.
454  Value *stripPointerCasts();
455  const Value *stripPointerCasts() const {
456    return const_cast<Value*>(this)->stripPointerCasts();
457  }
458
459  /// \brief Strip off pointer casts and all-zero GEPs.
460  ///
461  /// Returns the original uncasted value.  If this is called on a non-pointer
462  /// value, it returns 'this'.
463  Value *stripPointerCastsNoFollowAliases();
464  const Value *stripPointerCastsNoFollowAliases() const {
465    return const_cast<Value*>(this)->stripPointerCastsNoFollowAliases();
466  }
467
468  /// \brief Strip off pointer casts and all-constant inbounds GEPs.
469  ///
470  /// Returns the original pointer value.  If this is called on a non-pointer
471  /// value, it returns 'this'.
472  Value *stripInBoundsConstantOffsets();
473  const Value *stripInBoundsConstantOffsets() const {
474    return const_cast<Value*>(this)->stripInBoundsConstantOffsets();
475  }
476
477  /// \brief Accumulate offsets from \a stripInBoundsConstantOffsets().
478  ///
479  /// Stores the resulting constant offset stripped into the APInt provided.
480  /// The provided APInt will be extended or truncated as needed to be the
481  /// correct bitwidth for an offset of this pointer type.
482  ///
483  /// If this is called on a non-pointer value, it returns 'this'.
484  Value *stripAndAccumulateInBoundsConstantOffsets(const DataLayout &DL,
485                                                   APInt &Offset);
486  const Value *stripAndAccumulateInBoundsConstantOffsets(const DataLayout &DL,
487                                                         APInt &Offset) const {
488    return const_cast<Value *>(this)
489        ->stripAndAccumulateInBoundsConstantOffsets(DL, Offset);
490  }
491
492  /// \brief Strip off pointer casts and inbounds GEPs.
493  ///
494  /// Returns the original pointer value.  If this is called on a non-pointer
495  /// value, it returns 'this'.
496  Value *stripInBoundsOffsets();
497  const Value *stripInBoundsOffsets() const {
498    return const_cast<Value*>(this)->stripInBoundsOffsets();
499  }
500
501  /// \brief Translate PHI node to its predecessor from the given basic block.
502  ///
503  /// If this value is a PHI node with CurBB as its parent, return the value in
504  /// the PHI node corresponding to PredBB.  If not, return ourself.  This is
505  /// useful if you want to know the value something has in a predecessor
506  /// block.
507  Value *DoPHITranslation(const BasicBlock *CurBB, const BasicBlock *PredBB);
508
509  const Value *DoPHITranslation(const BasicBlock *CurBB,
510                                const BasicBlock *PredBB) const{
511    return const_cast<Value*>(this)->DoPHITranslation(CurBB, PredBB);
512  }
513
514  /// \brief The maximum alignment for instructions.
515  ///
516  /// This is the greatest alignment value supported by load, store, and alloca
517  /// instructions, and global values.
518  static const unsigned MaxAlignmentExponent = 29;
519  static const unsigned MaximumAlignment = 1u << MaxAlignmentExponent;
520
521  /// \brief Mutate the type of this Value to be of the specified type.
522  ///
523  /// Note that this is an extremely dangerous operation which can create
524  /// completely invalid IR very easily.  It is strongly recommended that you
525  /// recreate IR objects with the right types instead of mutating them in
526  /// place.
527  void mutateType(Type *Ty) {
528    VTy = Ty;
529  }
530
531  /// \brief Sort the use-list.
532  ///
533  /// Sorts the Value's use-list by Cmp using a stable mergesort.  Cmp is
534  /// expected to compare two \a Use references.
535  template <class Compare> void sortUseList(Compare Cmp);
536
537  /// \brief Reverse the use-list.
538  void reverseUseList();
539
540private:
541  /// \brief Merge two lists together.
542  ///
543  /// Merges \c L and \c R using \c Cmp.  To enable stable sorts, always pushes
544  /// "equal" items from L before items from R.
545  ///
546  /// \return the first element in the list.
547  ///
548  /// \note Completely ignores \a Use::Prev (doesn't read, doesn't update).
549  template <class Compare>
550  static Use *mergeUseLists(Use *L, Use *R, Compare Cmp) {
551    Use *Merged;
552    Use **Next = &Merged;
553
554    for (;;) {
555      if (!L) {
556        *Next = R;
557        break;
558      }
559      if (!R) {
560        *Next = L;
561        break;
562      }
563      if (Cmp(*R, *L)) {
564        *Next = R;
565        Next = &R->Next;
566        R = R->Next;
567      } else {
568        *Next = L;
569        Next = &L->Next;
570        L = L->Next;
571      }
572    }
573
574    return Merged;
575  }
576
577  /// \brief Tail-recursive helper for \a mergeUseLists().
578  ///
579  /// \param[out] Next the first element in the list.
580  template <class Compare>
581  static void mergeUseListsImpl(Use *L, Use *R, Use **Next, Compare Cmp);
582
583protected:
584  unsigned short getSubclassDataFromValue() const { return SubclassData; }
585  void setValueSubclassData(unsigned short D) { SubclassData = D; }
586};
587
588inline raw_ostream &operator<<(raw_ostream &OS, const Value &V) {
589  V.print(OS);
590  return OS;
591}
592
593void Use::set(Value *V) {
594  if (Val) removeFromList();
595  Val = V;
596  if (V) V->addUse(*this);
597}
598
599template <class Compare> void Value::sortUseList(Compare Cmp) {
600  if (!UseList || !UseList->Next)
601    // No need to sort 0 or 1 uses.
602    return;
603
604  // Note: this function completely ignores Prev pointers until the end when
605  // they're fixed en masse.
606
607  // Create a binomial vector of sorted lists, visiting uses one at a time and
608  // merging lists as necessary.
609  const unsigned MaxSlots = 32;
610  Use *Slots[MaxSlots];
611
612  // Collect the first use, turning it into a single-item list.
613  Use *Next = UseList->Next;
614  UseList->Next = nullptr;
615  unsigned NumSlots = 1;
616  Slots[0] = UseList;
617
618  // Collect all but the last use.
619  while (Next->Next) {
620    Use *Current = Next;
621    Next = Current->Next;
622
623    // Turn Current into a single-item list.
624    Current->Next = nullptr;
625
626    // Save Current in the first available slot, merging on collisions.
627    unsigned I;
628    for (I = 0; I < NumSlots; ++I) {
629      if (!Slots[I])
630        break;
631
632      // Merge two lists, doubling the size of Current and emptying slot I.
633      //
634      // Since the uses in Slots[I] originally preceded those in Current, send
635      // Slots[I] in as the left parameter to maintain a stable sort.
636      Current = mergeUseLists(Slots[I], Current, Cmp);
637      Slots[I] = nullptr;
638    }
639    // Check if this is a new slot.
640    if (I == NumSlots) {
641      ++NumSlots;
642      assert(NumSlots <= MaxSlots && "Use list bigger than 2^32");
643    }
644
645    // Found an open slot.
646    Slots[I] = Current;
647  }
648
649  // Merge all the lists together.
650  assert(Next && "Expected one more Use");
651  assert(!Next->Next && "Expected only one Use");
652  UseList = Next;
653  for (unsigned I = 0; I < NumSlots; ++I)
654    if (Slots[I])
655      // Since the uses in Slots[I] originally preceded those in UseList, send
656      // Slots[I] in as the left parameter to maintain a stable sort.
657      UseList = mergeUseLists(Slots[I], UseList, Cmp);
658
659  // Fix the Prev pointers.
660  for (Use *I = UseList, **Prev = &UseList; I; I = I->Next) {
661    I->setPrev(Prev);
662    Prev = &I->Next;
663  }
664}
665
666// isa - Provide some specializations of isa so that we don't have to include
667// the subtype header files to test to see if the value is a subclass...
668//
669template <> struct isa_impl<Constant, Value> {
670  static inline bool doit(const Value &Val) {
671    return Val.getValueID() >= Value::ConstantFirstVal &&
672      Val.getValueID() <= Value::ConstantLastVal;
673  }
674};
675
676template <> struct isa_impl<Argument, Value> {
677  static inline bool doit (const Value &Val) {
678    return Val.getValueID() == Value::ArgumentVal;
679  }
680};
681
682template <> struct isa_impl<InlineAsm, Value> {
683  static inline bool doit(const Value &Val) {
684    return Val.getValueID() == Value::InlineAsmVal;
685  }
686};
687
688template <> struct isa_impl<Instruction, Value> {
689  static inline bool doit(const Value &Val) {
690    return Val.getValueID() >= Value::InstructionVal;
691  }
692};
693
694template <> struct isa_impl<BasicBlock, Value> {
695  static inline bool doit(const Value &Val) {
696    return Val.getValueID() == Value::BasicBlockVal;
697  }
698};
699
700template <> struct isa_impl<Function, Value> {
701  static inline bool doit(const Value &Val) {
702    return Val.getValueID() == Value::FunctionVal;
703  }
704};
705
706template <> struct isa_impl<GlobalVariable, Value> {
707  static inline bool doit(const Value &Val) {
708    return Val.getValueID() == Value::GlobalVariableVal;
709  }
710};
711
712template <> struct isa_impl<GlobalAlias, Value> {
713  static inline bool doit(const Value &Val) {
714    return Val.getValueID() == Value::GlobalAliasVal;
715  }
716};
717
718template <> struct isa_impl<GlobalValue, Value> {
719  static inline bool doit(const Value &Val) {
720    return isa<GlobalObject>(Val) || isa<GlobalAlias>(Val);
721  }
722};
723
724template <> struct isa_impl<GlobalObject, Value> {
725  static inline bool doit(const Value &Val) {
726    return isa<GlobalVariable>(Val) || isa<Function>(Val);
727  }
728};
729
730// Value* is only 4-byte aligned.
731template<>
732class PointerLikeTypeTraits<Value*> {
733  typedef Value* PT;
734public:
735  static inline void *getAsVoidPointer(PT P) { return P; }
736  static inline PT getFromVoidPointer(void *P) {
737    return static_cast<PT>(P);
738  }
739  enum { NumLowBitsAvailable = 2 };
740};
741
742// Create wrappers for C Binding types (see CBindingWrapping.h).
743DEFINE_ISA_CONVERSION_FUNCTIONS(Value, LLVMValueRef)
744
745/* Specialized opaque value conversions.
746 */
747inline Value **unwrap(LLVMValueRef *Vals) {
748  return reinterpret_cast<Value**>(Vals);
749}
750
751template<typename T>
752inline T **unwrap(LLVMValueRef *Vals, unsigned Length) {
753#ifdef DEBUG
754  for (LLVMValueRef *I = Vals, *E = Vals + Length; I != E; ++I)
755    cast<T>(*I);
756#endif
757  (void)Length;
758  return reinterpret_cast<T**>(Vals);
759}
760
761inline LLVMValueRef *wrap(const Value **Vals) {
762  return reinterpret_cast<LLVMValueRef*>(const_cast<Value**>(Vals));
763}
764
765} // End llvm namespace
766
767#endif
768