Index: src/compiler/register-allocator.cc |
diff --git a/src/compiler/register-allocator.cc b/src/compiler/register-allocator.cc |
index 05bc8ba795c1b46fd59b35f1463b5b999fbb12c0..7a6d42a84dbfb9b061232c971303333780573b2b 100644 |
--- a/src/compiler/register-allocator.cc |
+++ b/src/compiler/register-allocator.cc |
@@ -272,7 +272,7 @@ LiveRange::LiveRange(int relative_id, MachineRepresentation rep, |
} |
-void LiveRange::Verify() const { |
+void LiveRange::VerifyPositions() const { |
// Walk the positions, verifying that each is in an interval. |
auto interval = first_interval_; |
for (auto pos = first_pos_; pos != nullptr; pos = pos->next()) { |
@@ -287,6 +287,18 @@ void LiveRange::Verify() const { |
} |
+void LiveRange::VerifyIntervals() const { |
+ DCHECK(first_interval()->start() == Start()); |
+ LifetimePosition last_end = first_interval()->end(); |
+ for (UseInterval* interval = first_interval()->next(); interval != nullptr; |
+ interval = interval->next()) { |
+ DCHECK(last_end <= interval->start()); |
+ last_end = interval->end(); |
+ } |
+ DCHECK(last_end == End()); |
+} |
+ |
+ |
void LiveRange::set_assigned_register(int reg) { |
DCHECK(!HasRegisterAssigned() && !spilled()); |
bits_ = AssignedRegisterField::update(bits_, reg); |
@@ -527,8 +539,8 @@ UsePosition* LiveRange::DetachAt(LifetimePosition position, LiveRange* result, |
size_ = kInvalidSize; |
weight_ = kInvalidWeight; |
#ifdef DEBUG |
- Verify(); |
- result->Verify(); |
+ VerifyChildStructure(); |
+ result->VerifyChildStructure(); |
#endif |
return use_before; |
} |
@@ -946,6 +958,24 @@ void TopLevelLiveRange::Merge(TopLevelLiveRange* other, Zone* zone) { |
} |
+void TopLevelLiveRange::VerifyChildrenInOrder() const { |
+ LifetimePosition last_end = End(); |
+ for (const LiveRange* child = this->next(); child != nullptr; |
+ child = child->next()) { |
+ DCHECK(last_end <= child->Start()); |
+ last_end = child->End(); |
+ } |
+} |
+ |
+ |
+void TopLevelLiveRange::Verify() const { |
+ VerifyChildrenInOrder(); |
+ for (const LiveRange* child = this; child != nullptr; child = child->next()) { |
+ VerifyChildStructure(); |
+ } |
+} |
+ |
+ |
void TopLevelLiveRange::ShortenTo(LifetimePosition start) { |
TRACE("Shorten live range %d to [%d\n", vreg(), start.value()); |
DCHECK(first_interval_ != nullptr); |
@@ -2193,8 +2223,8 @@ void LiveRangeBuilder::Verify() const { |
for (auto& hint : phi_hints_) { |
CHECK(hint.second->IsResolved()); |
} |
- for (LiveRange* current : data()->live_ranges()) { |
- if (current != nullptr) current->Verify(); |
+ for (TopLevelLiveRange* current : data()->live_ranges()) { |
+ if (current != nullptr && !current->IsEmpty()) current->Verify(); |
} |
} |