@@ -630,8 +630,8 @@ void LiveRange::join(LiveRange &Other,
630
630
const int *LHSValNoAssignments,
631
631
const int *RHSValNoAssignments,
632
632
SmallVectorImpl<VNInfo *> &NewVNInfo) {
633
- verify ();
634
- Other.verify ();
633
+ assert ( verify () );
634
+ assert ( Other.verify () );
635
635
636
636
// Determine if any of our values are mapped. This is uncommon, so we want
637
637
// to avoid the range scan if not.
@@ -797,7 +797,7 @@ void LiveRange::flushSegmentSet() {
797
797
" segment set can be used only initially before switching to the array" );
798
798
segments.append (segmentSet->begin (), segmentSet->end ());
799
799
segmentSet = nullptr ;
800
- verify ();
800
+ assert ( verify () );
801
801
}
802
802
803
803
bool LiveRange::isLiveAtIndexes (ArrayRef<SlotIndex> Slots) const {
@@ -1055,43 +1055,65 @@ LLVM_DUMP_METHOD void LiveInterval::dump() const {
1055
1055
#endif
1056
1056
1057
1057
#ifndef NDEBUG
1058
- void LiveRange::verify () const {
1058
+ bool LiveRange::verify () const {
1059
1059
for (const_iterator I = begin (), E = end (); I != E; ++I) {
1060
- assert (I->start .isValid ());
1061
- assert (I->end .isValid ());
1062
- assert (I->start < I->end );
1063
- assert (I->valno != nullptr );
1064
- assert (I->valno ->id < valnos.size ());
1065
- assert (I->valno == valnos[I->valno ->id ]);
1060
+ if (!I->start .isValid ())
1061
+ return false ;
1062
+ if (!I->end .isValid ())
1063
+ return false ;
1064
+ if (I->start >= I->end )
1065
+ return false ;
1066
+ if (I->valno == nullptr )
1067
+ return false ;
1068
+ if (I->valno ->id >= valnos.size ())
1069
+ return false ;
1070
+ if (I->valno != valnos[I->valno ->id ])
1071
+ return false ;
1066
1072
if (std::next (I) != E) {
1067
- assert (I->end <= std::next (I)->start );
1068
- if (I->end == std::next (I)->start )
1069
- assert (I->valno != std::next (I)->valno );
1073
+ if (I->end > std::next (I)->start )
1074
+ return false ;
1075
+ if (I->end == std::next (I)->start ) {
1076
+ if (I->valno == std::next (I)->valno )
1077
+ return false ;
1078
+ }
1070
1079
}
1071
1080
}
1081
+
1082
+ return true ;
1072
1083
}
1073
1084
1074
- void LiveInterval::verify (const MachineRegisterInfo *MRI) const {
1075
- super::verify ();
1085
+ bool LiveInterval::verify (const MachineRegisterInfo *MRI) const {
1086
+ if (!super::verify ())
1087
+ return false ;
1076
1088
1077
1089
// Make sure SubRanges are fine and LaneMasks are disjunct.
1078
1090
LaneBitmask Mask;
1079
1091
LaneBitmask MaxMask = MRI != nullptr ? MRI->getMaxLaneMaskForVReg (reg ())
1080
1092
: LaneBitmask::getAll ();
1081
1093
for (const SubRange &SR : subranges ()) {
1082
1094
// Subrange lanemask should be disjunct to any previous subrange masks.
1083
- assert ((Mask & SR.LaneMask ).none ());
1095
+ if ((Mask & SR.LaneMask ).any ())
1096
+ return false ;
1097
+
1084
1098
Mask |= SR.LaneMask ;
1085
1099
1086
1100
// subrange mask should not contained in maximum lane mask for the vreg.
1087
- assert ((Mask & ~MaxMask).none ());
1101
+ if ((Mask & ~MaxMask).any ())
1102
+ return false ;
1103
+
1088
1104
// empty subranges must be removed.
1089
- assert (!SR.empty ());
1105
+ if (SR.empty ())
1106
+ return false ;
1107
+
1108
+ if (!SR.verify ())
1109
+ return false ;
1090
1110
1091
- SR.verify ();
1092
1111
// Main liverange should cover subrange.
1093
- assert (covers (SR));
1112
+ if (!covers (SR))
1113
+ return false ;
1094
1114
}
1115
+
1116
+ return true ;
1095
1117
}
1096
1118
#endif
1097
1119
@@ -1283,7 +1305,7 @@ void LiveRangeUpdater::flush() {
1283
1305
// Nothing to merge?
1284
1306
if (Spills.empty ()) {
1285
1307
LR->segments .erase (WriteI, ReadI);
1286
- LR->verify ();
1308
+ assert ( LR->verify () );
1287
1309
return ;
1288
1310
}
1289
1311
@@ -1301,7 +1323,7 @@ void LiveRangeUpdater::flush() {
1301
1323
}
1302
1324
ReadI = WriteI + Spills.size ();
1303
1325
mergeSpills ();
1304
- LR->verify ();
1326
+ assert ( LR->verify () );
1305
1327
}
1306
1328
1307
1329
unsigned ConnectedVNInfoEqClasses::Classify (const LiveRange &LR) {
0 commit comments