Lines Matching refs:block
58 void HGraph::AddBlock(HBasicBlock* block) { in AddBlock() argument
59 block->SetBlockId(blocks_.size()); in AddBlock()
60 blocks_.push_back(block); in AddBlock()
156 HBasicBlock* block = blocks_[i]; in RemoveDeadBlocksInstructionsAsUsersAndDisconnect() local
157 if (block == nullptr) continue; in RemoveDeadBlocksInstructionsAsUsersAndDisconnect()
160 for (HInstructionIterator it(block->GetPhis()); !it.Done(); it.Advance()) { in RemoveDeadBlocksInstructionsAsUsersAndDisconnect()
163 for (HInstructionIterator it(block->GetInstructions()); !it.Done(); it.Advance()) { in RemoveDeadBlocksInstructionsAsUsersAndDisconnect()
168 block->DisconnectFromSuccessors(&visited); in RemoveDeadBlocksInstructionsAsUsersAndDisconnect()
195 HBasicBlock* block = blocks_[i]; in RemoveDeadBlocks() local
196 if (block == nullptr) continue; in RemoveDeadBlocks()
199 block->RemoveCatchPhiUsesAndInstruction(/* building_dominator_tree = */ true); in RemoveDeadBlocks()
204 if (block->IsExitBlock()) { in RemoveDeadBlocks()
209 block->SetGraph(nullptr); in RemoveDeadBlocks()
258 for (HBasicBlock* block : GetActiveBlocks()) { in ClearDominanceInformation()
259 block->ClearDominanceInformation(); in ClearDominanceInformation()
267 for (HBasicBlock* block : GetActiveBlocks()) { in ClearLoopInformation()
268 block->SetLoopInformation(nullptr); in ClearLoopInformation()
285 static bool UpdateDominatorOfSuccessor(HBasicBlock* block, HBasicBlock* successor) { in UpdateDominatorOfSuccessor() argument
286 DCHECK(ContainsElement(block->GetSuccessors(), successor)); in UpdateDominatorOfSuccessor()
290 (old_dominator == nullptr) ? block in UpdateDominatorOfSuccessor()
291 : CommonDominator::ForPair(old_dominator, block); in UpdateDominatorOfSuccessor()
510 for (HBasicBlock* block : blocks_) { in ComputeDominanceInformation()
511 if (block != nullptr && in ComputeDominanceInformation()
512 block->IsLoopHeader() && in ComputeDominanceInformation()
513 block->GetLoopInformation()->HasBackEdgeNotDominatedByHeader()) { in ComputeDominanceInformation()
522 for (HBasicBlock* block : GetReversePostOrder()) { in ComputeDominanceInformation()
523 for (HBasicBlock* successor : block->GetSuccessors()) { in ComputeDominanceInformation()
524 update_occurred |= UpdateDominatorOfSuccessor(block, successor); in ComputeDominanceInformation()
533 for (HBasicBlock* block : GetReversePostOrder()) { in ComputeDominanceInformation()
534 for (HBasicBlock* successor : block->GetSuccessors()) { in ComputeDominanceInformation()
535 DCHECK(!UpdateDominatorOfSuccessor(block, successor)); in ComputeDominanceInformation()
542 for (HBasicBlock* block : GetReversePostOrder()) { in ComputeDominanceInformation()
543 if (!block->IsEntryBlock()) { in ComputeDominanceInformation()
544 block->GetDominator()->AddDominatedBlock(block); in ComputeDominanceInformation()
549 HBasicBlock* HGraph::SplitEdge(HBasicBlock* block, HBasicBlock* successor) { in SplitEdge() argument
554 new_block->InsertBetween(block, successor); in SplitEdge()
558 void HGraph::SplitCriticalEdge(HBasicBlock* block, HBasicBlock* successor) { in SplitCriticalEdge() argument
561 HBasicBlock* new_block = SplitEdge(block, successor); in SplitCriticalEdge()
566 if (info->IsBackEdge(*block)) { in SplitCriticalEdge()
567 info->RemoveBackEdge(block); in SplitCriticalEdge()
573 HBasicBlock* HGraph::SplitEdgeAndUpdateRPO(HBasicBlock* block, HBasicBlock* successor) { in SplitEdgeAndUpdateRPO() argument
574 HBasicBlock* new_block = SplitEdge(block, successor); in SplitEdgeAndUpdateRPO()
578 reverse_post_order_.begin() + IndexOfElement(reverse_post_order_, block) + 1, new_block); in SplitEdgeAndUpdateRPO()
583 static void FixPhisAfterPredecessorsReodering(HBasicBlock* block, size_t first, size_t second) { in FixPhisAfterPredecessorsReodering() argument
584 for (HInstructionIterator it(block->GetPhis()); !it.Done(); it.Advance()) { in FixPhisAfterPredecessorsReodering()
748 for (HBasicBlock* block : GetReversePostOrder()) { in ComputeTryBlockInformation()
749 if (block->IsEntryBlock() || block->IsCatchBlock()) { in ComputeTryBlockInformation()
758 HBasicBlock* first_predecessor = block->GetPredecessors()[0]; in ComputeTryBlockInformation()
759 DCHECK_IMPLIES(block->IsLoopHeader(), in ComputeTryBlockInformation()
760 !block->GetLoopInformation()->IsBackEdge(*first_predecessor)); in ComputeTryBlockInformation()
764 (block->GetTryCatchInformation() == nullptr || in ComputeTryBlockInformation()
765 try_entry != &block->GetTryCatchInformation()->GetTryEntry())) { in ComputeTryBlockInformation()
768 block->SetTryCatchInformation(new (allocator_) TryCatchInformation(*try_entry)); in ComputeTryBlockInformation()
782 HBasicBlock* block = blocks_[block_id]; in SimplifyCFG() local
783 if (block == nullptr) continue; in SimplifyCFG()
784 if (block->GetSuccessors().size() > 1) { in SimplifyCFG()
788 ArrayRef<HBasicBlock* const> normal_successors = block->GetNormalSuccessors(); in SimplifyCFG()
795 DCHECK(block->IsSingleTryBoundary()); in SimplifyCFG()
797 SplitCriticalEdge(block, successor); in SimplifyCFG()
800 normal_successors = block->GetNormalSuccessors(); in SimplifyCFG()
806 if (block->IsLoopHeader()) { in SimplifyCFG()
807 SimplifyLoop(block); in SimplifyCFG()
808 } else if (!block->IsEntryBlock() && in SimplifyCFG()
809 block->GetFirstInstruction() != nullptr && in SimplifyCFG()
810 block->GetFirstInstruction()->IsSuspendCheck()) { in SimplifyCFG()
813 block->RemoveInstruction(block->GetFirstInstruction()); in SimplifyCFG()
822 for (HBasicBlock* block : GetPostOrder()) { in AnalyzeLoops()
823 if (block->IsLoopHeader()) { in AnalyzeLoops()
824 if (block->IsCatchBlock()) { in AnalyzeLoops()
830 block->GetLoopInformation()->Populate(); in AnalyzeLoops()
839 for (HBasicBlock* block : back_edges_) { in Dump()
840 os << "back edge: " << block->GetBlockId() << std::endl; in Dump()
842 for (HBasicBlock* block : header_->GetPredecessors()) { in Dump()
843 os << "predecessor: " << block->GetBlockId() << std::endl; in Dump()
950 void HLoopInformation::Add(HBasicBlock* block) { in Add() argument
951 blocks_.SetBit(block->GetBlockId()); in Add()
954 void HLoopInformation::Remove(HBasicBlock* block) { in Remove() argument
955 blocks_.ClearBit(block->GetBlockId()); in Remove()
958 void HLoopInformation::PopulateRecursive(HBasicBlock* block) { in PopulateRecursive() argument
959 if (blocks_.IsBitSet(block->GetBlockId())) { in PopulateRecursive()
963 blocks_.SetBit(block->GetBlockId()); in PopulateRecursive()
964 block->SetInLoop(this); in PopulateRecursive()
965 if (block->IsLoopHeader()) { in PopulateRecursive()
968 DCHECK(block->GetLoopInformation()->IsPopulated()); in PopulateRecursive()
969 if (block->GetLoopInformation()->IsIrreducible()) { in PopulateRecursive()
973 for (HBasicBlock* predecessor : block->GetPredecessors()) { in PopulateRecursive()
978 void HLoopInformation::PopulateIrreducibleRecursive(HBasicBlock* block, ArenaBitVector* finalized) { in PopulateIrreducibleRecursive() argument
979 size_t block_id = block->GetBlockId(); in PopulateIrreducibleRecursive()
988 if (block->IsLoopHeader()) { in PopulateIrreducibleRecursive()
994 HBasicBlock* pre_header = block->GetPredecessors()[0]; in PopulateIrreducibleRecursive()
997 block->SetInLoop(this); in PopulateIrreducibleRecursive()
1002 HLoopInformation* info = block->GetLoopInformation(); in PopulateIrreducibleRecursive()
1010 for (HBasicBlock* predecessor : block->GetPredecessors()) { in PopulateIrreducibleRecursive()
1013 block->SetInLoop(this); in PopulateIrreducibleRecursive()
1095 HBasicBlock* block = header_->GetPredecessors()[0]; in GetPreHeader() local
1096 DCHECK(irreducible_ || (block == header_->GetDominator())); in GetPreHeader()
1097 return block; in GetPreHeader()
1100 bool HLoopInformation::Contains(const HBasicBlock& block) const { in Contains()
1101 return blocks_.IsBitSet(block.GetBlockId()); in Contains()
1130 bool HLoopInformation::DominatesAllBackEdges(HBasicBlock* block) { in DominatesAllBackEdges() argument
1132 if (!block->Dominates(back_edge)) { in DominatesAllBackEdges()
1206 HBasicBlock* block, in Add() argument
1210 instruction->SetBlock(block); in Add()
1211 instruction->SetId(block->GetGraph()->GetNextInstructionId()); in Add()
1262 HBasicBlock* block, in Remove() argument
1265 DCHECK_EQ(block, instruction->GetBlock()); in Remove()
1511 HBasicBlock* block = GetBlock(); in StrictlyDominates() local
1513 if (block != other_block) { in StrictlyDominates()
1537 return block->GetInstructions().FoundBefore(this, other_instruction); in StrictlyDominates()
1798 for (HBasicBlock* block : graph_->GetActiveBlocks()) { in FOR_EACH_CONCRETE_INSTRUCTION()
1799 VisitBasicBlock(block); in FOR_EACH_CONCRETE_INSTRUCTION()
1804 for (HBasicBlock* block : graph_->GetReversePostOrder()) { in VisitReversePostOrder()
1805 VisitBasicBlock(block); in VisitReversePostOrder()
1809 void HGraphVisitor::VisitBasicBlock(HBasicBlock* block) { in VisitBasicBlock() argument
1810 for (HInstructionIterator it(block->GetPhis()); !it.Done(); it.Advance()) { in VisitBasicBlock()
1813 for (HInstructionIterator it(block->GetInstructions()); !it.Done(); it.Advance()) { in VisitBasicBlock()
2293 static bool HasOnlyOneInstruction(const HBasicBlock& block) { in HasOnlyOneInstruction() argument
2294 return block.GetPhis().IsEmpty() in HasOnlyOneInstruction()
2295 && !block.GetInstructions().IsEmpty() in HasOnlyOneInstruction()
2296 && block.GetFirstInstruction() == block.GetLastInstruction(); in HasOnlyOneInstruction()
2384 void HInstructionList::SetBlockOfInstructions(HBasicBlock* block) const { in SetBlockOfInstructions()
2388 current->SetBlock(block); in SetBlockOfInstructions()
2701 void HGraph::DeleteDeadEmptyBlock(HBasicBlock* block) { in DeleteDeadEmptyBlock() argument
2702 DCHECK_EQ(block->GetGraph(), this); in DeleteDeadEmptyBlock()
2703 DCHECK(block->GetSuccessors().empty()); in DeleteDeadEmptyBlock()
2704 DCHECK(block->GetPredecessors().empty()); in DeleteDeadEmptyBlock()
2705 DCHECK(block->GetDominatedBlocks().empty()); in DeleteDeadEmptyBlock()
2706 DCHECK(block->GetDominator() == nullptr); in DeleteDeadEmptyBlock()
2707 DCHECK(block->GetInstructions().IsEmpty()); in DeleteDeadEmptyBlock()
2708 DCHECK(block->GetPhis().IsEmpty()); in DeleteDeadEmptyBlock()
2710 if (block->IsExitBlock()) { in DeleteDeadEmptyBlock()
2714 RemoveElement(reverse_post_order_, block); in DeleteDeadEmptyBlock()
2715 blocks_[block->GetBlockId()] = nullptr; in DeleteDeadEmptyBlock()
2716 block->SetGraph(nullptr); in DeleteDeadEmptyBlock()
2719 void HGraph::UpdateLoopAndTryInformationOfNewBlock(HBasicBlock* block, in UpdateLoopAndTryInformationOfNewBlock() argument
2723 if (block->IsLoopHeader()) { in UpdateLoopAndTryInformationOfNewBlock()
2728 block->GetLoopInformation()->ClearAllBlocks(); in UpdateLoopAndTryInformationOfNewBlock()
2732 if (!block->IsInLoop()) { in UpdateLoopAndTryInformationOfNewBlock()
2733 block->SetLoopInformation(reference->GetLoopInformation()); in UpdateLoopAndTryInformationOfNewBlock()
2737 HLoopInformation* loop_info = block->GetLoopInformation(); in UpdateLoopAndTryInformationOfNewBlock()
2739 for (HLoopInformationOutwardIterator loop_it(*block); in UpdateLoopAndTryInformationOfNewBlock()
2742 loop_it.Current()->Add(block); in UpdateLoopAndTryInformationOfNewBlock()
2745 loop_info->ReplaceBackEdge(reference, block); in UpdateLoopAndTryInformationOfNewBlock()
2757 block->SetTryCatchInformation(try_catch_info); in UpdateLoopAndTryInformationOfNewBlock()
2767 for (HBasicBlock* block : GetReversePostOrderSkipEntryBlock()) { in InlineInto()
2768 for (HInstructionIterator instr_it(block->GetInstructions()); in InlineInto()
3415 HBasicBlock* block = instr->GetBlock(); in ReplaceInstrOrPhiByClone() local
3421 block->ReplaceAndRemovePhiWith(phi, phi_clone); in ReplaceInstrOrPhiByClone()
3423 block->ReplaceAndRemoveInstructionWith(instr, clone); in ReplaceInstrOrPhiByClone()
3426 HLoopInformation* loop_info = block->GetLoopInformation(); in ReplaceInstrOrPhiByClone()