diff options
author | Nicolas Geoffray <ngeoffray@google.com> | 2015-01-14 10:45:05 +0000 |
---|---|---|
committer | Nicolas Geoffray <ngeoffray@google.com> | 2015-01-14 14:45:40 +0000 |
commit | 48c310c431b110f6ab54907da20c4fa39a8f76b8 (patch) | |
tree | 3f8e75544539544feda353a1f225145e5ee41fa0 /compiler/optimizing/parallel_move_test.cc | |
parent | c40a4350daac81ddbfc5f6ceab934f2180dc4ec6 (diff) | |
download | art-48c310c431b110f6ab54907da20c4fa39a8f76b8.tar.gz art-48c310c431b110f6ab54907da20c4fa39a8f76b8.tar.bz2 art-48c310c431b110f6ab54907da20c4fa39a8f76b8.zip |
Remove constant moves after emitting them in parallel resolver.
This fixes the case where a constant move requires a scratch
register. Note that there is no backend that needs this for now,
but X86 might with the move to hard float.
Change-Id: I37f6b8961b48f2cf6fbc0cd281e70d58466d018e
Diffstat (limited to 'compiler/optimizing/parallel_move_test.cc')
-rw-r--r-- | compiler/optimizing/parallel_move_test.cc | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/compiler/optimizing/parallel_move_test.cc b/compiler/optimizing/parallel_move_test.cc index 62629bcd0c..210f7d7f09 100644 --- a/compiler/optimizing/parallel_move_test.cc +++ b/compiler/optimizing/parallel_move_test.cc @@ -31,9 +31,13 @@ class TestParallelMoveResolver : public ParallelMoveResolver { if (!message_.str().empty()) { message_ << " "; } - message_ << "(" - << move->GetSource().reg() - << " -> " + message_ << "("; + if (move->GetSource().IsConstant()) { + message_ << "C"; + } else { + message_ << move->GetSource().reg(); + } + message_ << " -> " << move->GetDestination().reg() << ")"; } @@ -129,4 +133,21 @@ TEST(ParallelMoveTest, Swap) { } } +TEST(ParallelMoveTest, ConstantLast) { + ArenaPool pool; + ArenaAllocator allocator(&pool); + TestParallelMoveResolver resolver(&allocator); + HParallelMove* moves = new (&allocator) HParallelMove(&allocator); + moves->AddMove(new (&allocator) MoveOperands( + Location::ConstantLocation(new (&allocator) HIntConstant(0)), + Location::RegisterLocation(0), + nullptr)); + moves->AddMove(new (&allocator) MoveOperands( + Location::RegisterLocation(1), + Location::RegisterLocation(2), + nullptr)); + resolver.EmitNativeCode(moves); + ASSERT_STREQ("(1 -> 2) (C -> 0)", resolver.GetMessage().c_str()); +} + } // namespace art |