@@ -630,8 +630,8 @@ void LiveRange::join(LiveRange &Other,
630630 const int *LHSValNoAssignments,
631631 const int *RHSValNoAssignments,
632632 SmallVectorImpl<VNInfo *> &NewVNInfo) {
633- verify ();
634- Other.verify ();
633+ assert ( verify () );
634+ assert ( Other.verify () );
635635
636636 // Determine if any of our values are mapped. This is uncommon, so we want
637637 // to avoid the range scan if not.
@@ -797,7 +797,7 @@ void LiveRange::flushSegmentSet() {
797797 " segment set can be used only initially before switching to the array" );
798798 segments.append (segmentSet->begin (), segmentSet->end ());
799799 segmentSet = nullptr ;
800- verify ();
800+ assert ( verify () );
801801}
802802
803803bool LiveRange::isLiveAtIndexes (ArrayRef<SlotIndex> Slots) const {
@@ -1055,43 +1055,65 @@ LLVM_DUMP_METHOD void LiveInterval::dump() const {
10551055#endif
10561056
10571057#ifndef NDEBUG
1058- void LiveRange::verify () const {
1058+ bool LiveRange::verify () const {
10591059 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 ;
10661072 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+ }
10701079 }
10711080 }
1081+
1082+ return true ;
10721083}
10731084
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 ;
10761088
10771089 // Make sure SubRanges are fine and LaneMasks are disjunct.
10781090 LaneBitmask Mask;
10791091 LaneBitmask MaxMask = MRI != nullptr ? MRI->getMaxLaneMaskForVReg (reg ())
10801092 : LaneBitmask::getAll ();
10811093 for (const SubRange &SR : subranges ()) {
10821094 // 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+
10841098 Mask |= SR.LaneMask ;
10851099
10861100 // 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+
10881104 // empty subranges must be removed.
1089- assert (!SR.empty ());
1105+ if (SR.empty ())
1106+ return false ;
1107+
1108+ if (!SR.verify ())
1109+ return false ;
10901110
1091- SR.verify ();
10921111 // Main liverange should cover subrange.
1093- assert (covers (SR));
1112+ if (!covers (SR))
1113+ return false ;
10941114 }
1115+
1116+ return true ;
10951117}
10961118#endif
10971119
@@ -1283,7 +1305,7 @@ void LiveRangeUpdater::flush() {
12831305 // Nothing to merge?
12841306 if (Spills.empty ()) {
12851307 LR->segments .erase (WriteI, ReadI);
1286- LR->verify ();
1308+ assert ( LR->verify () );
12871309 return ;
12881310 }
12891311
@@ -1301,7 +1323,7 @@ void LiveRangeUpdater::flush() {
13011323 }
13021324 ReadI = WriteI + Spills.size ();
13031325 mergeSpills ();
1304- LR->verify ();
1326+ assert ( LR->verify () );
13051327}
13061328
13071329unsigned ConnectedVNInfoEqClasses::Classify (const LiveRange &LR) {
0 commit comments