diff options
| author | 2015-03-05 15:34:41 +0000 | |
|---|---|---|
| committer | 2015-03-05 15:47:58 +0000 | |
| commit | df45205204125727fa71b17b3f6bb3d8eb9bc20c (patch) | |
| tree | 224b4ba87f27dfca80d119e84b5ffd2866097657 | |
| parent | ea19b3696f90e07c72acb383f84305ace9b16097 (diff) | |
ART: Fix test breakage
Recent commit changed the direction of iteration over safepoints in
the register allocator but contained a bug that skipped some of them
at the boundaries of interval siblings. This patch fixes the bug.
Change-Id: Ia7d4892536b5198e01c9bc3034f448227794ff72
| -rw-r--r-- | compiler/optimizing/register_allocator.cc | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/compiler/optimizing/register_allocator.cc b/compiler/optimizing/register_allocator.cc index 0e9c4d6f63..748ab2259e 100644 --- a/compiler/optimizing/register_allocator.cc +++ b/compiler/optimizing/register_allocator.cc @@ -1425,13 +1425,13 @@ void RegisterAllocator::ConnectSiblings(LiveInterval* interval) { // At each safepoint, we record stack and register information. // We iterate backwards to test safepoints in ascending order of positions, // which is what LiveInterval::Covers is optimized for. - while (safepoint_index > 0) { - HInstruction* safepoint = safepoints_.Get(--safepoint_index); + for (; safepoint_index > 0; --safepoint_index) { + HInstruction* safepoint = safepoints_.Get(safepoint_index - 1); size_t position = safepoint->GetLifetimePosition(); // Test that safepoints are ordered in the optimal way. - DCHECK(safepoint_index == 0 - || safepoints_.Get(safepoint_index - 1)->GetLifetimePosition() >= position); + DCHECK(safepoint_index == safepoints_.Size() + || safepoints_.Get(safepoint_index)->GetLifetimePosition() <= position); if (current->IsDeadAt(position)) { break; |