summaryrefslogtreecommitdiff
path: root/compiler/optimizing/register_allocator.cc
diff options
context:
space:
mode:
author Nicolas Geoffray <ngeoffray@google.com> 2016-03-22 15:12:07 +0000
committer Nicolas Geoffray <ngeoffray@google.com> 2016-03-22 15:13:04 +0000
commit974bbdd24404830538f6ab1efe3062e4a411e3ae (patch)
treec9e2626c13db544634388d872ebd65bf94b7c1a2 /compiler/optimizing/register_allocator.cc
parent459898dc4470559ba1e1d578bc52a914d1f573f5 (diff)
Relax too strong DCHECK.
There may be a lifetime hole in the interval, which means the interval does not cover the given position. bug:27617589 Change-Id: Iabd2b3d82936bed498f87be1a01760210954f97e
Diffstat (limited to 'compiler/optimizing/register_allocator.cc')
-rw-r--r--compiler/optimizing/register_allocator.cc8
1 files changed, 7 insertions, 1 deletions
diff --git a/compiler/optimizing/register_allocator.cc b/compiler/optimizing/register_allocator.cc
index b8d76b912e..48b7a97b72 100644
--- a/compiler/optimizing/register_allocator.cc
+++ b/compiler/optimizing/register_allocator.cc
@@ -1919,7 +1919,13 @@ void RegisterAllocator::Resolve() {
BitVector* live = liveness_.GetLiveInSet(*block);
for (uint32_t idx : live->Indexes()) {
LiveInterval* interval = liveness_.GetInstructionFromSsaIndex(idx)->GetLiveInterval();
- DCHECK(!interval->GetSiblingAt(block->GetLifetimeStart())->HasRegister());
+ LiveInterval* sibling = interval->GetSiblingAt(block->GetLifetimeStart());
+ // `GetSiblingAt` returns the sibling that contains a position, but there could be
+ // a lifetime hole in it. `CoversSlow` returns whether the interval is live at that
+ // position.
+ if (sibling->CoversSlow(block->GetLifetimeStart())) {
+ DCHECK(!sibling->HasRegister());
+ }
}
}
} else {