LLVM: include/llvm/Support/ExtensibleRTTI.h Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60#ifndef LLVM_SUPPORT_EXTENSIBLERTTI_H

61#define LLVM_SUPPORT_EXTENSIBLERTTI_H

62

64

65namespace llvm {

66

67

68

69

70

72public:

74

75

76 static const void *classID() { return &ID; }

77

78

80

81

82 virtual bool isA(const void *const ClassID) const {

83 return ClassID == classID();

84 }

85

86private:

87 virtual void anchor();

88

89 static char ID;

90};

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127template <typename ThisT, typename ParentT, typename... ParentTs>

129public:

130

131 using ParentT::ParentT;

132

133 static const void *classID() { return &ThisT::ID; }

134

135 const void *dynamicClassID() const override { return &ThisT::ID; }

136

137

138 template bool isA() const { return isA(QueryT::classID()); }

139

140 bool isA(const void *const ClassID) const override {

141 return ClassID == classID() || ParentT::isA(ClassID) ||

142 (ParentTs::isA(ClassID) || ...);

143 }

144

145 template static bool classof(const T *R) {

147 }

148};

149

150}

151

152#endif

Inheritance utility for extensible RTTI.

Definition ExtensibleRTTI.h:128

bool isA(const void *const ClassID) const override

Definition ExtensibleRTTI.h:140

bool isA() const

Check whether this instance is a subclass of QueryT.

Definition ExtensibleRTTI.h:138

static const void * classID()

Definition ExtensibleRTTI.h:133

const void * dynamicClassID() const override

Definition ExtensibleRTTI.h:135

static bool classof(const T *R)

Definition ExtensibleRTTI.h:145

Base class for the extensible RTTI hierarchy.

Definition ExtensibleRTTI.h:71

static const void * classID()

Returns the class ID for this type.

Definition ExtensibleRTTI.h:76

virtual bool isA(const void *const ClassID) const

Returns true if this class's ID matches the given class ID.

Definition ExtensibleRTTI.h:82

virtual ~RTTIRoot()=default

virtual const void * dynamicClassID() const =0

Returns the class ID for the dynamic type of this RTTIRoot instance.

unsigned ID

LLVM IR allows to use arbitrary numbers as calling convention identifiers.

This is an optimization pass for GlobalISel generic memory operations.