summaryrefslogtreecommitdiffstats
path: root/compiler/optimizing/liveness_test.cc
diff options
context:
space:
mode:
authorNicolas Geoffray <ngeoffray@google.com>2014-07-04 09:41:32 +0100
committerNicolas Geoffray <ngeoffray@google.com>2014-07-14 10:06:11 +0100
commite50383288a75244255d3ecedcc79ffe9caf774cb (patch)
tree8858489463a57c7b50f7db4d972abec21302b7a7 /compiler/optimizing/liveness_test.cc
parentcf90ba7ebe00346651f3b7ce1e5b1f785f7caabd (diff)
downloadandroid_art-e50383288a75244255d3ecedcc79ffe9caf774cb.tar.gz
android_art-e50383288a75244255d3ecedcc79ffe9caf774cb.tar.bz2
android_art-e50383288a75244255d3ecedcc79ffe9caf774cb.zip
Support fields in optimizing compiler.
- Required support for temporaries, to be only used by baseline compiler. - Also fixed a few invalid assumptions around locations and instructions that don't need materialization. These instructions should not have an Out. Change-Id: Idc4a30dd95dd18015137300d36bec55fc024cf62
Diffstat (limited to 'compiler/optimizing/liveness_test.cc')
-rw-r--r--compiler/optimizing/liveness_test.cc368
1 files changed, 186 insertions, 182 deletions
diff --git a/compiler/optimizing/liveness_test.cc b/compiler/optimizing/liveness_test.cc
index 2d0bc39cd5..1a4d74536b 100644
--- a/compiler/optimizing/liveness_test.cc
+++ b/compiler/optimizing/liveness_test.cc
@@ -152,32 +152,32 @@ TEST(LivenessTest, CFG4) {
// return a;
//
// Bitsets are made of:
- // (constant0, constant4, constant5, phi, equal test)
+ // (constant0, constant4, constant5, phi)
const char* expected =
"Block 0\n" // entry block
- " live in: (00000)\n"
- " live out: (11100)\n"
- " kill: (11100)\n"
+ " live in: (0000)\n"
+ " live out: (1110)\n"
+ " kill: (1110)\n"
"Block 1\n" // block with if
- " live in: (11100)\n"
- " live out: (01100)\n"
- " kill: (00010)\n"
+ " live in: (1110)\n"
+ " live out: (0110)\n"
+ " kill: (0000)\n"
"Block 2\n" // else block
- " live in: (01000)\n"
- " live out: (00000)\n"
- " kill: (00000)\n"
+ " live in: (0100)\n"
+ " live out: (0000)\n"
+ " kill: (0000)\n"
"Block 3\n" // then block
- " live in: (00100)\n"
- " live out: (00000)\n"
- " kill: (00000)\n"
+ " live in: (0010)\n"
+ " live out: (0000)\n"
+ " kill: (0000)\n"
"Block 4\n" // return block
- " live in: (00000)\n"
- " live out: (00000)\n"
- " kill: (00001)\n"
+ " live in: (0000)\n"
+ " live out: (0000)\n"
+ " kill: (0001)\n"
"Block 5\n" // exit block
- " live in: (00000)\n"
- " live out: (00000)\n"
- " kill: (00000)\n";
+ " live in: (0000)\n"
+ " live out: (0000)\n"
+ " kill: (0000)\n";
const uint16_t data[] = ONE_REGISTER_CODE_ITEM(
Instruction::CONST_4 | 0 | 0,
@@ -197,31 +197,34 @@ TEST(LivenessTest, CFG5) {
// a = 4;
// }
// return a;
+ //
+ // Bitsets are made of:
+ // (constant0, constant4, phi)
const char* expected =
"Block 0\n" // entry block
- " live in: (0000)\n"
- " live out: (1100)\n"
- " kill: (1100)\n"
+ " live in: (000)\n"
+ " live out: (110)\n"
+ " kill: (110)\n"
"Block 1\n" // block with if
- " live in: (1100)\n"
- " live out: (1100)\n"
- " kill: (0010)\n"
+ " live in: (110)\n"
+ " live out: (110)\n"
+ " kill: (000)\n"
"Block 2\n" // else block
- " live in: (0100)\n"
- " live out: (0000)\n"
- " kill: (0000)\n"
+ " live in: (010)\n"
+ " live out: (000)\n"
+ " kill: (000)\n"
"Block 3\n" // return block
- " live in: (0000)\n"
- " live out: (0000)\n"
- " kill: (0001)\n"
+ " live in: (000)\n"
+ " live out: (000)\n"
+ " kill: (001)\n"
"Block 4\n" // exit block
- " live in: (0000)\n"
- " live out: (0000)\n"
- " kill: (0000)\n"
+ " live in: (000)\n"
+ " live out: (000)\n"
+ " kill: (000)\n"
"Block 5\n" // block to avoid critical edge. Predecessor is 1, successor is 3.
- " live in: (1000)\n"
- " live out: (0000)\n"
- " kill: (0000)\n";
+ " live in: (100)\n"
+ " live out: (000)\n"
+ " kill: (000)\n";
const uint16_t data[] = ONE_REGISTER_CODE_ITEM(
Instruction::CONST_4 | 0 | 0,
@@ -239,31 +242,33 @@ TEST(LivenessTest, Loop1) {
// a = 4;
// }
// return;
+ // Bitsets are made of:
+ // (constant0, constant4, phi)
const char* expected =
"Block 0\n" // entry block
- " live in: (0000)\n"
- " live out: (1100)\n"
- " kill: (1100)\n"
+ " live in: (000)\n"
+ " live out: (110)\n"
+ " kill: (110)\n"
"Block 1\n" // pre header
- " live in: (1100)\n"
- " live out: (0100)\n"
- " kill: (0000)\n"
+ " live in: (110)\n"
+ " live out: (010)\n"
+ " kill: (000)\n"
"Block 2\n" // loop header
- " live in: (0100)\n"
- " live out: (0100)\n"
- " kill: (0011)\n"
+ " live in: (010)\n"
+ " live out: (010)\n"
+ " kill: (001)\n"
"Block 3\n" // back edge
- " live in: (0100)\n"
- " live out: (0100)\n"
- " kill: (0000)\n"
+ " live in: (010)\n"
+ " live out: (010)\n"
+ " kill: (000)\n"
"Block 4\n" // return block
- " live in: (0000)\n"
- " live out: (0000)\n"
- " kill: (0000)\n"
+ " live in: (000)\n"
+ " live out: (000)\n"
+ " kill: (000)\n"
"Block 5\n" // exit block
- " live in: (0000)\n"
- " live out: (0000)\n"
- " kill: (0000)\n";
+ " live in: (000)\n"
+ " live out: (000)\n"
+ " kill: (000)\n";
const uint16_t data[] = ONE_REGISTER_CODE_ITEM(
@@ -283,31 +288,33 @@ TEST(LivenessTest, Loop3) {
// a = 4;
// }
// return 5;
+ // Bitsets are made of:
+ // (constant0, constant4, constant5, phi)
const char* expected =
"Block 0\n"
- " live in: (00000)\n"
- " live out: (11100)\n"
- " kill: (11100)\n"
+ " live in: (0000)\n"
+ " live out: (1110)\n"
+ " kill: (1110)\n"
"Block 1\n"
- " live in: (11100)\n"
- " live out: (01100)\n"
- " kill: (00000)\n"
+ " live in: (1110)\n"
+ " live out: (0110)\n"
+ " kill: (0000)\n"
"Block 2\n" // loop header
- " live in: (01100)\n"
- " live out: (01100)\n"
- " kill: (00011)\n"
+ " live in: (0110)\n"
+ " live out: (0110)\n"
+ " kill: (0001)\n"
"Block 3\n" // back edge
- " live in: (01100)\n"
- " live out: (01100)\n"
- " kill: (00000)\n"
+ " live in: (0110)\n"
+ " live out: (0110)\n"
+ " kill: (0000)\n"
"Block 4\n" // return block
- " live in: (00100)\n"
- " live out: (00000)\n"
- " kill: (00000)\n"
+ " live in: (0010)\n"
+ " live out: (0000)\n"
+ " kill: (0000)\n"
"Block 5\n" // exit block
- " live in: (00000)\n"
- " live out: (00000)\n"
- " kill: (00000)\n";
+ " live in: (0000)\n"
+ " live out: (0000)\n"
+ " kill: (0000)\n";
const uint16_t data[] = TWO_REGISTERS_CODE_ITEM(
Instruction::CONST_4 | 0 | 0,
@@ -330,36 +337,36 @@ TEST(LivenessTest, Loop4) {
// }
// return a;
// Bitsets are made of:
- // (constant0, constant4, phi, equal test)
+ // (constant0, constant4, phi)
const char* expected =
"Block 0\n"
- " live in: (0000)\n"
- " live out: (1100)\n"
- " kill: (1100)\n"
+ " live in: (000)\n"
+ " live out: (110)\n"
+ " kill: (110)\n"
"Block 1\n"
- " live in: (1100)\n"
- " live out: (1100)\n"
- " kill: (0000)\n"
+ " live in: (110)\n"
+ " live out: (110)\n"
+ " kill: (000)\n"
"Block 2\n" // loop header
- " live in: (0100)\n"
- " live out: (0110)\n"
- " kill: (0011)\n"
+ " live in: (010)\n"
+ " live out: (011)\n"
+ " kill: (001)\n"
"Block 3\n" // back edge
- " live in: (0100)\n"
- " live out: (0100)\n"
- " kill: (0000)\n"
+ " live in: (010)\n"
+ " live out: (010)\n"
+ " kill: (000)\n"
"Block 4\n" // pre loop header
- " live in: (1100)\n"
- " live out: (0100)\n"
- " kill: (0000)\n"
+ " live in: (110)\n"
+ " live out: (010)\n"
+ " kill: (000)\n"
"Block 5\n" // return block
- " live in: (0010)\n"
- " live out: (0000)\n"
- " kill: (0000)\n"
+ " live in: (001)\n"
+ " live out: (000)\n"
+ " kill: (000)\n"
"Block 6\n" // exit block
- " live in: (0000)\n"
- " live out: (0000)\n"
- " kill: (0000)\n";
+ " live in: (000)\n"
+ " live out: (000)\n"
+ " kill: (000)\n";
const uint16_t data[] = ONE_REGISTER_CODE_ITEM(
Instruction::CONST_4 | 0 | 0,
@@ -377,45 +384,44 @@ TEST(LivenessTest, Loop5) {
// Make sure we create a preheader of a loop when a header originally has two
// incoming blocks and one back edge.
// Bitsets are made of:
- // (constant0, constant4, constant5, equal in block 1, phi in block 8, phi in block 4,
- // equal in block 4)
+ // (constant0, constant4, constant5, phi in block 8, phi in block 4)
const char* expected =
"Block 0\n"
- " live in: (0000000)\n"
- " live out: (1110000)\n"
- " kill: (1110000)\n"
+ " live in: (00000)\n"
+ " live out: (11100)\n"
+ " kill: (11100)\n"
"Block 1\n"
- " live in: (1110000)\n"
- " live out: (0110000)\n"
- " kill: (0001000)\n"
+ " live in: (11100)\n"
+ " live out: (01100)\n"
+ " kill: (00000)\n"
"Block 2\n"
- " live in: (0100000)\n"
- " live out: (0000000)\n"
- " kill: (0000000)\n"
+ " live in: (01000)\n"
+ " live out: (00000)\n"
+ " kill: (00000)\n"
"Block 3\n"
- " live in: (0010000)\n"
- " live out: (0000000)\n"
- " kill: (0000000)\n"
+ " live in: (00100)\n"
+ " live out: (00000)\n"
+ " kill: (00000)\n"
"Block 4\n" // loop header
- " live in: (0000000)\n"
- " live out: (0000010)\n"
- " kill: (0000011)\n"
+ " live in: (00000)\n"
+ " live out: (00001)\n"
+ " kill: (00001)\n"
"Block 5\n" // back edge
- " live in: (0000010)\n"
- " live out: (0000000)\n"
- " kill: (0000000)\n"
+ " live in: (00001)\n"
+ " live out: (00000)\n"
+ " kill: (00000)\n"
"Block 6\n" // return block
- " live in: (0000010)\n"
- " live out: (0000000)\n"
- " kill: (0000000)\n"
+ " live in: (00001)\n"
+ " live out: (00000)\n"
+ " kill: (00000)\n"
"Block 7\n" // exit block
- " live in: (0000000)\n"
- " live out: (0000000)\n"
- " kill: (0000000)\n"
+ " live in: (00000)\n"
+ " live out: (00000)\n"
+ " kill: (00000)\n"
"Block 8\n" // synthesized pre header
- " live in: (0000000)\n"
- " live out: (0000000)\n"
- " kill: (0000100)\n";
+ " live in: (00000)\n"
+ " live out: (00000)\n"
+ " kill: (00010)\n";
const uint16_t data[] = ONE_REGISTER_CODE_ITEM(
Instruction::CONST_4 | 0 | 0,
@@ -432,45 +438,44 @@ TEST(LivenessTest, Loop5) {
TEST(LivenessTest, Loop6) {
// Bitsets are made of:
- // (constant0, constant4, constant5, phi in block 2, equal in block 2, equal in block 3,
- // phi in block 8)
+ // (constant0, constant4, constant5, phi in block 2, phi in block 8)
const char* expected =
"Block 0\n"
- " live in: (0000000)\n"
- " live out: (1110000)\n"
- " kill: (1110000)\n"
+ " live in: (00000)\n"
+ " live out: (11100)\n"
+ " kill: (11100)\n"
"Block 1\n"
- " live in: (1110000)\n"
- " live out: (0110000)\n"
- " kill: (0000000)\n"
+ " live in: (11100)\n"
+ " live out: (01100)\n"
+ " kill: (00000)\n"
"Block 2\n" // loop header
- " live in: (0110000)\n"
- " live out: (0111000)\n"
- " kill: (0001100)\n"
+ " live in: (01100)\n"
+ " live out: (01110)\n"
+ " kill: (00010)\n"
"Block 3\n"
- " live in: (0110000)\n"
- " live out: (0110000)\n"
- " kill: (0000010)\n"
+ " live in: (01100)\n"
+ " live out: (01100)\n"
+ " kill: (00000)\n"
"Block 4\n" // original back edge
- " live in: (0110000)\n"
- " live out: (0110000)\n"
- " kill: (0000000)\n"
+ " live in: (01100)\n"
+ " live out: (01100)\n"
+ " kill: (00000)\n"
"Block 5\n" // original back edge
- " live in: (0110000)\n"
- " live out: (0110000)\n"
- " kill: (0000000)\n"
+ " live in: (01100)\n"
+ " live out: (01100)\n"
+ " kill: (00000)\n"
"Block 6\n" // return block
- " live in: (0001000)\n"
- " live out: (0000000)\n"
- " kill: (0000000)\n"
+ " live in: (00010)\n"
+ " live out: (00000)\n"
+ " kill: (00000)\n"
"Block 7\n" // exit block
- " live in: (0000000)\n"
- " live out: (0000000)\n"
- " kill: (0000000)\n"
+ " live in: (00000)\n"
+ " live out: (00000)\n"
+ " kill: (00000)\n"
"Block 8\n" // synthesized back edge
- " live in: (0110000)\n"
- " live out: (0110000)\n"
- " kill: (0000001)\n";
+ " live in: (01100)\n"
+ " live out: (01100)\n"
+ " kill: (00001)\n";
const uint16_t data[] = ONE_REGISTER_CODE_ITEM(
Instruction::CONST_4 | 0 | 0,
@@ -488,45 +493,44 @@ TEST(LivenessTest, Loop6) {
TEST(LivenessTest, Loop7) {
// Bitsets are made of:
- // (constant0, constant4, constant5, phi in block 2, equal in block 2, equal in block 3,
- // phi in block 6)
+ // (constant0, constant4, constant5, phi in block 2, phi in block 6)
const char* expected =
"Block 0\n"
- " live in: (0000000)\n"
- " live out: (1110000)\n"
- " kill: (1110000)\n"
+ " live in: (00000)\n"
+ " live out: (11100)\n"
+ " kill: (11100)\n"
"Block 1\n"
- " live in: (1110000)\n"
- " live out: (0110000)\n"
- " kill: (0000000)\n"
+ " live in: (11100)\n"
+ " live out: (01100)\n"
+ " kill: (00000)\n"
"Block 2\n" // loop header
- " live in: (0110000)\n"
- " live out: (0111000)\n"
- " kill: (0001100)\n"
+ " live in: (01100)\n"
+ " live out: (01110)\n"
+ " kill: (00010)\n"
"Block 3\n"
- " live in: (0110000)\n"
- " live out: (0110000)\n"
- " kill: (0000010)\n"
+ " live in: (01100)\n"
+ " live out: (01100)\n"
+ " kill: (00000)\n"
"Block 4\n" // loop exit
- " live in: (0010000)\n"
- " live out: (0000000)\n"
- " kill: (0000000)\n"
+ " live in: (00100)\n"
+ " live out: (00000)\n"
+ " kill: (00000)\n"
"Block 5\n" // back edge
- " live in: (0110000)\n"
- " live out: (0110000)\n"
- " kill: (0000000)\n"
+ " live in: (01100)\n"
+ " live out: (01100)\n"
+ " kill: (00000)\n"
"Block 6\n" // return block
- " live in: (0000000)\n"
- " live out: (0000000)\n"
- " kill: (0000001)\n"
+ " live in: (00000)\n"
+ " live out: (00000)\n"
+ " kill: (00001)\n"
"Block 7\n" // exit block
- " live in: (0000000)\n"
- " live out: (0000000)\n"
- " kill: (0000000)\n"
+ " live in: (00000)\n"
+ " live out: (00000)\n"
+ " kill: (00000)\n"
"Block 8\n" // synthesized block to avoid critical edge.
- " live in: (0001000)\n"
- " live out: (0000000)\n"
- " kill: (0000000)\n";
+ " live in: (00010)\n"
+ " live out: (00000)\n"
+ " kill: (00000)\n";
const uint16_t data[] = ONE_REGISTER_CODE_ITEM(
Instruction::CONST_4 | 0 | 0,