LLVM: include/llvm/IR/Value.h Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
13#ifndef LLVM_IR_VALUE_H
14#define LLVM_IR_VALUE_H
15
25#include
26#include
27#include
28
29namespace llvm {
30
55
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
76 const unsigned char SubclassID;
77 unsigned char HasValueHandle : 1;
78
79protected:
80
81
82
83
84
86
87private:
88
89
90
91
92
93 unsigned short SubclassData;
94
95protected:
96
97
98
99
100
101
102
103
104
105
106
107
110
111
114 unsigned HasMetadata : 1;
117
118private:
120 Use *UseList = nullptr;
121
124
125 template
126 class use_iterator_impl {
127 friend class Value;
128
129 UseT *U;
130
131 explicit use_iterator_impl(UseT *u) : U(u) {}
132
133 public:
134 using iterator_category = std::forward_iterator_tag;
135 using value_type = UseT;
136 using difference_type = std::ptrdiff_t;
137 using pointer = value_type *;
138 using reference = value_type &;
139
140 use_iterator_impl() : U() {}
141
142 bool operator==(const use_iterator_impl &x) const { return U == x.U; }
143 bool operator!=(const use_iterator_impl &x) const { return (x); }
144
145 use_iterator_impl &operator++() {
146 assert(U && "Cannot increment end iterator!");
147 U = U->getNext();
148 return *this;
149 }
150
151 use_iterator_impl operator++(int) {
152 auto tmp = *this;
153 ++*this;
154 return tmp;
155 }
156
157 UseT &operator*() const {
158 assert(U && "Cannot dereference end iterator!");
159 return *U;
160 }
161
162 UseT *operator->() const { return &operator*(); }
163
164 operator use_iterator_impl() const {
165 return use_iterator_impl(U);
166 }
167 };
168
169 template
170 class user_iterator_impl {
171 use_iterator_impl UI;
172 explicit user_iterator_impl(Use *U) : UI(U) {}
173 friend class Value;
174
175 public:
176 using iterator_category = std::forward_iterator_tag;
177 using value_type = UserTy *;
178 using difference_type = std::ptrdiff_t;
179 using pointer = value_type *;
180 using reference = value_type &;
181
182 user_iterator_impl() = default;
183
184 bool operator==(const user_iterator_impl &x) const { return UI == x.UI; }
185 bool operator!=(const user_iterator_impl &x) const { return (x); }
186
187
188 bool atEnd() const { return *this == user_iterator_impl(); }
189
190 user_iterator_impl &operator++() {
191 ++UI;
192 return *this;
193 }
194
195 user_iterator_impl operator++(int) {
196 auto tmp = *this;
197 ++*this;
198 return tmp;
199 }
200
201
202 UserTy *operator*() const {
203 return UI->getUser();
204 }
205
206 UserTy *operator->() const { return operator*(); }
207
208 operator user_iterator_impl() const {
209 return user_iterator_impl(*UI);
210 }
211
212 Use &getUse() const { return *UI; }
213 };
214
215protected:
217
218
219
220
221
222
224
225public:
228
229
231
232
234
235
236
239 bool IsForDebug = false) const;
240
241
242
243
244
245
246
247
248
250 const Module *M = nullptr) const;
253
254
255
257
258
260
261
265
266private:
267 void destroyValueName();
268 enum class ReplaceMetadataUses { No, Yes };
269 void doRAUW(Value *New, ReplaceMetadataUses);
270 void setNameImpl(const Twine &Name);
271
272public:
273
274
275
276
277
279
280
281
282
283
284
286
287
288
289
290
291
293
295
296
297
298
299
300
302
303
304
305
306
308
309
310
311
312
315
316
317
318
319
320
322
323
324
325
326
327
328
329
330
331
332
334
335
336
338#ifndef NDEBUG
340#endif
341 }
342
343
345
348 return UseList == nullptr;
349 }
350
352
355
388
390
393
434
435
436
437
438
440
441
443
444
445
446
448
449
450
451
452
453
454
455
456
458
459
460
465
466
467
472
473
474
475
476
478
479
480
481
483
484
485
486
487
488
489
490
493 [](const Use *) { return true; });
494
495
497
498
500
501
502
503
505
506
507
508
509
511
512
515 U.addToList(&UseList);
516 }
517
518
519
520
521
522
523
525#define HANDLE_VALUE(Name) Name##Val,
526#include "llvm/IR/Value.def"
527
528
529#define HANDLE_CONSTANT_MARKER(Marker, Constant) Marker = Constant##Val,
530#include "llvm/IR/Value.def"
531 };
532
533
534
535
536
537
538
539
540
541
542
544 return SubclassID;
545 }
546
547
548
549
553
554
558
559
563
564
566
567
569
570protected:
571
572
573
574
575
578 return nullptr;
580 }
582
583
584
585
586
587
592
593
594
595
596
597
600
601
603
604
605
612
613
614
615
616
617
618
621
622
623
624
627
628
629
630
631
633
634
636
637
639
640
641
642
644
645public:
646
647
648
649
651
652
653
654
655
658 return const_cast<Value *>(
659 static_cast<const Value *>(this)->stripPointerCasts());
660 }
661
662
663
664
665
668 return const_cast<Value *>(
669 static_cast<const Value *>(this)->stripPointerCastsAndAliases());
670 }
671
672
673
674
675
676
679 return const_cast<Value *>(static_cast<const Value *>(this)
680 ->stripPointerCastsSameRepresentation());
681 }
682
683
684
685
686
687
688
691 return const_cast<Value *>(static_cast<const Value *>(this)
692 ->stripPointerCastsForAliasAnalysis());
693 }
694
695
696
697
698
701 return const_cast<Value *>(
702 static_cast<const Value *>(this)->stripInBoundsConstantOffsets());
703 }
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
740 bool AllowInvariantGroup = false,
742 nullptr,
743 bool LookThroughIntToPtr = false) const;
744
747 bool AllowInvariantGroup = false,
749 nullptr,
750 bool LookThroughIntToPtr = false) {
751 return const_cast<Value *>(
752 static_cast<const Value *>(this)->stripAndAccumulateConstantOffsets(
753 DL, Offset, AllowNonInbounds, AllowInvariantGroup, ExternalAnalysis,
754 LookThroughIntToPtr));
755 }
756
757
758
769
770
771
772
773
777 [](const Value *) {}) {
778 return const_cast<Value *>(
780 }
781
782
783
784 LLVM_ABI std::optional<int64_t>
786
787
788
789
790
792
793
794
795
796
797
798
799
800
801
803 bool &CanBeNull,
804 bool &CanBeFreed) const;
805
806
807
808
809
811
812
813
814
815
816
817
819 const BasicBlock *PredBB) const;
821 return const_cast<Value *>(
822 static_cast<const Value *>(this)->DoPHITranslation(CurBB, PredBB));
823 }
824
825
826
827
828
831
832
833
834
835
836
837
841
842
843
844
845
846 template void sortUseList(Compare Cmp);
847
848
850
851private:
852
853
854
855
856
857
858
859
860 template
861 static Use *mergeUseLists(Use *L, Use *R, Compare Cmp) {
862 Use *Merged;
864
865 while (true) {
866 if (!L) {
868 break;
869 }
870 if (!R) {
872 break;
873 }
874 if (Cmp(*R, *L)) {
878 } else {
882 }
883 }
884
885 return Merged;
886 }
887
888protected:
891};
892
894
895
896
897
898using unique_value = std::unique_ptr<Value, ValueDeleter>;
899
901 V.print(OS);
902 return OS;
903}
904
906 removeFromList();
907 Val = V;
908 if (V)
909 V->addUse(*this);
910}
911
916
921
923 if (!UseList || !UseList->Next)
924
925 return;
926
927
928
929
930
931
932 const unsigned MaxSlots = 32;
933 Use *Slots[MaxSlots];
934
935
936 Use *Next = UseList->Next;
937 UseList->Next = nullptr;
938 unsigned NumSlots = 1;
939 Slots[0] = UseList;
940
941
942 while (Next->Next) {
944 Next = Current->Next;
945
946
947 Current->Next = nullptr;
948
949
950 unsigned I;
951 for (I = 0; I < NumSlots; ++I) {
952 if (!Slots[I])
953 break;
954
955
956
957
958
959 Current = mergeUseLists(Slots[I], Current, Cmp);
960 Slots[I] = nullptr;
961 }
962
963 if (I == NumSlots) {
964 ++NumSlots;
965 assert(NumSlots <= MaxSlots && "Use list bigger than 2^32");
966 }
967
968
969 Slots[I] = Current;
970 }
971
972
973 assert(Next && "Expected one more Use");
974 assert(->Next && "Expected only one Use");
975 UseList = Next;
976 for (unsigned I = 0; I < NumSlots; ++I)
977 if (Slots[I])
978
979
980 UseList = mergeUseLists(Slots[I], UseList, Cmp);
981
982
983 for (Use *I = UseList, **Prev = &UseList; I; I = I->Next) {
984 I->Prev = Prev;
985 Prev = &I->Next;
986 }
987}
988
989
990
991
994 static_assert(Value::ConstantFirstVal == 0,
995 "Val.getValueID() >= Value::ConstantFirstVal");
996 return Val.getValueID() <= Value::ConstantLastVal;
997 }
998};
999
1002 static_assert(Value::ConstantDataFirstVal == 0,
1003 "Val.getValueID() >= Value::ConstantDataFirstVal");
1004 return Val.getValueID() <= Value::ConstantDataLastVal;
1005 }
1006};
1007
1010 return Val.getValueID() >= Value::ConstantAggregateFirstVal &&
1011 Val.getValueID() <= Value::ConstantAggregateLastVal;
1012 }
1013};
1014
1017 return Val.getValueID() == Value::ArgumentVal;
1018 }
1019};
1020
1023 return Val.getValueID() == Value::InlineAsmVal;
1024 }
1025};
1026
1029 return Val.getValueID() >= Value::InstructionVal;
1030 }
1031};
1032
1035 return Val.getValueID() == Value::BasicBlockVal;
1036 }
1037};
1038
1041 return Val.getValueID() == Value::FunctionVal;
1042 }
1043};
1044
1047 return Val.getValueID() == Value::GlobalVariableVal;
1048 }
1049};
1050
1053 return Val.getValueID() == Value::GlobalAliasVal;
1054 }
1055};
1056
1059 return Val.getValueID() == Value::GlobalIFuncVal;
1060 }
1061};
1062
1068
1075
1076
1078
1079
1081 return reinterpret_cast<Value**>(Vals);
1082}
1083
1084template
1086#ifndef NDEBUG
1089#endif
1091 return reinterpret_cast<T**>(Vals);
1092}
1093
1097
1098}
1099
1100#endif
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
MachineBasicBlock MachineBasicBlock::iterator DebugLoc DL
static GCRegistry::Add< StatepointGC > D("statepoint-example", "an example strategy for statepoint")
static GCRegistry::Add< CoreCLRGC > E("coreclr", "CoreCLR-compatible GC")
#define DEFINE_ISA_CONVERSION_FUNCTIONS(ty, ref)
This defines the Use class.
bool operator==(const MergedFunctionsInfo &LHS, const MergedFunctionsInfo &RHS)
Class for arbitrary precision integers.
This class represents an incoming formal argument to a Function.
LLVM Basic Block Representation.
Base class for aggregate constants (with operands).
Base class for constants with no operands.
This is an important base class in LLVM.
A parsed version of the target data layout string in and methods for querying it.
This is an important class for using LLVM in a threaded context.
Manage lifetime of a slot tracker for printing IR.
A Module instance is used to store all the information related to an LLVM module.
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
StringMapEntry - This is used to represent one value that is inserted into a StringMap.
StringRef - Represent a constant reference to a string, i.e.
Twine - A lightweight data structure for efficiently representing the concatenation of temporary valu...
The instances of the Type class are immutable: once they are created, they are never changed.
A Use represents the edge between a Value definition and its users.
LLVM_ABI void set(Value *Val)
Definition Value.h:905
LLVM_ABI Value * operator=(Value *RHS)
Definition Value.h:912
LLVM Value Representation.
Definition Value.h:75
iterator_range< user_iterator > materialized_users()
Definition Value.h:420
Type * getType() const
All values are typed, get the type of this value.
Definition Value.h:256
Value * stripInBoundsOffsets(function_ref< void(const Value *)> Func=[](const Value *) {})
Definition Value.h:776
unsigned short getSubclassDataFromValue() const
Definition Value.h:889
const_use_iterator materialized_use_begin() const
Definition Value.h:360
static constexpr uint64_t MaximumAlignment
Definition Value.h:830
Value * stripPointerCasts()
Definition Value.h:657
unsigned IsUsedByMD
Definition Value.h:112
bool hasMetadata(StringRef Kind) const
Definition Value.h:609
user_iterator_impl< const User > const_user_iterator
Definition Value.h:392
const Value * stripAndAccumulateInBoundsConstantOffsets(const DataLayout &DL, APInt &Offset) const
This is a wrapper around stripAndAccumulateConstantOffsets with the in-bounds requirement set to fals...
Definition Value.h:759
user_iterator user_begin()
Definition Value.h:402
LLVM_ABI const Value * DoPHITranslation(const BasicBlock *CurBB, const BasicBlock *PredBB) const
Translate PHI node to its predecessor from the given basic block.
unsigned HasName
Definition Value.h:113
LLVM_ABI Value(Type *Ty, unsigned scid)
@ NumUserOperandsBits
Definition Value.h:108
iterator_range< use_iterator > materialized_uses()
Definition Value.h:374
LLVM_ABI void print(raw_ostream &O, bool IsForDebug=false) const
Implement operator<< on Value.
use_iterator_impl< const Use > const_use_iterator
Definition Value.h:354
bool hasMetadata() const
Return true if this value has any metadata attached to it.
Definition Value.h:602
unsigned char SubclassOptionalData
Hold subclass data that can be dropped.
Definition Value.h:85
iterator_range< const_use_iterator > uses() const
Definition Value.h:384
const_use_iterator use_begin() const
Definition Value.h:368
iterator_range< const_user_iterator > materialized_users() const
Definition Value.h:423
LLVM_ABI void reverseUseList()
Reverse the use-list.
const User * getUniqueUndroppableUser() const
Definition Value.h:469
LLVM_ABI void assertModuleIsMaterializedImpl() const
LLVM_ABI bool hasNUndroppableUsesOrMore(unsigned N) const
Return true if this value has N uses or more.
LLVM_ABI bool hasOneUser() const
Return true if there is exactly one user of this value.
LLVM_ABI const Value * stripPointerCastsAndAliases() const
Strip off pointer casts, all-zero GEPs, address space casts, and aliases.
void assertModuleIsMaterialized() const
Definition Value.h:337
friend class ValueHandleBase
Definition Value.h:123
LLVM_ABI void setMetadata(unsigned KindID, MDNode *Node)
Set a particular kind of metadata attachment.
unsigned getRawSubclassOptionalData() const
Return the raw optional flags value contained in this value.
Definition Value.h:550
LLVM_ABI void setName(const Twine &Name)
Change the name of the value.
LLVM_ABI const Value * stripInBoundsConstantOffsets() const
Strip off pointer casts and all-constant inbounds GEPs.
LLVM_ABI std::string getNameOrAsOperand() const
bool hasOneUse() const
Return true if there is exactly one use of this value.
Definition Value.h:439
LLVM_ABI ~Value()
Value's destructor should be virtual by design, but that would require that Value and all of its subc...
LLVM_ABI void replaceAllUsesWith(Value *V)
Change all uses of this to point to a new Value.
friend class ValueAsMetadata
Definition Value.h:122
LLVM_ABI void getAllMetadata(SmallVectorImpl< std::pair< unsigned, MDNode * > > &MDs) const
Appends all metadata attached to this value to MDs, sorting by KindID.
LLVM_ABI const Value * stripInBoundsOffsets(function_ref< void(const Value *)> Func=[](const Value *) {}) const
Strip off pointer casts and inbounds GEPs.
iterator_range< user_iterator > users()
Definition Value.h:426
use_iterator use_begin()
Definition Value.h:364
static LLVM_ABI void dropDroppableUse(Use &U)
Remove the droppable use U.
void sortUseList(Compare Cmp)
Sort the use-list.
Definition Value.h:922
User * user_back()
Definition Value.h:412
iterator_range< const_user_iterator > users() const
Definition Value.h:430
LLVM_ABI Align getPointerAlignment(const DataLayout &DL) const
Returns an alignment of the pointer value.
void clearSubclassOptionalData()
Clear the optional flags contained in this value.
Definition Value.h:555
unsigned getValueID() const
Return an ID for the concrete type of this object.
Definition Value.h:543
Value * stripPointerCastsAndAliases()
Definition Value.h:667
LLVM_ABI bool isUsedInBasicBlock(const BasicBlock *BB) const
Check if this value is used in the specified basic block.
Value * stripAndAccumulateInBoundsConstantOffsets(const DataLayout &DL, APInt &Offset)
Definition Value.h:764
const User * user_back() const
Definition Value.h:416
LLVM_ABI MDNode * getMetadataImpl(unsigned KindID) const
Get metadata for the given kind, if any.
bool materialized_use_empty() const
Definition Value.h:351
LLVM_ABI void printAsOperand(raw_ostream &O, bool PrintType=true, const Module *M=nullptr) const
Print the name of this Value out to the specified raw_ostream.
bool hasUseList() const
Check if this Value has a use-list.
Definition Value.h:344
Value * stripAndAccumulateConstantOffsets(const DataLayout &DL, APInt &Offset, bool AllowNonInbounds, bool AllowInvariantGroup=false, function_ref< bool(Value &Value, APInt &Offset)> ExternalAnalysis=nullptr, bool LookThroughIntToPtr=false)
Definition Value.h:745
bool isUsedByMetadata() const
Return true if there is metadata referencing this value.
Definition Value.h:568
LLVM_ABI bool hasNUsesOrMore(unsigned N) const
Return true if this value has N uses or more.
LLVM_ABI void dropDroppableUsesIn(User &Usr)
Remove every use of this value in User that can safely be removed.
use_iterator materialized_use_begin()
Definition Value.h:356
LLVM_ABI Use * getSingleUndroppableUse()
Return true if there is exactly one use of this value that cannot be dropped.
LLVM_ABI bool canBeFreed() const
Return true if the memory object referred to by V can by freed in the scope for which the SSA value d...
LLVM_ABI bool hasNUses(unsigned N) const
Return true if this Value has exactly N uses.
LLVM_ABI void replaceUsesWithIf(Value *New, llvm::function_ref< bool(Use &U)> ShouldReplace)
Go through the uses list for this definition and make each use point to "V" if the callback ShouldRep...
Value(const Value &)=delete
iterator_range< const_use_iterator > materialized_uses() const
Definition Value.h:377
use_iterator_impl< Use > use_iterator
Definition Value.h:353
LLVM_ABI void setValueName(ValueName *VN)
LLVM_ABI User * getUniqueUndroppableUser()
Return true if there is exactly one unique user of this value that cannot be dropped (that user can h...
LLVM_ABI const Value * stripAndAccumulateConstantOffsets(const DataLayout &DL, APInt &Offset, bool AllowNonInbounds, bool AllowInvariantGroup=false, function_ref< bool(Value &Value, APInt &Offset)> ExternalAnalysis=nullptr, bool LookThroughIntToPtr=false) const
Accumulate the constant offset this value has compared to a base pointer.
LLVM_ABI const Value * stripPointerCasts() const
Strip off pointer casts, all-zero GEPs and address space casts.
LLVM_ABI bool isSwiftError() const
Return true if this value is a swifterror value.
LLVM_ABI void deleteValue()
Delete a pointer to a generic Value.
LLVM_ABI ValueName * getValueName() const
LLVM_ABI const Value * stripPointerCastsSameRepresentation() const
Strip off pointer casts, all-zero GEPs and address space casts but ensures the representation of the ...
bool use_empty() const
Definition Value.h:346
LLVM_ABI bool eraseMetadata(unsigned KindID)
Erase all metadata attachments with the given kind.
unsigned HasMetadata
Definition Value.h:114
LLVM_ABI void addMetadata(unsigned KindID, MDNode &MD)
Add a metadata attachment.
LLVM_ABI void dropDroppableUses(llvm::function_ref< bool(const Use *)> ShouldDrop=[](const Use *) { return true;})
Remove every uses that can safely be removed.
user_iterator user_end()
Definition Value.h:410
bool hasSameSubclassOptionalData(const Value *V) const
Check the optional flags for equality.
Definition Value.h:560
LLVM_ABI void replaceUsesOutsideBlock(Value *V, BasicBlock *BB)
replaceUsesOutsideBlock - Go through the uses list for this definition and make each use point to "V"...
void addUse(Use &U)
This method should only be used by the Use class.
Definition Value.h:513
void setValueSubclassData(unsigned short D)
Definition Value.h:890
LLVM_ABI void eraseMetadataIf(function_ref< bool(unsigned, MDNode *)> Pred)
Erase all metadata attachments matching the given predicate.
Value * DoPHITranslation(const BasicBlock *CurBB, const BasicBlock *PredBB)
Definition Value.h:820
LLVM_ABI LLVMContext & getContext() const
All values hold a context through their type.
static constexpr unsigned MaxAlignmentExponent
The maximum alignment for instructions.
Definition Value.h:829
bool hasValueHandle() const
Return true if there is a value handle associated with this value.
Definition Value.h:565
unsigned NumUserOperands
Definition Value.h:109
LLVM_ABI unsigned getNumUses() const
This method computes the number of uses of this Value.
Value & operator=(const Value &)=delete
unsigned HasHungOffUses
Definition Value.h:115
iterator_range< use_iterator > uses()
Definition Value.h:380
void mutateType(Type *Ty)
Mutate the type of this Value to be of the specified type.
Definition Value.h:838
const_use_iterator use_end() const
Definition Value.h:373
Value * stripPointerCastsForAliasAnalysis()
Definition Value.h:690
LLVM_ABI std::optional< int64_t > getPointerOffsetFrom(const Value *Other, const DataLayout &DL) const
If this ptr is provably equal to Other plus a constant offset, return that offset in bytes.
bool hasMetadata(unsigned KindID) const
Return true if this value has the given type of metadata attached.
Definition Value.h:606
Value * stripInBoundsConstantOffsets()
Definition Value.h:700
const Use * getSingleUndroppableUse() const
Definition Value.h:462
user_iterator_impl< User > user_iterator
Definition Value.h:391
user_iterator materialized_user_begin()
Definition Value.h:394
LLVM_ABI uint64_t getPointerDereferenceableBytes(const DataLayout &DL, bool &CanBeNull, bool &CanBeFreed) const
Returns the number of bytes known to be dereferenceable for the pointer value.
LLVM_ABI void clearMetadata()
Erase all metadata attached to this Value.
use_iterator use_end()
Definition Value.h:372
bool hasName() const
Definition Value.h:262
LLVM_ABI StringRef getName() const
Return a constant reference to the value's name.
LLVM_ABI void replaceNonMetadataUsesWith(Value *V)
Change non-metadata uses of this to point to a new Value.
Value * stripPointerCastsSameRepresentation()
Definition Value.h:678
unsigned HasDescriptor
Definition Value.h:116
const_user_iterator materialized_user_begin() const
Definition Value.h:398
LLVM_ABI void takeName(Value *V)
Transfer the name from V to this value.
const_user_iterator user_end() const
Definition Value.h:411
MDNode * getMetadata(unsigned KindID) const
Get the current metadata attachments for the given kind, if any.
Definition Value.h:576
bool user_empty() const
Definition Value.h:389
LLVM_ABI bool hasNUndroppableUses(unsigned N) const
Return true if there this value.
ValueTy
Concrete subclass of this.
Definition Value.h:524
LLVM_ABI const Value * stripPointerCastsForAliasAnalysis() const
Strip off pointer casts, all-zero GEPs, single-argument phi nodes and invariant group info.
LLVM_ABI void dump() const
Support for debugging, callable in GDB: V->dump()
const_user_iterator user_begin() const
Definition Value.h:406
An efficient, type-erasing, non-owning reference to a callable.
A range adaptor for a pair of iterators.
This class implements an extremely fast bulk output stream that can only output to a stream.
struct LLVMOpaqueValue * LLVMValueRef
Represents an individual value in LLVM IR.
This provides a very simple, boring adaptor for a begin and end iterator into a range type.
NodeAddr< UseNode * > Use
This is an optimization pass for GlobalISel generic memory operations.
FunctionAddr VTableAddr Value
StringMapEntry< Value * > ValueName
Definition Value.h:56
iterator_range< T > make_range(T x, T y)
Convenience function for iterating over sub-ranges.
bool hasSingleElement(ContainerTy &&C)
Returns true if the given container only contains a single element.
std::unique_ptr< Value, ValueDeleter > unique_value
Use this instead of std::unique_ptr or std::unique_ptr.
Definition Value.h:898
bool isa(const From &Val)
isa - Return true if the parameter to the template is an instance of one of the template type argu...
Attribute unwrap(LLVMAttributeRef Attr)
FunctionAddr VTableAddr Next
raw_ostream & operator<<(raw_ostream &OS, const APFixedPoint &FX)
LLVMAttributeRef wrap(Attribute Attr)
void operator()(Value *V)
Definition Value.h:893
static bool doit(const Value &Val)
Definition Value.h:1016
static bool doit(const Value &Val)
Definition Value.h:1034
static bool doit(const Value &Val)
Definition Value.h:1009
static bool doit(const Value &Val)
Definition Value.h:1001
static bool doit(const Value &Val)
Definition Value.h:993
static bool doit(const Value &Val)
Definition Value.h:1040
static bool doit(const Value &Val)
Definition Value.h:1052
static bool doit(const Value &Val)
Definition Value.h:1058
static bool doit(const Value &Val)
Definition Value.h:1070
static bool doit(const Value &Val)
Definition Value.h:1064
static bool doit(const Value &Val)
Definition Value.h:1046
static bool doit(const Value &Val)
Definition Value.h:1022
static bool doit(const Value &Val)
Definition Value.h:1028