/art/compiler/optimizing/ |
H A D | block_builder.cc | 29 HBasicBlock* block = branch_targets_[store_dex_pc]; local 30 if (block == nullptr) { 31 block = new (arena_) HBasicBlock(graph_, semantic_dex_pc); 32 branch_targets_[store_dex_pc] = block; 34 DCHECK_EQ(block->GetDexPc(), semantic_dex_pc); 35 return block; 39 // Create the first block for the dex instructions, single successor of the entry block. 44 // places where the program might fall through into/out of the a block and 53 // TODO: Do not create block i 121 HBasicBlock* block = graph_->GetEntryBlock(); local 191 GetTryItem( HBasicBlock* block, const ArenaSafeMap<uint32_t, const DexFile::TryItem*>& try_block_info) argument [all...] |
H A D | bounds_check_elimination.cc | 520 bool IsAddedBlock(HBasicBlock* block) const { 521 return block->GetBlockId() >= initial_block_size_; 551 void VisitBasicBlock(HBasicBlock* block) OVERRIDE { 552 DCHECK(!IsAddedBlock(block)); 554 HGraphVisitor::VisitBasicBlock(block); 558 AddComparesWithDeoptimization(block); variable 583 // Return the map of proven value ranges at the beginning of a basic block. 609 // Helper method to assign a new range to an instruction in given basic block. 705 HBasicBlock* block = instruction->GetBlock(); local 715 ValueRange* left_range = LookupValueRange(left, block); 807 HBasicBlock* block = bounds_check->GetBlock(); variable 1168 AddCompareWithDeoptimization(HBasicBlock* block, HInstruction* array_length, HInstruction* base, int32_t min_c, int32_t max_c) argument 1196 AddComparesWithDeoptimization(HBasicBlock* block) argument 1347 HBasicBlock* block = GetPreHeader(loop, instruction); local 1362 DynamicBCESeemsProfitable(HLoopInformation* loop, HBasicBlock* block) argument 1445 HBasicBlock* block = GetPreHeader(loop, check); local 1508 HBasicBlock* block = it->second; local 1520 InsertDeoptInLoop(HLoopInformation* loop, HBasicBlock* block, HInstruction* condition) argument 1534 HBasicBlock* block = bounds_check->GetBlock(); local 1544 HBasicBlock* block = GetPreHeader(loop, instruction); local [all...] |
H A D | bounds_check_elimination_test.cc | 306 HBasicBlock* block = new (&allocator_) HBasicBlock(graph_); local 307 graph_->AddBlock(block); 308 entry->AddSuccessor(block); 316 block->AddInstruction(null_check); 317 block->AddInstruction(array_length); 318 block->AddInstruction(bounds_check6); 319 block->AddInstruction(array_set); 327 block->AddInstruction(null_check); 328 block->AddInstruction(array_length); 329 block 374 HBasicBlock* block = new (allocator) HBasicBlock(graph); local 490 HBasicBlock* block = new (allocator) HBasicBlock(graph); local 596 HBasicBlock* block = new (allocator) HBasicBlock(graph); local 703 HBasicBlock* block = new (allocator) HBasicBlock(graph); local 805 HBasicBlock* block = new (&allocator_) HBasicBlock(graph_); local [all...] |
H A D | code_generator.cc | 149 HBasicBlock* block = (*block_order_)[i]; local 150 if (!block->IsSingleJump()) { 151 return block; 157 HBasicBlock* CodeGenerator::FirstNonEmptyBlock(HBasicBlock* block) const { 158 while (block->IsSingleJump()) { 159 block = block->GetSuccessors()[0]; 161 return block; 223 HBasicBlock* block = (*block_order_)[current_block_index_]; local 224 // Don't generate code for an empty block 1122 HBasicBlock* block = suspend_check->GetBlock(); local [all...] |
H A D | code_generator_arm.cc | 57 // S registers. Therefore there is no need to block it. 73 // Live registers will be restored in the catch block if caught. 97 // Live registers will be restored in the catch block if caught. 145 // If not null, the block to branch to after the suspend check. 165 // Live registers will be restored in the catch block if caught. 845 // now, just block them. 952 void CodeGeneratorARM::Bind(HBasicBlock* block) { argument 953 Label* label = GetLabelOf(block); 1212 HBasicBlock* block = got->GetBlock(); local 1215 HLoopInformation* info = block 4809 HBasicBlock* block = instruction->GetBlock(); local [all...] |
H A D | code_generator_arm64.cc | 230 // Live registers will be restored in the catch block if caught. 260 // Live registers will be restored in the catch block if caught. 374 // Live registers will be restored in the catch block if caught. 422 // If not null, the block to branch to after the suspend check. 1059 void CodeGeneratorARM64::Bind(HBasicBlock* block) { argument 1060 __ Bind(GetLabelOf(block)); 1116 // now, just block them. 1696 // We use a block to end the scratch scope before the write barrier, thus 2199 // We use a block to end the scratch scope before the write barrier, thus 2770 HBasicBlock* block local [all...] |
H A D | code_generator_arm64.h | 353 void Bind(HBasicBlock* block) OVERRIDE; 355 vixl::Label* GetLabelOf(HBasicBlock* block) { argument 356 block = FirstNonEmptyBlock(block); 357 return &(block_labels_[block->GetBlockId()]); 369 uintptr_t GetAddressOf(HBasicBlock* block) OVERRIDE { 370 vixl::Label* block_entry_label = GetLabelOf(block); 620 // Labels for each block that will be compiled. 622 ArenaDeque<vixl::Label> block_labels_; // Indexed by block id.
|
H A D | code_generator_mips.cc | 156 // Live registers will be restored in the catch block if caught. 192 // Live registers will be restored in the catch block if caught. 318 // Live registers will be restored in the catch block if caught. 368 // If not null, the block to branch to after the suspend check. 803 void CodeGeneratorMIPS::Bind(HBasicBlock* block) { argument 804 __ Bind(GetLabelOf(block)); 2586 HBasicBlock* block = got->GetBlock(); local 2588 HLoopInformation* info = block->GetLoopInformation(); 2590 if (info != nullptr && info->IsBackEdge(*block) && info->HasSuspendCheck()) { 2595 if (block 4677 HBasicBlock* block = instruction->GetBlock(); local [all...] |
H A D | code_generator_mips64.cc | 117 // Live registers will be restored in the catch block if caught. 152 // Live registers will be restored in the catch block if caught. 272 // Live registers will be restored in the catch block if caught. 320 // If not null, the block to branch to after the suspend check. 627 void CodeGeneratorMIPS64::Bind(HBasicBlock* block) { argument 628 __ Bind(GetLabelOf(block)); 2205 HBasicBlock* block = got->GetBlock(); local 2207 HLoopInformation* info = block->GetLoopInformation(); 2209 if (info != nullptr && info->IsBackEdge(*block) && info->HasSuspendCheck()) { 2214 if (block 3808 HBasicBlock* block = instruction->GetBlock(); local [all...] |
H A D | code_generator_x86.cc | 61 // Live registers will be restored in the catch block if caught. 87 // Live registers will be restored in the catch block if caught. 139 // Live registers will be restored in the catch block if caught. 894 void CodeGeneratorX86::Bind(HBasicBlock* block) { argument 895 __ Bind(GetLabelOf(block)); 1128 HBasicBlock* block = got->GetBlock(); local 1131 HLoopInformation* info = block->GetLoopInformation(); 1132 if (info != nullptr && info->IsBackEdge(*block) && info->HasSuspendCheck()) { 1137 if (block->IsEntryBlock() && (previous != nullptr) && previous->IsSuspendCheck()) { 4776 // we do not enter this block, a 5573 HBasicBlock* block = instruction->GetBlock(); local 7270 HBasicBlock* block = switch_instr_->GetBlock(); local [all...] |
H A D | code_generator_x86_64.cc | 65 // Live registers will be restored in the catch block if caught. 91 // Live registers will be restored in the catch block if caught. 193 // Live registers will be restored in the catch block if caught. 1119 void CodeGeneratorX86_64::Bind(HBasicBlock* block) { argument 1120 __ Bind(GetLabelOf(block)); 1229 HBasicBlock* block = got->GetBlock(); local 1232 HLoopInformation* info = block->GetLoopInformation(); 1233 if (info != nullptr && info->IsBackEdge(*block) && info->HasSuspendCheck()) { 1238 if (block->IsEntryBlock() && (previous != nullptr) && previous->IsSuspendCheck()) { 5068 HBasicBlock* block local 6693 HBasicBlock* block = switch_instr_->GetBlock(); local [all...] |
H A D | codegen_test.cc | 674 HBasicBlock* block = graph_in->GetEntryBlock()->GetSuccessors()[0]; 676 block->InsertInstructionBefore(move, block->GetLastInstruction()); 722 HBasicBlock* block = graph_in->GetEntryBlock()->GetSuccessors()[0]; 724 block->InsertInstructionBefore(move, block->GetLastInstruction()); 790 HBasicBlock* block = graph_in->GetEntryBlock()->GetSuccessors()[0]; 792 block->InsertInstructionBefore(move, block->GetLastInstruction()); 833 HBasicBlock* block local [all...] |
H A D | common_dominator.h | 36 // Create a finder starting with a given block. 37 explicit CommonDominator(HBasicBlock* block) argument 38 : dominator_(block), chain_length_(ChainLength(block)) { 39 DCHECK(block != nullptr); 42 // Update the common dominator with another block. 43 void Update(HBasicBlock* block) { argument 44 DCHECK(block != nullptr); 47 if (block == block2) { 50 size_t chain_length = ChainLength(block); 78 ChainLength(HBasicBlock* block) argument [all...] |
H A D | constant_folding.cc | 29 void VisitBasicBlock(HBasicBlock* block) OVERRIDE; 78 void HConstantFoldingVisitor::VisitBasicBlock(HBasicBlock* block) { argument 79 // Traverse this block's instructions (phis don't need to be 82 for (HInstructionIterator it(block->GetInstructions()); !it.Done(); it.Advance()) { 264 HBasicBlock* block = instruction->GetBlock(); local 273 block->RemoveInstruction(instruction); 289 block->RemoveInstruction(instruction); 308 HBasicBlock* block = instruction->GetBlock(); local 322 block->RemoveInstruction(instruction); 337 HBasicBlock* block local [all...] |
H A D | constant_folding_test.cc | 749 HBasicBlock* block = new (&allocator_) HBasicBlock(graph_); local 750 graph_->AddBlock(block); 754 entry_block->AddSuccessor(block); 755 block->AddSuccessor(exit_block); 766 block->AddInstruction(last = new (&allocator_) HAbove(zero, parameter)); 767 block->AddInstruction(new (&allocator_) HSelect(last, parameter, parameter, 0)); 768 block->AddInstruction(last = new (&allocator_) HAbove(parameter, zero)); 769 block->AddInstruction(new (&allocator_) HSelect(last, parameter, parameter, 0)); 770 block->AddInstruction(last = new (&allocator_) HAboveOrEqual(zero, parameter)); 771 block [all...] |
H A D | dead_code_elimination.cc | 33 HBasicBlock* block = worklist.back(); local 35 int block_id = block->GetBlockId(); 38 ArrayRef<HBasicBlock* const> live_successors(block->GetSuccessors()); 39 HInstruction* last_instruction = block->GetLastInstruction(); 66 DCHECK_EQ(live_successors[0], block->GetSuccessors()[switch_index]); 84 void HDeadCodeElimination::MaybeRecordDeadBlock(HBasicBlock* block) { argument 87 block->GetPhis().CountSize() + block->GetInstructions().CountSize()); 107 // block's chain of dominators and nested loops need to be updated from the 110 HBasicBlock* block local 138 HBasicBlock* block = it.Current(); local 158 HBasicBlock* block = b.Current(); local [all...] |
H A D | find_loops_test.cc | 41 for (HBasicBlock* block : graph->GetBlocks()) { 42 ASSERT_EQ(block->GetLoopInformation(), nullptr); 54 for (HBasicBlock* block : graph->GetBlocks()) { 55 ASSERT_EQ(block->GetLoopInformation(), nullptr); 70 for (HBasicBlock* block : graph->GetBlocks()) { 71 ASSERT_EQ(block->GetLoopInformation(), nullptr); 87 for (HBasicBlock* block : graph->GetBlocks()) { 88 ASSERT_EQ(block->GetLoopInformation(), nullptr); 102 for (HBasicBlock* block : graph->GetBlocks()) { 103 ASSERT_EQ(block 113 HBasicBlock* block = graph->GetBlocks()[block_id]; local [all...] |
H A D | graph_checker.cc | 34 static bool IsExitTryBoundaryIntoExitBlock(HBasicBlock* block) { argument 35 if (!block->IsSingleTryBoundary()) { 39 HTryBoundary* boundary = block->GetLastInstruction()->AsTryBoundary(); 40 return block->GetPredecessors().size() == 1u && 45 void GraphChecker::VisitBasicBlock(HBasicBlock* block) { argument 46 current_block_ = block; 48 // Check consistency with respect to predecessors of `block`. 52 sorted_predecessors.assign(block->GetPredecessors().begin(), block->GetPredecessors().end()); 61 std::count(p->GetSuccessors().begin(), p->GetSuccessors().end(), block); 865 HBasicBlock* block = instruction->GetBlock(); local 995 HBasicBlock* block = instruction->GetBlock(); local [all...] |
H A D | graph_test.cc | 40 HBasicBlock* block = new (allocator) HBasicBlock(graph); local 41 graph->AddBlock(block); 43 block->AddInstruction(got); 44 return block; 48 HBasicBlock* block = createGotoBlock(graph, allocator); local 49 graph->SetEntryBlock(block); 50 return block; 54 HBasicBlock* block = new (allocator) HBasicBlock(graph); local 55 graph->AddBlock(block); 57 block 62 HBasicBlock* block = new (allocator) HBasicBlock(graph); local 292 HBasicBlock* block = createGotoBlock(graph, &allocator); local [all...] |
H A D | graph_visualizer.cc | 254 void PrintPredecessors(HBasicBlock* block) { argument 257 for (HBasicBlock* predecessor : block->GetPredecessors()) { 260 if (block->IsEntryBlock() && (disasm_info_ != nullptr)) { 266 void PrintSuccessors(HBasicBlock* block) { argument 269 for (HBasicBlock* successor : block->GetNormalSuccessors()) { 275 void PrintExceptionHandlers(HBasicBlock* block) { argument 278 for (HBasicBlock* handler : block->GetExceptionalSuccessors()) { 281 if (block->IsExitBlock() && 621 StartTag("block"); 648 EndTag("block"); 714 PrintPredecessors(block); variable 715 PrintSuccessors(block); variable 716 PrintExceptionHandlers(block); variable [all...] |
H A D | gvn.cc | 366 // Per-block GVN. Will also update the ValueSet of the dominated and 368 void VisitBasicBlock(HBasicBlock* block); 374 ValueSet* FindSetFor(HBasicBlock* block) const { 375 ValueSet* result = sets_[block->GetBlockId()]; 376 DCHECK(result != nullptr) << "Could not find set for block B" << block->GetBlockId(); 380 void AbandonSetFor(HBasicBlock* block) { argument 381 DCHECK(sets_[block->GetBlockId()] != nullptr) 382 << "Block B" << block->GetBlockId() << " expected to have a set"; 383 sets_[block 419 VisitBasicBlock(HBasicBlock* block) argument 534 FindVisitedBlockWithRecyclableSet( HBasicBlock* block, const ValueSet& reference_set) const argument [all...] |
H A D | gvn_test.cc | 43 HBasicBlock* block = new (&allocator) HBasicBlock(graph); local 44 graph->AddBlock(block); 45 entry->AddSuccessor(block); 47 block->AddInstruction(new (&allocator) HInstanceFieldGet(parameter, 56 block->AddInstruction(new (&allocator) HInstanceFieldGet(parameter, 65 HInstruction* to_remove = block->GetLastInstruction(); 66 block->AddInstruction(new (&allocator) HInstanceFieldGet(parameter, 75 HInstruction* different_offset = block->GetLastInstruction(); 77 block->AddInstruction(new (&allocator) HInstanceFieldSet(parameter, 87 block 128 HBasicBlock* block = new (&allocator) HBasicBlock(graph); local 212 HBasicBlock* block = new (&allocator) HBasicBlock(graph); local [all...] |
H A D | induction_var_range.cc | 109 static HInstruction* Insert(HBasicBlock* block, HInstruction* instruction) { argument 110 DCHECK(block != nullptr); 111 DCHECK(block->GetLastInstruction() != nullptr) << block->GetBlockId(); 113 block->InsertInstructionBefore(instruction, block->GetLastInstruction()); 204 HBasicBlock* block, 208 if (!GenerateCode(context, instruction, graph, block, lower, upper, nullptr, &b1, &b2)) { 215 HBasicBlock* block, 218 if (!GenerateCode(context, context, graph, block, nullpt 201 GenerateRangeCode(HInstruction* context, HInstruction* instruction, HGraph* graph, HBasicBlock* block, HInstruction** lower, HInstruction** upper) argument 213 GenerateTakenTest(HInstruction* context, HGraph* graph, HBasicBlock* block, HInstruction** taken_test) argument 605 GenerateCode(HInstruction* context, HInstruction* instruction, HGraph* graph, HBasicBlock* block, HInstruction** lower, HInstruction** upper, HInstruction** taken_test, bool* needs_finite_test, bool* needs_taken_test) const argument 656 GenerateCode(HInductionVarAnalysis::InductionInfo* info, HInductionVarAnalysis::InductionInfo* trip, HGraph* graph, HBasicBlock* block, HInstruction** result, bool in_body, bool is_min) const argument [all...] |
H A D | inliner.cc | 75 // Because we are changing the graph when inlining, we need to remember the next block. 80 HBasicBlock* block = next_block; local 82 for (HInstruction* instruction = block->GetFirstInstruction(); instruction != nullptr;) { 558 // Spit the block after the compare: `cursor_block` will now be the start of the diamond, 559 // and the returned block is the start of the then branch (that could contain multiple blocks). 562 // Split the block containing the invoke before and after the invoke. The returned block 564 // the diamond. The returned block of the split after will be the merge block 570 // If the methods we are inlining return a value, we create a phi in the merge block [all...] |
H A D | instruction_builder.cc | 36 ArenaVector<HInstruction*>* HInstructionBuilder::GetLocalsFor(HBasicBlock* block) { argument 37 ArenaVector<HInstruction*>* locals = &locals_for_[block->GetBlockId()]; 42 if (block->IsCatchBlock()) { 57 block->AddPhi(phi); 66 HInstruction* HInstructionBuilder::ValueOfLocalAt(HBasicBlock* block, size_t local) { argument 67 ArenaVector<HInstruction*>* locals = GetLocalsFor(block); 88 DCHECK(!catch_block_visited) << "Catch block visited before its try block."; 93 << "No instructions throwing into a live catch block."; 96 // If the block i 231 HBasicBlock* block = loop_headers_[i - 1]; local 250 IsBlockPopulated(HBasicBlock* block) argument 589 IsFallthroughInstruction(const Instruction& instruction, uint32_t dex_pc, HBasicBlock* block) argument [all...] |