summaryrefslogtreecommitdiffstats
path: root/compiler/optimizing/parallel_move_test.cc
diff options
context:
space:
mode:
authorNicolas Geoffray <ngeoffray@google.com>2015-01-14 10:45:05 +0000
committerNicolas Geoffray <ngeoffray@google.com>2015-01-14 14:45:40 +0000
commit48c310c431b110f6ab54907da20c4fa39a8f76b8 (patch)
tree3f8e75544539544feda353a1f225145e5ee41fa0 /compiler/optimizing/parallel_move_test.cc
parentc40a4350daac81ddbfc5f6ceab934f2180dc4ec6 (diff)
downloadart-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.cc27
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