@@ -42,32 +42,19 @@ class VirtRegMap;
42
42
class LiveIntervals ;
43
43
class LiveInterval ;
44
44
45
- // / TargetSuperClassIterator enumerates all super-registers of RegClass.
45
+ // / TargetSuperClassIterator enumerates all super-classes of RegClass.
46
46
class TargetSuperClassIterator
47
47
: public iterator_adaptor_base<TargetSuperClassIterator, const unsigned *> {
48
48
public:
49
49
// / Constructs an end iterator.
50
- TargetSuperClassIterator () = default ;
51
-
52
50
TargetSuperClassIterator (const unsigned *V) { I = V; }
53
51
54
52
const unsigned &operator *() const { return *I; }
55
53
56
54
using iterator_adaptor_base::operator ++;
57
55
58
- bool operator ==(const TargetSuperClassIterator &Other) const {
59
- // End can be represented either with a nullptr or with a ptr to
60
- // a sentinel value of ~0U. They must compare equal.
61
- bool SelfIsEnd = !I || *I == ~0U ;
62
- bool OtherIsEnd = !Other.I || *Other.I == ~0U ;
63
- if (SelfIsEnd && OtherIsEnd)
64
- return true ;
65
-
66
- return I == Other.I ;
67
- }
68
-
69
56
// / Returns true if this iterator is not yet at the end.
70
- bool isValid () const { return I && *I != ~0U ; }
57
+ bool isValid () const { return *I != ~0U ; }
71
58
};
72
59
73
60
class TargetRegisterClass {
@@ -95,6 +82,7 @@ class TargetRegisterClass {
95
82
// / class. See also the CoveredBySubRegs description in Target.td.
96
83
const bool CoveredBySubRegs;
97
84
const unsigned *SuperClasses;
85
+ const uint16_t SuperClassesSize;
98
86
ArrayRef<MCPhysReg> (*OrderFunc)(const MachineFunction&);
99
87
100
88
// / Return the register class ID number.
@@ -202,11 +190,12 @@ class TargetRegisterClass {
202
190
return SuperRegIndices;
203
191
}
204
192
205
- // / Returns a NULL -terminated list of super-classes. The
193
+ // / Returns a ~0U -terminated list of super-classes. The
206
194
// / classes are ordered by ID which is also a topological ordering from large
207
195
// / to small classes. The list does NOT include the current class.
208
196
iterator_range<TargetSuperClassIterator> superclasses () const {
209
- return make_range ({SuperClasses}, TargetSuperClassIterator ());
197
+ return make_range (TargetSuperClassIterator (SuperClasses),
198
+ {SuperClasses + SuperClassesSize});
210
199
}
211
200
212
201
// / Return true if this TargetRegisterClass is a subset
0 commit comments