1 //===- llvm/Value.h - Definition of the Value class -------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file declares the Value class.
12 //===----------------------------------------------------------------------===//
14 #ifndef LLVM_IR_VALUE_H
15 #define LLVM_IR_VALUE_H
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-c/Types.h"
33 class ConstantAggregate;
38 class GlobalIndirectSymbol;
46 class ModuleSlotTracker;
48 template<typename ValueTy> class StringMapEntry;
53 using ValueName = StringMapEntry<Value*>;
55 //===----------------------------------------------------------------------===//
57 //===----------------------------------------------------------------------===//
59 /// \brief LLVM Value Representation
61 /// This is a very important LLVM class. It is the base class of all values
62 /// computed by a program that may be used as operands to other values. Value is
63 /// the super class of other important classes such as Instruction and Function.
64 /// All Values have a Type. Type is not a subclass of Value. Some values can
65 /// have a name and they belong to some Module. Setting the name on the Value
66 /// automatically updates the module's symbol table.
68 /// Every value has a "use list" that keeps track of which other Values are
69 /// using this Value. A Value can also have an arbitrary number of ValueHandle
70 /// objects that watch it and listen to RAUW and Destroy events. See
71 /// llvm/IR/ValueHandle.h for details.
73 // The least-significant bit of the first word of Value *must* be zero:
74 // http://www.llvm.org/docs/ProgrammersManual.html#the-waymarking-algorithm
78 friend class ValueAsMetadata; // Allow access to IsUsedByMD.
79 friend class ValueHandleBase;
81 const unsigned char SubclassID; // Subclass identifier (for isa/dyn_cast)
82 unsigned char HasValueHandle : 1; // Has a ValueHandle pointing to this?
85 /// \brief Hold subclass data that can be dropped.
87 /// This member is similar to SubclassData, however it is for holding
88 /// information which may be used to aid optimization, but which may be
89 /// cleared to zero without affecting conservative interpretation.
90 unsigned char SubclassOptionalData : 7;
93 /// \brief Hold arbitrary subclass data.
95 /// This member is defined by this class, but is not used for anything.
96 /// Subclasses can use it to hold whatever state they find useful. This
97 /// field is initialized to zero by the ctor.
98 unsigned short SubclassData;
101 /// \brief The number of operands in the subclass.
103 /// This member is defined by this class, but not used for anything.
104 /// Subclasses can use it to store their number of operands, if they have
107 /// This is stored here to save space in User on 64-bit hosts. Since most
108 /// instances of Value have operands, 32-bit hosts aren't significantly
111 /// Note, this should *NOT* be used directly by any class other than User.
112 /// User uses this value to find the Use list.
113 enum : unsigned { NumUserOperandsBits = 28 };
114 unsigned NumUserOperands : NumUserOperandsBits;
116 // Use the same type as the bitfield above so that MSVC will pack them.
117 unsigned IsUsedByMD : 1;
118 unsigned HasName : 1;
119 unsigned HasHungOffUses : 1;
120 unsigned HasDescriptor : 1;
123 template <typename UseT> // UseT == 'Use' or 'const Use'
124 class use_iterator_impl
125 : public std::iterator<std::forward_iterator_tag, UseT *> {
130 explicit use_iterator_impl(UseT *u) : U(u) {}
133 use_iterator_impl() : U() {}
135 bool operator==(const use_iterator_impl &x) const { return U == x.U; }
136 bool operator!=(const use_iterator_impl &x) const { return !operator==(x); }
138 use_iterator_impl &operator++() { // Preincrement
139 assert(U && "Cannot increment end iterator!");
144 use_iterator_impl operator++(int) { // Postincrement
150 UseT &operator*() const {
151 assert(U && "Cannot dereference end iterator!");
155 UseT *operator->() const { return &operator*(); }
157 operator use_iterator_impl<const UseT>() const {
158 return use_iterator_impl<const UseT>(U);
162 template <typename UserTy> // UserTy == 'User' or 'const User'
163 class user_iterator_impl
164 : public std::iterator<std::forward_iterator_tag, UserTy *> {
165 use_iterator_impl<Use> UI;
166 explicit user_iterator_impl(Use *U) : UI(U) {}
170 user_iterator_impl() = default;
172 bool operator==(const user_iterator_impl &x) const { return UI == x.UI; }
173 bool operator!=(const user_iterator_impl &x) const { return !operator==(x); }
175 /// \brief Returns true if this iterator is equal to user_end() on the value.
176 bool atEnd() const { return *this == user_iterator_impl(); }
178 user_iterator_impl &operator++() { // Preincrement
183 user_iterator_impl operator++(int) { // Postincrement
189 // Retrieve a pointer to the current User.
190 UserTy *operator*() const {
191 return UI->getUser();
194 UserTy *operator->() const { return operator*(); }
196 operator user_iterator_impl<const UserTy>() const {
197 return user_iterator_impl<const UserTy>(*UI);
200 Use &getUse() const { return *UI; }
204 Value(Type *Ty, unsigned scid);
206 /// Value's destructor should be virtual by design, but that would require
207 /// that Value and all of its subclasses have a vtable that effectively
208 /// duplicates the information in the value ID. As a size optimization, the
209 /// destructor has been protected, and the caller should manually call
211 ~Value(); // Use deleteValue() to delete a generic Value.
214 Value(const Value &) = delete;
215 void operator=(const Value &) = delete;
217 /// Delete a pointer to a generic Value.
220 /// \brief Support for debugging, callable in GDB: V->dump()
223 /// \brief Implement operator<< on Value.
225 void print(raw_ostream &O, bool IsForDebug = false) const;
226 void print(raw_ostream &O, ModuleSlotTracker &MST,
227 bool IsForDebug = false) const;
230 /// \brief Print the name of this Value out to the specified raw_ostream.
232 /// This is useful when you just want to print 'int %reg126', not the
233 /// instruction that generated it. If you specify a Module for context, then
234 /// even constanst get pretty-printed; for example, the type of a null
235 /// pointer is printed symbolically.
237 void printAsOperand(raw_ostream &O, bool PrintType = true,
238 const Module *M = nullptr) const;
239 void printAsOperand(raw_ostream &O, bool PrintType,
240 ModuleSlotTracker &MST) const;
243 /// \brief All values are typed, get the type of this value.
244 Type *getType() const { return VTy; }
246 /// \brief All values hold a context through their type.
247 LLVMContext &getContext() const;
249 // \brief All values can potentially be named.
250 bool hasName() const { return HasName; }
251 ValueName *getValueName() const;
252 void setValueName(ValueName *VN);
255 void destroyValueName();
256 void doRAUW(Value *New, bool NoMetadata);
257 void setNameImpl(const Twine &Name);
260 /// \brief Return a constant reference to the value's name.
262 /// This guaranteed to return the same reference as long as the value is not
263 /// modified. If the value has a name, this does a hashtable lookup, so it's
265 StringRef getName() const;
267 /// \brief Change the name of the value.
269 /// Choose a new unique name if the provided name is taken.
271 /// \param Name The new name; or "" if the value's name should be removed.
272 void setName(const Twine &Name);
274 /// \brief Transfer the name from V to this value.
276 /// After taking V's name, sets V's name to empty.
278 /// \note It is an error to call V->takeName(V).
279 void takeName(Value *V);
281 /// \brief Change all uses of this to point to a new Value.
283 /// Go through the uses list for this definition and make each use point to
284 /// "V" instead of "this". After this completes, 'this's use list is
285 /// guaranteed to be empty.
286 void replaceAllUsesWith(Value *V);
288 /// \brief Change non-metadata uses of this to point to a new Value.
290 /// Go through the uses list for this definition and make each use point to
291 /// "V" instead of "this". This function skips metadata entries in the list.
292 void replaceNonMetadataUsesWith(Value *V);
294 /// replaceUsesOutsideBlock - Go through the uses list for this definition and
295 /// make each use point to "V" instead of "this" when the use is outside the
296 /// block. 'This's use list is expected to have at least one element.
297 /// Unlike replaceAllUsesWith this function does not support basic block
298 /// values or constant users.
299 void replaceUsesOutsideBlock(Value *V, BasicBlock *BB);
301 //----------------------------------------------------------------------
302 // Methods for handling the chain of uses of this Value.
304 // Materializing a function can introduce new uses, so these methods come in
306 // The methods that start with materialized_ check the uses that are
307 // currently known given which functions are materialized. Be very careful
308 // when using them since you might not get all uses.
309 // The methods that don't start with materialized_ assert that modules is
310 // fully materialized.
311 void assertModuleIsMaterializedImpl() const;
312 // This indirection exists so we can keep assertModuleIsMaterializedImpl()
313 // around in release builds of Value.cpp to be linked with other code built
314 // in debug mode. But this avoids calling it in any of the release built code.
315 void assertModuleIsMaterialized() const {
317 assertModuleIsMaterializedImpl();
321 bool use_empty() const {
322 assertModuleIsMaterialized();
323 return UseList == nullptr;
326 using use_iterator = use_iterator_impl<Use>;
327 using const_use_iterator = use_iterator_impl<const Use>;
329 use_iterator materialized_use_begin() { return use_iterator(UseList); }
330 const_use_iterator materialized_use_begin() const {
331 return const_use_iterator(UseList);
333 use_iterator use_begin() {
334 assertModuleIsMaterialized();
335 return materialized_use_begin();
337 const_use_iterator use_begin() const {
338 assertModuleIsMaterialized();
339 return materialized_use_begin();
341 use_iterator use_end() { return use_iterator(); }
342 const_use_iterator use_end() const { return const_use_iterator(); }
343 iterator_range<use_iterator> materialized_uses() {
344 return make_range(materialized_use_begin(), use_end());
346 iterator_range<const_use_iterator> materialized_uses() const {
347 return make_range(materialized_use_begin(), use_end());
349 iterator_range<use_iterator> uses() {
350 assertModuleIsMaterialized();
351 return materialized_uses();
353 iterator_range<const_use_iterator> uses() const {
354 assertModuleIsMaterialized();
355 return materialized_uses();
358 bool user_empty() const {
359 assertModuleIsMaterialized();
360 return UseList == nullptr;
363 using user_iterator = user_iterator_impl<User>;
364 using const_user_iterator = user_iterator_impl<const User>;
366 user_iterator materialized_user_begin() { return user_iterator(UseList); }
367 const_user_iterator materialized_user_begin() const {
368 return const_user_iterator(UseList);
370 user_iterator user_begin() {
371 assertModuleIsMaterialized();
372 return materialized_user_begin();
374 const_user_iterator user_begin() const {
375 assertModuleIsMaterialized();
376 return materialized_user_begin();
378 user_iterator user_end() { return user_iterator(); }
379 const_user_iterator user_end() const { return const_user_iterator(); }
381 assertModuleIsMaterialized();
382 return *materialized_user_begin();
384 const User *user_back() const {
385 assertModuleIsMaterialized();
386 return *materialized_user_begin();
388 iterator_range<user_iterator> materialized_users() {
389 return make_range(materialized_user_begin(), user_end());
391 iterator_range<const_user_iterator> materialized_users() const {
392 return make_range(materialized_user_begin(), user_end());
394 iterator_range<user_iterator> users() {
395 assertModuleIsMaterialized();
396 return materialized_users();
398 iterator_range<const_user_iterator> users() const {
399 assertModuleIsMaterialized();
400 return materialized_users();
403 /// \brief Return true if there is exactly one user of this value.
405 /// This is specialized because it is a common request and does not require
406 /// traversing the whole use list.
407 bool hasOneUse() const {
408 const_use_iterator I = use_begin(), E = use_end();
409 if (I == E) return false;
413 /// \brief Return true if this Value has exactly N users.
414 bool hasNUses(unsigned N) const;
416 /// \brief Return true if this value has N users or more.
418 /// This is logically equivalent to getNumUses() >= N.
419 bool hasNUsesOrMore(unsigned N) const;
421 /// \brief Check if this value is used in the specified basic block.
422 bool isUsedInBasicBlock(const BasicBlock *BB) const;
424 /// \brief This method computes the number of uses of this Value.
426 /// This is a linear time operation. Use hasOneUse, hasNUses, or
427 /// hasNUsesOrMore to check for specific values.
428 unsigned getNumUses() const;
430 /// \brief This method should only be used by the Use class.
431 void addUse(Use &U) { U.addToList(&UseList); }
433 /// \brief Concrete subclass of this.
435 /// An enumeration for keeping track of the concrete subclass of Value that
436 /// is actually instantiated. Values of this enumeration are kept in the
437 /// Value classes SubclassID field. They are used for concrete type
440 #define HANDLE_VALUE(Name) Name##Val,
441 #include "llvm/IR/Value.def"
444 #define HANDLE_CONSTANT_MARKER(Marker, Constant) Marker = Constant##Val,
445 #include "llvm/IR/Value.def"
448 /// \brief Return an ID for the concrete type of this object.
450 /// This is used to implement the classof checks. This should not be used
451 /// for any other purpose, as the values may change as LLVM evolves. Also,
452 /// note that for instructions, the Instruction's opcode is added to
453 /// InstructionVal. So this means three things:
454 /// # there is no value with code InstructionVal (no opcode==0).
455 /// # there are more possible values for the value type than in ValueTy enum.
456 /// # the InstructionVal enumerator must be the highest valued enumerator in
457 /// the ValueTy enum.
458 unsigned getValueID() const {
462 /// \brief Return the raw optional flags value contained in this value.
464 /// This should only be used when testing two Values for equivalence.
465 unsigned getRawSubclassOptionalData() const {
466 return SubclassOptionalData;
469 /// \brief Clear the optional flags contained in this value.
470 void clearSubclassOptionalData() {
471 SubclassOptionalData = 0;
474 /// \brief Check the optional flags for equality.
475 bool hasSameSubclassOptionalData(const Value *V) const {
476 return SubclassOptionalData == V->SubclassOptionalData;
479 /// \brief Return true if there is a value handle associated with this value.
480 bool hasValueHandle() const { return HasValueHandle; }
482 /// \brief Return true if there is metadata referencing this value.
483 bool isUsedByMetadata() const { return IsUsedByMD; }
485 /// \brief Return true if this value is a swifterror value.
487 /// swifterror values can be either a function argument or an alloca with a
488 /// swifterror attribute.
489 bool isSwiftError() const;
491 /// \brief Strip off pointer casts, all-zero GEPs, and aliases.
493 /// Returns the original uncasted value. If this is called on a non-pointer
494 /// value, it returns 'this'.
495 const Value *stripPointerCasts() const;
496 Value *stripPointerCasts() {
497 return const_cast<Value *>(
498 static_cast<const Value *>(this)->stripPointerCasts());
501 /// \brief Strip off pointer casts, all-zero GEPs, aliases and barriers.
503 /// Returns the original uncasted value. If this is called on a non-pointer
504 /// value, it returns 'this'. This function should be used only in
506 const Value *stripPointerCastsAndBarriers() const;
507 Value *stripPointerCastsAndBarriers() {
508 return const_cast<Value *>(
509 static_cast<const Value *>(this)->stripPointerCastsAndBarriers());
512 /// \brief Strip off pointer casts and all-zero GEPs.
514 /// Returns the original uncasted value. If this is called on a non-pointer
515 /// value, it returns 'this'.
516 const Value *stripPointerCastsNoFollowAliases() const;
517 Value *stripPointerCastsNoFollowAliases() {
518 return const_cast<Value *>(
519 static_cast<const Value *>(this)->stripPointerCastsNoFollowAliases());
522 /// \brief Strip off pointer casts and all-constant inbounds GEPs.
524 /// Returns the original pointer value. If this is called on a non-pointer
525 /// value, it returns 'this'.
526 const Value *stripInBoundsConstantOffsets() const;
527 Value *stripInBoundsConstantOffsets() {
528 return const_cast<Value *>(
529 static_cast<const Value *>(this)->stripInBoundsConstantOffsets());
532 /// \brief Accumulate offsets from \a stripInBoundsConstantOffsets().
534 /// Stores the resulting constant offset stripped into the APInt provided.
535 /// The provided APInt will be extended or truncated as needed to be the
536 /// correct bitwidth for an offset of this pointer type.
538 /// If this is called on a non-pointer value, it returns 'this'.
539 const Value *stripAndAccumulateInBoundsConstantOffsets(const DataLayout &DL,
540 APInt &Offset) const;
541 Value *stripAndAccumulateInBoundsConstantOffsets(const DataLayout &DL,
543 return const_cast<Value *>(static_cast<const Value *>(this)
544 ->stripAndAccumulateInBoundsConstantOffsets(DL, Offset));
547 /// \brief Strip off pointer casts and inbounds GEPs.
549 /// Returns the original pointer value. If this is called on a non-pointer
550 /// value, it returns 'this'.
551 const Value *stripInBoundsOffsets() const;
552 Value *stripInBoundsOffsets() {
553 return const_cast<Value *>(
554 static_cast<const Value *>(this)->stripInBoundsOffsets());
557 /// \brief Returns the number of bytes known to be dereferenceable for the
560 /// If CanBeNull is set by this function the pointer can either be null or be
561 /// dereferenceable up to the returned number of bytes.
562 unsigned getPointerDereferenceableBytes(const DataLayout &DL,
563 bool &CanBeNull) const;
565 /// \brief Returns an alignment of the pointer value.
567 /// Returns an alignment which is either specified explicitly, e.g. via
568 /// align attribute of a function argument, or guaranteed by DataLayout.
569 unsigned getPointerAlignment(const DataLayout &DL) const;
571 /// \brief Translate PHI node to its predecessor from the given basic block.
573 /// If this value is a PHI node with CurBB as its parent, return the value in
574 /// the PHI node corresponding to PredBB. If not, return ourself. This is
575 /// useful if you want to know the value something has in a predecessor
577 const Value *DoPHITranslation(const BasicBlock *CurBB,
578 const BasicBlock *PredBB) const;
579 Value *DoPHITranslation(const BasicBlock *CurBB, const BasicBlock *PredBB) {
580 return const_cast<Value *>(
581 static_cast<const Value *>(this)->DoPHITranslation(CurBB, PredBB));
584 /// \brief The maximum alignment for instructions.
586 /// This is the greatest alignment value supported by load, store, and alloca
587 /// instructions, and global values.
588 static const unsigned MaxAlignmentExponent = 29;
589 static const unsigned MaximumAlignment = 1u << MaxAlignmentExponent;
591 /// \brief Mutate the type of this Value to be of the specified type.
593 /// Note that this is an extremely dangerous operation which can create
594 /// completely invalid IR very easily. It is strongly recommended that you
595 /// recreate IR objects with the right types instead of mutating them in
597 void mutateType(Type *Ty) {
601 /// \brief Sort the use-list.
603 /// Sorts the Value's use-list by Cmp using a stable mergesort. Cmp is
604 /// expected to compare two \a Use references.
605 template <class Compare> void sortUseList(Compare Cmp);
607 /// \brief Reverse the use-list.
608 void reverseUseList();
611 /// \brief Merge two lists together.
613 /// Merges \c L and \c R using \c Cmp. To enable stable sorts, always pushes
614 /// "equal" items from L before items from R.
616 /// \return the first element in the list.
618 /// \note Completely ignores \a Use::Prev (doesn't read, doesn't update).
619 template <class Compare>
620 static Use *mergeUseLists(Use *L, Use *R, Compare Cmp) {
622 Use **Next = &Merged;
647 /// \brief Tail-recursive helper for \a mergeUseLists().
649 /// \param[out] Next the first element in the list.
650 template <class Compare>
651 static void mergeUseListsImpl(Use *L, Use *R, Use **Next, Compare Cmp);
654 unsigned short getSubclassDataFromValue() const { return SubclassData; }
655 void setValueSubclassData(unsigned short D) { SubclassData = D; }
658 struct ValueDeleter { void operator()(Value *V) { V->deleteValue(); } };
660 /// Use this instead of std::unique_ptr<Value> or std::unique_ptr<Instruction>.
661 /// Those don't work because Value and Instruction's destructors are protected,
662 /// aren't virtual, and won't destroy the complete object.
663 typedef std::unique_ptr<Value, ValueDeleter> unique_value;
665 inline raw_ostream &operator<<(raw_ostream &OS, const Value &V) {
670 void Use::set(Value *V) {
671 if (Val) removeFromList();
673 if (V) V->addUse(*this);
676 Value *Use::operator=(Value *RHS) {
681 const Use &Use::operator=(const Use &RHS) {
686 template <class Compare> void Value::sortUseList(Compare Cmp) {
687 if (!UseList || !UseList->Next)
688 // No need to sort 0 or 1 uses.
691 // Note: this function completely ignores Prev pointers until the end when
692 // they're fixed en masse.
694 // Create a binomial vector of sorted lists, visiting uses one at a time and
695 // merging lists as necessary.
696 const unsigned MaxSlots = 32;
697 Use *Slots[MaxSlots];
699 // Collect the first use, turning it into a single-item list.
700 Use *Next = UseList->Next;
701 UseList->Next = nullptr;
702 unsigned NumSlots = 1;
705 // Collect all but the last use.
708 Next = Current->Next;
710 // Turn Current into a single-item list.
711 Current->Next = nullptr;
713 // Save Current in the first available slot, merging on collisions.
715 for (I = 0; I < NumSlots; ++I) {
719 // Merge two lists, doubling the size of Current and emptying slot I.
721 // Since the uses in Slots[I] originally preceded those in Current, send
722 // Slots[I] in as the left parameter to maintain a stable sort.
723 Current = mergeUseLists(Slots[I], Current, Cmp);
726 // Check if this is a new slot.
729 assert(NumSlots <= MaxSlots && "Use list bigger than 2^32");
732 // Found an open slot.
736 // Merge all the lists together.
737 assert(Next && "Expected one more Use");
738 assert(!Next->Next && "Expected only one Use");
740 for (unsigned I = 0; I < NumSlots; ++I)
742 // Since the uses in Slots[I] originally preceded those in UseList, send
743 // Slots[I] in as the left parameter to maintain a stable sort.
744 UseList = mergeUseLists(Slots[I], UseList, Cmp);
746 // Fix the Prev pointers.
747 for (Use *I = UseList, **Prev = &UseList; I; I = I->Next) {
753 // isa - Provide some specializations of isa so that we don't have to include
754 // the subtype header files to test to see if the value is a subclass...
756 template <> struct isa_impl<Constant, Value> {
757 static inline bool doit(const Value &Val) {
758 return Val.getValueID() >= Value::ConstantFirstVal &&
759 Val.getValueID() <= Value::ConstantLastVal;
763 template <> struct isa_impl<ConstantData, Value> {
764 static inline bool doit(const Value &Val) {
765 return Val.getValueID() >= Value::ConstantDataFirstVal &&
766 Val.getValueID() <= Value::ConstantDataLastVal;
770 template <> struct isa_impl<ConstantAggregate, Value> {
771 static inline bool doit(const Value &Val) {
772 return Val.getValueID() >= Value::ConstantAggregateFirstVal &&
773 Val.getValueID() <= Value::ConstantAggregateLastVal;
777 template <> struct isa_impl<Argument, Value> {
778 static inline bool doit (const Value &Val) {
779 return Val.getValueID() == Value::ArgumentVal;
783 template <> struct isa_impl<InlineAsm, Value> {
784 static inline bool doit(const Value &Val) {
785 return Val.getValueID() == Value::InlineAsmVal;
789 template <> struct isa_impl<Instruction, Value> {
790 static inline bool doit(const Value &Val) {
791 return Val.getValueID() >= Value::InstructionVal;
795 template <> struct isa_impl<BasicBlock, Value> {
796 static inline bool doit(const Value &Val) {
797 return Val.getValueID() == Value::BasicBlockVal;
801 template <> struct isa_impl<Function, Value> {
802 static inline bool doit(const Value &Val) {
803 return Val.getValueID() == Value::FunctionVal;
807 template <> struct isa_impl<GlobalVariable, Value> {
808 static inline bool doit(const Value &Val) {
809 return Val.getValueID() == Value::GlobalVariableVal;
813 template <> struct isa_impl<GlobalAlias, Value> {
814 static inline bool doit(const Value &Val) {
815 return Val.getValueID() == Value::GlobalAliasVal;
819 template <> struct isa_impl<GlobalIFunc, Value> {
820 static inline bool doit(const Value &Val) {
821 return Val.getValueID() == Value::GlobalIFuncVal;
825 template <> struct isa_impl<GlobalIndirectSymbol, Value> {
826 static inline bool doit(const Value &Val) {
827 return isa<GlobalAlias>(Val) || isa<GlobalIFunc>(Val);
831 template <> struct isa_impl<GlobalValue, Value> {
832 static inline bool doit(const Value &Val) {
833 return isa<GlobalObject>(Val) || isa<GlobalIndirectSymbol>(Val);
837 template <> struct isa_impl<GlobalObject, Value> {
838 static inline bool doit(const Value &Val) {
839 return isa<GlobalVariable>(Val) || isa<Function>(Val);
843 // Create wrappers for C Binding types (see CBindingWrapping.h).
844 DEFINE_ISA_CONVERSION_FUNCTIONS(Value, LLVMValueRef)
846 // Specialized opaque value conversions.
847 inline Value **unwrap(LLVMValueRef *Vals) {
848 return reinterpret_cast<Value**>(Vals);
852 inline T **unwrap(LLVMValueRef *Vals, unsigned Length) {
854 for (LLVMValueRef *I = Vals, *E = Vals + Length; I != E; ++I)
855 unwrap<T>(*I); // For side effect of calling assert on invalid usage.
858 return reinterpret_cast<T**>(Vals);
861 inline LLVMValueRef *wrap(const Value **Vals) {
862 return reinterpret_cast<LLVMValueRef*>(const_cast<Value**>(Vals));
865 } // end namespace llvm
867 #endif // LLVM_IR_VALUE_H