diff options
author | 2014-11-24 17:47:10 +0000 | |
---|---|---|
committer | 2014-11-24 18:05:48 +0000 | |
commit | a8eed3acbc39c71ec22dc2943e71eaa07c6507dd (patch) | |
tree | 73f00c656e118c118c0b7dd8985df06624ca4666 /compiler/optimizing/linearize_test.cc | |
parent | 4d3ed1a6f34bd31ed30faaca0433cf2a4b19bb7b (diff) |
Revert "Revert "Fix the computation of linear ordering.""
PS2 fixes the obvious typos/wrong refactoring.
This reverts commit e50fa5887b1342b845826197d81950e26753fc9c.
Change-Id: I22f81d63a12cf01aafd61535abc2399d936d49c2
Diffstat (limited to 'compiler/optimizing/linearize_test.cc')
-rw-r--r-- | compiler/optimizing/linearize_test.cc | 59 |
1 files changed, 56 insertions, 3 deletions
diff --git a/compiler/optimizing/linearize_test.cc b/compiler/optimizing/linearize_test.cc index 6dd4207795..c49cf7e03f 100644 --- a/compiler/optimizing/linearize_test.cc +++ b/compiler/optimizing/linearize_test.cc @@ -50,10 +50,9 @@ static void TestCode(const uint16_t* data, const int* expected_order, size_t num SsaLivenessAnalysis liveness(*graph, &codegen); liveness.Analyze(); - ASSERT_EQ(liveness.GetLinearPostOrder().Size(), number_of_blocks); + ASSERT_EQ(liveness.GetLinearOrder().Size(), number_of_blocks); for (size_t i = 0; i < number_of_blocks; ++i) { - ASSERT_EQ(liveness.GetLinearPostOrder().Get(number_of_blocks - i - 1)->GetBlockId(), - expected_order[i]); + ASSERT_EQ(liveness.GetLinearOrder().Get(i)->GetBlockId(), expected_order[i]); } } @@ -194,4 +193,58 @@ TEST(LinearizeTest, CFG5) { TestCode(data, blocks, 12); } +TEST(LinearizeTest, CFG6) { + // Block0 + // | + // Block1 + // | + // Block2 ++++++++++++++ + // | + + // Block3 + + // / \ + + // Block8 Block4 + + // | / \ + + // Block5 <- Block9 Block6 + + // | + // Block7 + const uint16_t data[] = ONE_REGISTER_CODE_ITEM( + Instruction::CONST_4 | 0 | 0, + Instruction::GOTO | 0x0100, + Instruction::IF_EQ, 0x0004, + Instruction::IF_EQ, 0x0003, + Instruction::RETURN_VOID, + Instruction::GOTO | 0xFA00); + + const int blocks[] = {0, 1, 2, 3, 4, 6, 9, 8, 5, 7}; + TestCode(data, blocks, arraysize(blocks)); +} + +TEST(LinearizeTest, CFG7) { + // Structure of this graph (+ are back edges) + // Block0 + // | + // Block1 + // | + // Block2 ++++++++ + // | + + // Block3 + + // / \ + + // Block4 Block8 + + // / \ | + + // Block5 Block9 - Block6 + + // | + // Block7 + // + const uint16_t data[] = ONE_REGISTER_CODE_ITEM( + Instruction::CONST_4 | 0 | 0, + Instruction::GOTO | 0x0100, + Instruction::IF_EQ, 0x0005, + Instruction::IF_EQ, 0x0003, + Instruction::RETURN_VOID, + Instruction::GOTO | 0xFA00); + + const int blocks[] = {0, 1, 2, 3, 4, 9, 8, 6, 5, 7}; + TestCode(data, blocks, arraysize(blocks)); +} + } // namespace art |