summaryrefslogtreecommitdiffstats
path: root/compiler
diff options
context:
space:
mode:
authorVladimir Marko <vmarko@google.com>2015-02-13 19:47:13 +0000
committerVladimir Marko <vmarko@google.com>2015-02-13 19:47:13 +0000
commitd532f006f621b65d2a390f9fd946acb39dfd2e8d (patch)
tree415f9183a6da44d159562814f542713cf530007d /compiler
parentbce889940f10319bf67bdc5630c84dd7f6e5c246 (diff)
downloadart-d532f006f621b65d2a390f9fd946acb39dfd2e8d.zip
art-d532f006f621b65d2a390f9fd946acb39dfd2e8d.tar.gz
art-d532f006f621b65d2a390f9fd946acb39dfd2e8d.tar.bz2
Add tests for wide constants in LVN.
Follow up to https://android-review.googlesource.com/132210 Change-Id: I4e29483fb9931ae5670539954b69cdb078843e72
Diffstat (limited to 'compiler')
-rw-r--r--compiler/dex/local_value_numbering_test.cc34
1 files changed, 34 insertions, 0 deletions
diff --git a/compiler/dex/local_value_numbering_test.cc b/compiler/dex/local_value_numbering_test.cc
index 9f18a3e..a5cbb5f 100644
--- a/compiler/dex/local_value_numbering_test.cc
+++ b/compiler/dex/local_value_numbering_test.cc
@@ -772,4 +772,38 @@ TEST_F(LocalValueNumberingTest, DivZeroCheck) {
}
}
+TEST_F(LocalValueNumberingTest, ConstWide) {
+ static const MIRDef mirs[] = {
+ DEF_CONST(Instruction::CONST_WIDE_16, 0u, 0),
+ DEF_CONST(Instruction::CONST_WIDE_16, 1u, 1),
+ DEF_CONST(Instruction::CONST_WIDE_16, 2u, -1),
+ DEF_CONST(Instruction::CONST_WIDE_32, 3u, 1 << 16),
+ DEF_CONST(Instruction::CONST_WIDE_32, 4u, -1 << 16),
+ DEF_CONST(Instruction::CONST_WIDE_32, 5u, (1 << 16) + 1),
+ DEF_CONST(Instruction::CONST_WIDE_32, 6u, (1 << 16) - 1),
+ DEF_CONST(Instruction::CONST_WIDE_32, 7u, -(1 << 16) + 1),
+ DEF_CONST(Instruction::CONST_WIDE_32, 8u, -(1 << 16) - 1),
+ DEF_CONST(Instruction::CONST_WIDE, 9u, INT64_C(1) << 32),
+ DEF_CONST(Instruction::CONST_WIDE, 10u, INT64_C(-1) << 32),
+ DEF_CONST(Instruction::CONST_WIDE, 11u, (INT64_C(1) << 32) + 1),
+ DEF_CONST(Instruction::CONST_WIDE, 12u, (INT64_C(1) << 32) - 1),
+ DEF_CONST(Instruction::CONST_WIDE, 13u, (INT64_C(-1) << 32) + 1),
+ DEF_CONST(Instruction::CONST_WIDE, 14u, (INT64_C(-1) << 32) - 1),
+ DEF_CONST(Instruction::CONST_WIDE_HIGH16, 15u, 1), // Effectively 1 << 48.
+ DEF_CONST(Instruction::CONST_WIDE_HIGH16, 16u, 0xffff), // Effectively -1 << 48.
+ DEF_CONST(Instruction::CONST_WIDE, 17u, (INT64_C(1) << 48) + 1),
+ DEF_CONST(Instruction::CONST_WIDE, 18u, (INT64_C(1) << 48) - 1),
+ DEF_CONST(Instruction::CONST_WIDE, 19u, (INT64_C(-1) << 48) + 1),
+ DEF_CONST(Instruction::CONST_WIDE, 20u, (INT64_C(-1) << 48) - 1),
+ };
+
+ PrepareMIRs(mirs);
+ PerformLVN();
+ for (size_t i = 0u; i != mir_count_; ++i) {
+ for (size_t j = i + 1u; j != mir_count_; ++j) {
+ EXPECT_NE(value_names_[i], value_names_[j]) << i << " " << j;
+ }
+ }
+}
+
} // namespace art