diff options
| author | 2015-12-17 15:36:35 +0000 | |
|---|---|---|
| committer | 2015-12-17 15:36:35 +0000 | |
| commit | ab971e37cfecf46e33fd09ce3d18d7b95112818c (patch) | |
| tree | cf5b1ba47a0d0e0d9e8bf527f814fa54841f8eb8 /compiler | |
| parent | 55c0f49cf185a9457acd32d6e5f3a79900983702 (diff) | |
| parent | 6132a3884a912a704010f22ea2991f3d9d432af2 (diff) | |
Merge "Fix braino in parallel move resolver."
am: 6132a3884a
* commit '6132a3884a912a704010f22ea2991f3d9d432af2':
Fix braino in parallel move resolver.
Diffstat (limited to 'compiler')
| -rw-r--r-- | compiler/optimizing/parallel_move_resolver.cc | 2 | ||||
| -rw-r--r-- | compiler/optimizing/parallel_move_test.cc | 32 |
2 files changed, 33 insertions, 1 deletions
diff --git a/compiler/optimizing/parallel_move_resolver.cc b/compiler/optimizing/parallel_move_resolver.cc index 30bcf19c64..176c50ce21 100644 --- a/compiler/optimizing/parallel_move_resolver.cc +++ b/compiler/optimizing/parallel_move_resolver.cc @@ -169,7 +169,7 @@ MoveOperands* ParallelMoveResolverWithSwap::PerformMove(size_t index) { // If `other_move` was swapped, we iterate again to find a new // potential cycle. required_swap = nullptr; - i = 0; + i = -1; } else if (required_swap != nullptr) { // A move is required to swap. We walk back the cycle to find the // move by just returning from this `PerforrmMove`. diff --git a/compiler/optimizing/parallel_move_test.cc b/compiler/optimizing/parallel_move_test.cc index 46e6f3e5d0..5e8fe37669 100644 --- a/compiler/optimizing/parallel_move_test.cc +++ b/compiler/optimizing/parallel_move_test.cc @@ -609,4 +609,36 @@ TYPED_TEST(ParallelMoveTest, CyclesWith64BitsMoves) { } } +TYPED_TEST(ParallelMoveTest, CyclesWith64BitsMoves2) { + ArenaPool pool; + ArenaAllocator allocator(&pool); + + { + TypeParam resolver(&allocator); + HParallelMove* moves = new (&allocator) HParallelMove(&allocator); + moves->AddMove( + Location::RegisterLocation(0), + Location::RegisterLocation(3), + Primitive::kPrimInt, + nullptr); + moves->AddMove( + Location::RegisterPairLocation(2, 3), + Location::RegisterPairLocation(0, 1), + Primitive::kPrimLong, + nullptr); + moves->AddMove( + Location::RegisterLocation(7), + Location::RegisterLocation(2), + Primitive::kPrimInt, + nullptr); + resolver.EmitNativeCode(moves); + if (TestFixture::has_swap) { + ASSERT_STREQ("(2,3 <-> 0,1) (2 -> 3) (7 -> 2)", resolver.GetMessage().c_str()); + } else { + ASSERT_STREQ("(2,3 -> T0,T1) (0 -> 3) (T0,T1 -> 0,1) (7 -> 2)", + resolver.GetMessage().c_str()); + } + } +} + } // namespace art |