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...