LLVM: include/llvm/IR/TrackingMDRef.h Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
13#ifndef LLVM_IR_TRACKINGMDREF_H
14#define LLVM_IR_TRACKINGMDREF_H
15
17#include
18#include
19
20namespace llvm {
21
22
23
24
27
28public:
31
34
36 if (&X == this)
37 return *this;
38
39 untrack();
40 MD = X.MD;
41 retrack(X);
42 return *this;
43 }
44
46 if (&X == this)
47 return *this;
48
49 untrack();
50 MD = X.MD;
51 track();
52 return *this;
53 }
54
56
61
63 untrack();
64 MD = nullptr;
65 }
67 untrack();
68 this->MD = MD;
69 track();
70 }
71
72
73
74
78
81
82private:
83 void track() {
84 if (MD)
86 }
87
88 void untrack() {
89 if (MD)
91 }
92
94 assert(MD == X.MD && "Expected values to match");
95 if (X.MD) {
97 X.MD = nullptr;
98 }
99 }
100};
101
102
103
104
105
108
109public:
112
115
117 Ref = std::move(X.Ref);
118 return *this;
119 }
120
122
123 T *get() const { return (T *)Ref.get(); }
124 operator T *() const { return get(); }
127
130
131 void reset() { Ref.reset(); }
133
134
136};
137
140
141
147
150
152 return MD.get();
153 }
154};
155
158
160 return MD.get();
161 }
162};
163
166
168 return MD.get();
169 }
170};
171
172}
173
174#endif
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
static TableGen::Emitter::OptClass< SkeletonEmitter > X("gen-skeleton-class", "Generate example skeleton class")
static MDTuple * get(LLVMContext &Context, ArrayRef< Metadata * > MDs)
Tracking metadata reference.
Definition TrackingMDRef.h:25
TrackingMDRef(const TrackingMDRef &X)
Definition TrackingMDRef.h:33
Metadata & operator*() const
Definition TrackingMDRef.h:60
bool operator==(const TrackingMDRef &X) const
Definition TrackingMDRef.h:79
bool hasTrivialDestructor() const
Check whether this has a trivial destructor.
Definition TrackingMDRef.h:75
~TrackingMDRef()
Definition TrackingMDRef.h:55
TrackingMDRef(Metadata *MD)
Definition TrackingMDRef.h:30
void reset()
Definition TrackingMDRef.h:62
bool operator!=(const TrackingMDRef &X) const
Definition TrackingMDRef.h:80
Metadata * get() const
Definition TrackingMDRef.h:57
void reset(Metadata *MD)
Definition TrackingMDRef.h:66
TrackingMDRef(TrackingMDRef &&X)
Definition TrackingMDRef.h:32
Metadata * operator->() const
Definition TrackingMDRef.h:59
TrackingMDRef & operator=(const TrackingMDRef &X)
Definition TrackingMDRef.h:45
TrackingMDRef & operator=(TrackingMDRef &&X)
Definition TrackingMDRef.h:35
Typed tracking ref.
Definition TrackingMDRef.h:106
TypedTrackingMDRef(T *MD)
Definition TrackingMDRef.h:111
T * get() const
Definition TrackingMDRef.h:123
void reset(T *MD)
Definition TrackingMDRef.h:132
bool operator!=(const TypedTrackingMDRef &X) const
Definition TrackingMDRef.h:129
TypedTrackingMDRef(const TypedTrackingMDRef &X)=default
TypedTrackingMDRef(TypedTrackingMDRef &&X)
Definition TrackingMDRef.h:113
TypedTrackingMDRef()=default
void reset()
Definition TrackingMDRef.h:131
bool operator==(const TypedTrackingMDRef &X) const
Definition TrackingMDRef.h:128
TypedTrackingMDRef & operator=(TypedTrackingMDRef &&X)
Definition TrackingMDRef.h:116
TypedTrackingMDRef & operator=(const TypedTrackingMDRef &X)=default
T & operator*() const
Definition TrackingMDRef.h:126
bool hasTrivialDestructor() const
Check whether this has a trivial destructor.
Definition TrackingMDRef.h:135
T * operator->() const
Definition TrackingMDRef.h:125
This is an optimization pass for GlobalISel generic memory operations.
TypedTrackingMDRef< MDNode > TrackingMDNodeRef
Definition TrackingMDRef.h:138
OutputIt move(R &&Range, OutputIt Out)
Provide wrappers to std::move which take ranges instead of having to pass begin/end explicitly.
TypedTrackingMDRef< ValueAsMetadata > TrackingValueAsMetadataRef
Definition TrackingMDRef.h:139
Implement std::hash so that hash_code can be used in STL containers.
Metadata * SimpleType
Definition TrackingMDRef.h:143
static SimpleType getSimplifiedValue(TrackingMDRef &MD)
Definition TrackingMDRef.h:145
T * SimpleType
Definition TrackingMDRef.h:157
static SimpleType getSimplifiedValue(TypedTrackingMDRef< T > &MD)
Definition TrackingMDRef.h:159
static SimpleType getSimplifiedValue(const TrackingMDRef &MD)
Definition TrackingMDRef.h:151
Metadata * SimpleType
Definition TrackingMDRef.h:149
T * SimpleType
Definition TrackingMDRef.h:165
static SimpleType getSimplifiedValue(const TypedTrackingMDRef< T > &MD)
Definition TrackingMDRef.h:167
Define a template that can be specialized by smart pointers to reflect the fact that they are automat...