Lines Matching refs:block

43     HBasicBlock* block = worklist.back();  in MarkReachableBlocks()  local
45 int block_id = block->GetBlockId(); in MarkReachableBlocks()
48 ArrayRef<HBasicBlock* const> live_successors(block->GetSuccessors()); in MarkReachableBlocks()
49 HInstruction* last_instruction = block->GetLastInstruction(); in MarkReachableBlocks()
76 DCHECK_EQ(live_successors[0], block->GetSuccessors()[switch_index]); in MarkReachableBlocks()
94 void HDeadCodeElimination::MaybeRecordDeadBlock(HBasicBlock* block) { in MaybeRecordDeadBlock() argument
97 block->GetPhis().CountSize() + block->GetInstructions().CountSize()); in MaybeRecordDeadBlock()
153 static bool RemoveNonNullControlDependences(HBasicBlock* block, HBasicBlock* throws) { in RemoveNonNullControlDependences() argument
155 if (!block->EndsWithIf()) { in RemoveNonNullControlDependences()
158 HIf* ifs = block->GetLastInstruction()->AsIf(); in RemoveNonNullControlDependences()
200 if (user_block != block && in RemoveNonNullControlDependences()
202 block->Dominates(user_block)) { in RemoveNonNullControlDependences()
260 for (HBasicBlock* block : graph_->GetReversePostOrder()) { in SimplifyAlwaysThrows()
261 if (block->IsTryBlock()) { in SimplifyAlwaysThrows()
270 for (HInstructionIterator it(block->GetInstructions()); !it.Done(); it.Advance()) { in SimplifyAlwaysThrows()
285 if (block->GetSuccessors().size() == 1 && in SimplifyAlwaysThrows()
286 block->GetSingleSuccessor() == exit && in SimplifyAlwaysThrows()
287 block->GetLastInstruction()->GetPrevious() == throwing_invoke) { in SimplifyAlwaysThrows()
296 HBasicBlock* new_block = block->SplitBefore(throwing_invoke->GetNext(), in SimplifyAlwaysThrows()
298 DCHECK_EQ(block->GetSingleSuccessor(), new_block); in SimplifyAlwaysThrows()
299 block->ReplaceSuccessor(new_block, exit); in SimplifyAlwaysThrows()
307 if (block->GetPredecessors().size() == 1u && in SimplifyAlwaysThrows()
308 RemoveNonNullControlDependences(block->GetSinglePredecessor(), block)) { in SimplifyAlwaysThrows()
328 for (HBasicBlock* block : graph_->GetPostOrder()) { in SimplifyIfs()
329 if (block->IsCatchBlock()) { in SimplifyIfs()
338 HInstruction* last = block->GetLastInstruction(); in SimplifyIfs()
343 if (block->IsLoopHeader()) { in SimplifyIfs()
349 MaybeAddPhi(block); in SimplifyIfs()
357 if (block->HasSinglePhi() && in SimplifyIfs()
358 block->GetFirstPhi()->HasOnlyOneNonEnvironmentUse()) { in SimplifyIfs()
359 HInstruction* first = block->GetFirstInstruction(); in SimplifyIfs()
360 bool has_only_phi_and_if = (last == first) && (last->InputAt(0) == block->GetFirstPhi()); in SimplifyIfs()
364 HasInput(first->AsCondition(), block->GetFirstPhi()) && in SimplifyIfs()
370 HPhi* phi = block->GetFirstPhi()->AsPhi(); in SimplifyIfs()
395 HBasicBlock* predecessor_to_update = block->GetPredecessors()[i]; in SimplifyIfs()
404 predecessor_to_update->ReplaceSuccessor(block, successor_to_update); in SimplifyIfs()
407 if (block->IsInLoop()) { in SimplifyIfs()
417 if (block->GetPredecessors().size() == 1) { in SimplifyIfs()
419 block->RemovePhi(phi); in SimplifyIfs()
426 block->RemoveInstruction(first); in SimplifyIfs()
452 void HDeadCodeElimination::MaybeAddPhi(HBasicBlock* block) { in MaybeAddPhi() argument
453 DCHECK(block->GetLastInstruction()->IsIf()); in MaybeAddPhi()
454 HIf* if_instruction = block->GetLastInstruction()->AsIf(); in MaybeAddPhi()
460 if (block->GetNumberOfPredecessors() < 2u) { in MaybeAddPhi()
465 if (!block->GetPhis().IsEmpty()) { in MaybeAddPhi()
471 HBasicBlock* dominator = block->GetDominator(); in MaybeAddPhi()
499 for (HBasicBlock* succ : block->GetSuccessors()) { in MaybeAddPhi()
504 const size_t pred_size = block->GetNumberOfPredecessors(); in MaybeAddPhi()
509 HBasicBlock* pred = block->GetPredecessors()[index]; in MaybeAddPhi()
557 block->AddPhi(new_phi); in MaybeAddPhi()
574 HBasicBlock* block = graph_->GetReversePostOrder()[i]; in ConnectSuccessiveBlocks() local
575 DCHECK(!block->IsEntryBlock()); in ConnectSuccessiveBlocks()
576 while (block->GetLastInstruction()->IsGoto()) { in ConnectSuccessiveBlocks()
577 HBasicBlock* successor = block->GetSingleSuccessor(); in ConnectSuccessiveBlocks()
582 block->MergeWith(successor); in ConnectSuccessiveBlocks()
585 DCHECK_EQ(block, graph_->GetReversePostOrder()[i]); in ConnectSuccessiveBlocks()
616 HBasicBlock* block, in DisconnectHandlersAndUpdateTryBoundary() argument
618 if (block->IsInLoop()) { in DisconnectHandlersAndUpdateTryBoundary()
623 while (block->GetSuccessors().size() > 1) { in DisconnectHandlersAndUpdateTryBoundary()
624 HBasicBlock* handler = block->GetSuccessors()[1]; in DisconnectHandlersAndUpdateTryBoundary()
626 block->RemoveSuccessor(handler); in DisconnectHandlersAndUpdateTryBoundary()
627 handler->RemovePredecessor(block); in DisconnectHandlersAndUpdateTryBoundary()
634 DCHECK(block->EndsWithTryBoundary()); in DisconnectHandlersAndUpdateTryBoundary()
635 HInstruction* last = block->GetLastInstruction(); in DisconnectHandlersAndUpdateTryBoundary()
636 block->RemoveInstruction(last); in DisconnectHandlersAndUpdateTryBoundary()
637 block->AddInstruction(new (graph_->GetAllocator()) HGoto(last->GetDexPc())); in DisconnectHandlersAndUpdateTryBoundary()
638 DCHECK_EQ(block->GetSuccessors().size(), 1u); in DisconnectHandlersAndUpdateTryBoundary()
659 HBasicBlock* block = blocks[i]; in RemoveTry() local
661 block->SetTryCatchInformation(nullptr); in RemoveTry()
662 if (block->IsInLoop()) { in RemoveTry()
666 if (block->EndsWithTryBoundary()) { in RemoveTry()
668 DCHECK(!block->GetLastInstruction()->AsTryBoundary()->IsEntry()); in RemoveTry()
669 DisconnectHandlersAndUpdateTryBoundary(block, any_block_in_loop); in RemoveTry()
671 if (block->GetSingleSuccessor()->IsExitBlock()) { in RemoveTry()
676 DCHECK(block->IsSingleGoto()); in RemoveTry()
677 HBasicBlock* predecessor = block->GetSinglePredecessor(); in RemoveTry()
678 predecessor->ReplaceSuccessor(block, graph_->GetExitBlock()); in RemoveTry()
680 if (!block->GetDominatedBlocks().empty()) { in RemoveTry()
682 DCHECK_EQ(block->GetDominatedBlocks().size(), 1u); in RemoveTry()
683 DCHECK_EQ(graph_->GetExitBlock()->GetDominator(), block); in RemoveTry()
686 block->RemoveDominatedBlock(graph_->GetExitBlock()); in RemoveTry()
704 for (HBasicBlock* block : graph_->GetReversePostOrderSkipEntryBlock()) { in RemoveUnneededTries()
705 if (block->IsTryBlock()) { in RemoveUnneededTries()
706 HBasicBlock* key = block->GetTryCatchInformation()->GetTryEntry().GetBlock(); in RemoveUnneededTries()
711 it->second.blocks_in_try.SetBit(block->GetBlockId()); in RemoveUnneededTries()
717 HBasicBlock* block = it->first; in RemoveUnneededTries() local
718 DCHECK(block->EndsWithTryBoundary()); in RemoveUnneededTries()
719 HTryBoundary* try_boundary = block->GetLastInstruction()->AsTryBoundary(); in RemoveUnneededTries()
782 for (HBasicBlock* block : graph_->GetPostOrder()) { in RemoveEmptyIfs()
783 if (!block->EndsWithIf()) { in RemoveEmptyIfs()
787 HIf* if_instr = block->GetLastInstruction()->AsIf(); in RemoveEmptyIfs()
830 block->ReplaceAndRemoveInstructionWith( in RemoveEmptyIfs()
834 block->RemoveSuccessor(true_block); in RemoveEmptyIfs()
835 block->RemoveSuccessor(false_block); in RemoveEmptyIfs()
836 true_block->RemovePredecessor(block); in RemoveEmptyIfs()
837 false_block->RemovePredecessor(block); in RemoveEmptyIfs()
838 block->AddSuccessor(merge_false); in RemoveEmptyIfs()
885 for (HBasicBlock* block : graph_->GetPostOrder()) { in RemoveDeadBlocks()
886 int id = block->GetBlockId(); in RemoveDeadBlocks()
888 MaybeRecordDeadBlock(block); in RemoveDeadBlocks()
889 block->DisconnectAndDelete(); in RemoveDeadBlocks()
891 if (block->IsInLoop()) { in RemoveDeadBlocks()
914 for (HBasicBlock* block : graph_->GetPostOrder()) { in RemoveDeadInstructions()
917 HBackwardInstructionIterator i(block->GetInstructions()); in RemoveDeadInstructions()
925 block->RemoveInstruction(inst); in RemoveDeadInstructions()
931 for (HBackwardInstructionIterator phi_it(block->GetPhis()); !phi_it.Done(); phi_it.Advance()) { in RemoveDeadInstructions()
935 block->RemovePhi(phi); in RemoveDeadInstructions()
949 for (HBasicBlock* block : graph_->GetReversePostOrder()) { in UpdateGraphFlags()
950 for (HInstructionIterator it(block->GetInstructions()); !it.Done(); it.Advance()) { in UpdateGraphFlags()