diff options
Diffstat (limited to 'compiler/optimizing/licm_test.cc')
-rw-r--r-- | compiler/optimizing/licm_test.cc | 52 |
1 files changed, 8 insertions, 44 deletions
diff --git a/compiler/optimizing/licm_test.cc b/compiler/optimizing/licm_test.cc index 58d90c3168..08a2dcc179 100644 --- a/compiler/optimizing/licm_test.cc +++ b/compiler/optimizing/licm_test.cc @@ -31,12 +31,9 @@ namespace art HIDDEN { class LICMTest : public OptimizingUnitTest { public: LICMTest() - : entry_(nullptr), - loop_preheader_(nullptr), + : loop_preheader_(nullptr), loop_header_(nullptr), loop_body_(nullptr), - return_(nullptr), - exit_(nullptr), parameter_(nullptr), int_constant_(nullptr), float_constant_(nullptr) { @@ -48,40 +45,15 @@ class LICMTest : public OptimizingUnitTest { // Builds a singly-nested loop structure in CFG. Tests can further populate // the basic blocks with instructions to set up interesting scenarios. void BuildLoop() { - entry_ = new (GetAllocator()) HBasicBlock(graph_); - loop_preheader_ = new (GetAllocator()) HBasicBlock(graph_); - loop_header_ = new (GetAllocator()) HBasicBlock(graph_); - loop_body_ = new (GetAllocator()) HBasicBlock(graph_); - return_ = new (GetAllocator()) HBasicBlock(graph_); - exit_ = new (GetAllocator()) HBasicBlock(graph_); - - graph_->AddBlock(entry_); - graph_->AddBlock(loop_preheader_); - graph_->AddBlock(loop_header_); - graph_->AddBlock(loop_body_); - graph_->AddBlock(return_); - graph_->AddBlock(exit_); - - graph_->SetEntryBlock(entry_); - graph_->SetExitBlock(exit_); - - // Set up loop flow in CFG. - entry_->AddSuccessor(loop_preheader_); - loop_preheader_->AddSuccessor(loop_header_); - loop_header_->AddSuccessor(loop_body_); - loop_header_->AddSuccessor(return_); - loop_body_->AddSuccessor(loop_header_); - return_->AddSuccessor(exit_); + HBasicBlock* return_block = InitEntryMainExitGraphWithReturnVoid(); + std::tie(loop_preheader_, loop_header_, loop_body_) = CreateWhileLoop(return_block); + loop_header_->SwapSuccessors(); // Move the loop exit to the "else" successor. // Provide boiler-plate instructions. parameter_ = MakeParam(DataType::Type::kReference); int_constant_ = graph_->GetIntConstant(42); float_constant_ = graph_->GetFloatConstant(42.0f); - MakeGoto(loop_preheader_); MakeIf(loop_header_, parameter_); - MakeGoto(loop_body_); - MakeReturnVoid(return_); - MakeExit(exit_); } // Performs LICM optimizations (after proper set up). @@ -92,16 +64,10 @@ class LICMTest : public OptimizingUnitTest { LICM(graph_, side_effects, nullptr).Run(); } - // General building fields. - HGraph* graph_; - // Specific basic blocks. - HBasicBlock* entry_; HBasicBlock* loop_preheader_; HBasicBlock* loop_header_; HBasicBlock* loop_body_; - HBasicBlock* return_; - HBasicBlock* exit_; HInstruction* parameter_; // "this" HInstruction* int_constant_; @@ -164,12 +130,10 @@ TEST_F(LICMTest, NoArrayHoisting) { BuildLoop(); // Populate the loop with instructions: set/get array with same types. - HInstruction* get_array = new (GetAllocator()) HArrayGet( - parameter_, int_constant_, DataType::Type::kFloat32, 0); - loop_body_->InsertInstructionBefore(get_array, loop_body_->GetLastInstruction()); - HInstruction* set_array = new (GetAllocator()) HArraySet( - parameter_, get_array, float_constant_, DataType::Type::kFloat32, 0); - loop_body_->InsertInstructionBefore(set_array, loop_body_->GetLastInstruction()); + HInstruction* get_array = + MakeArrayGet(loop_body_, parameter_, int_constant_, DataType::Type::kFloat32); + HInstruction* set_array = + MakeArraySet(loop_body_, parameter_, get_array, float_constant_, DataType::Type::kFloat32); EXPECT_EQ(get_array->GetBlock(), loop_body_); EXPECT_EQ(set_array->GetBlock(), loop_body_); |