Lines Matching refs:block

61 void HGraph::AddBlock(HBasicBlock* block) {  in AddBlock()  argument
62 block->SetBlockId(blocks_.size()); in AddBlock()
63 blocks_.push_back(block); in AddBlock()
158 HBasicBlock* block = blocks_[i]; in RemoveDeadBlocksInstructionsAsUsersAndDisconnect() local
159 if (block == nullptr) continue; in RemoveDeadBlocksInstructionsAsUsersAndDisconnect()
162 for (HInstructionIterator it(block->GetPhis()); !it.Done(); it.Advance()) { in RemoveDeadBlocksInstructionsAsUsersAndDisconnect()
165 for (HInstructionIterator it(block->GetInstructions()); !it.Done(); it.Advance()) { in RemoveDeadBlocksInstructionsAsUsersAndDisconnect()
170 block->DisconnectFromSuccessors(&visited); in RemoveDeadBlocksInstructionsAsUsersAndDisconnect()
197 HBasicBlock* block = blocks_[i]; in RemoveDeadBlocks() local
198 if (block == nullptr) continue; in RemoveDeadBlocks()
201 block->RemoveCatchPhiUsesAndInstruction(/* building_dominator_tree = */ true); in RemoveDeadBlocks()
206 if (block->IsExitBlock()) { in RemoveDeadBlocks()
211 block->SetGraph(nullptr); in RemoveDeadBlocks()
267 for (HBasicBlock* block : GetActiveBlocks()) { in ClearDominanceInformation()
268 block->ClearDominanceInformation(); in ClearDominanceInformation()
276 for (HBasicBlock* block : GetActiveBlocks()) { in ClearLoopInformation()
277 block->SetLoopInformation(nullptr); in ClearLoopInformation()
294 static bool UpdateDominatorOfSuccessor(HBasicBlock* block, HBasicBlock* successor) { in UpdateDominatorOfSuccessor() argument
295 DCHECK(ContainsElement(block->GetSuccessors(), successor)); in UpdateDominatorOfSuccessor()
299 (old_dominator == nullptr) ? block in UpdateDominatorOfSuccessor()
300 : CommonDominator::ForPair(old_dominator, block); in UpdateDominatorOfSuccessor()
354 for (HBasicBlock* block : blocks_) { in ComputeDominanceInformation()
355 if (block != nullptr && in ComputeDominanceInformation()
356 block->IsLoopHeader() && in ComputeDominanceInformation()
357 block->GetLoopInformation()->HasBackEdgeNotDominatedByHeader()) { in ComputeDominanceInformation()
366 for (HBasicBlock* block : GetReversePostOrder()) { in ComputeDominanceInformation()
367 for (HBasicBlock* successor : block->GetSuccessors()) { in ComputeDominanceInformation()
368 update_occurred |= UpdateDominatorOfSuccessor(block, successor); in ComputeDominanceInformation()
377 for (HBasicBlock* block : GetReversePostOrder()) { in ComputeDominanceInformation()
378 for (HBasicBlock* successor : block->GetSuccessors()) { in ComputeDominanceInformation()
379 DCHECK(!UpdateDominatorOfSuccessor(block, successor)); in ComputeDominanceInformation()
386 for (HBasicBlock* block : GetReversePostOrder()) { in ComputeDominanceInformation()
387 if (!block->IsEntryBlock()) { in ComputeDominanceInformation()
388 block->GetDominator()->AddDominatedBlock(block); in ComputeDominanceInformation()
393 HBasicBlock* HGraph::SplitEdge(HBasicBlock* block, HBasicBlock* successor) { in SplitEdge() argument
398 new_block->InsertBetween(block, successor); in SplitEdge()
402 void HGraph::SplitCriticalEdge(HBasicBlock* block, HBasicBlock* successor) { in SplitCriticalEdge() argument
405 HBasicBlock* new_block = SplitEdge(block, successor); in SplitCriticalEdge()
410 if (info->IsBackEdge(*block)) { in SplitCriticalEdge()
411 info->RemoveBackEdge(block); in SplitCriticalEdge()
417 HBasicBlock* HGraph::SplitEdgeAndUpdateRPO(HBasicBlock* block, HBasicBlock* successor) { in SplitEdgeAndUpdateRPO() argument
418 HBasicBlock* new_block = SplitEdge(block, successor); in SplitEdgeAndUpdateRPO()
422 reverse_post_order_.begin() + IndexOfElement(reverse_post_order_, block) + 1, new_block); in SplitEdgeAndUpdateRPO()
427 static void FixPhisAfterPredecessorsReodering(HBasicBlock* block, size_t first, size_t second) { in FixPhisAfterPredecessorsReodering() argument
428 for (HInstructionIterator it(block->GetPhis()); !it.Done(); it.Advance()) { in FixPhisAfterPredecessorsReodering()
592 for (HBasicBlock* block : GetReversePostOrder()) { in ComputeTryBlockInformation()
593 if (block->IsEntryBlock() || block->IsCatchBlock()) { in ComputeTryBlockInformation()
602 HBasicBlock* first_predecessor = block->GetPredecessors()[0]; in ComputeTryBlockInformation()
603 DCHECK_IMPLIES(block->IsLoopHeader(), in ComputeTryBlockInformation()
604 !block->GetLoopInformation()->IsBackEdge(*first_predecessor)); in ComputeTryBlockInformation()
608 (block->GetTryCatchInformation() == nullptr || in ComputeTryBlockInformation()
609 try_entry != &block->GetTryCatchInformation()->GetTryEntry())) { in ComputeTryBlockInformation()
612 block->SetTryCatchInformation(new (allocator_) TryCatchInformation(*try_entry)); in ComputeTryBlockInformation()
626 HBasicBlock* block = blocks_[block_id]; in SimplifyCFG() local
627 if (block == nullptr) continue; in SimplifyCFG()
628 if (block->GetSuccessors().size() > 1) { in SimplifyCFG()
632 ArrayRef<HBasicBlock* const> normal_successors = block->GetNormalSuccessors(); in SimplifyCFG()
639 DCHECK(block->IsSingleTryBoundary()); in SimplifyCFG()
641 SplitCriticalEdge(block, successor); in SimplifyCFG()
644 normal_successors = block->GetNormalSuccessors(); in SimplifyCFG()
650 if (block->IsLoopHeader()) { in SimplifyCFG()
651 SimplifyLoop(block); in SimplifyCFG()
652 } else if (!block->IsEntryBlock() && in SimplifyCFG()
653 block->GetFirstInstruction() != nullptr && in SimplifyCFG()
654 block->GetFirstInstruction()->IsSuspendCheck()) { in SimplifyCFG()
657 block->RemoveInstruction(block->GetFirstInstruction()); in SimplifyCFG()
666 for (HBasicBlock* block : GetPostOrder()) { in AnalyzeLoops()
667 if (block->IsLoopHeader()) { in AnalyzeLoops()
668 if (block->IsCatchBlock()) { in AnalyzeLoops()
674 block->GetLoopInformation()->Populate(); in AnalyzeLoops()
683 for (HBasicBlock* block : back_edges_) { in Dump()
684 os << "back edge: " << block->GetBlockId() << std::endl; in Dump()
686 for (HBasicBlock* block : header_->GetPredecessors()) { in Dump()
687 os << "predecessor: " << block->GetBlockId() << std::endl; in Dump()
794 void HLoopInformation::Add(HBasicBlock* block) { in Add() argument
795 blocks_.SetBit(block->GetBlockId()); in Add()
798 void HLoopInformation::Remove(HBasicBlock* block) { in Remove() argument
799 blocks_.ClearBit(block->GetBlockId()); in Remove()
802 void HLoopInformation::PopulateRecursive(HBasicBlock* block) { in PopulateRecursive() argument
803 if (blocks_.IsBitSet(block->GetBlockId())) { in PopulateRecursive()
807 blocks_.SetBit(block->GetBlockId()); in PopulateRecursive()
808 block->SetInLoop(this); in PopulateRecursive()
809 if (block->IsLoopHeader()) { in PopulateRecursive()
812 DCHECK(block->GetLoopInformation()->IsPopulated()); in PopulateRecursive()
813 if (block->GetLoopInformation()->IsIrreducible()) { in PopulateRecursive()
817 for (HBasicBlock* predecessor : block->GetPredecessors()) { in PopulateRecursive()
822 void HLoopInformation::PopulateIrreducibleRecursive(HBasicBlock* block, ArenaBitVector* finalized) { in PopulateIrreducibleRecursive() argument
823 size_t block_id = block->GetBlockId(); in PopulateIrreducibleRecursive()
832 if (block->IsLoopHeader()) { in PopulateIrreducibleRecursive()
838 HBasicBlock* pre_header = block->GetPredecessors()[0]; in PopulateIrreducibleRecursive()
841 block->SetInLoop(this); in PopulateIrreducibleRecursive()
846 HLoopInformation* info = block->GetLoopInformation(); in PopulateIrreducibleRecursive()
854 for (HBasicBlock* predecessor : block->GetPredecessors()) { in PopulateIrreducibleRecursive()
857 block->SetInLoop(this); in PopulateIrreducibleRecursive()
938 HBasicBlock* block = header_->GetPredecessors()[0]; in GetPreHeader() local
939 DCHECK(irreducible_ || (block == header_->GetDominator())); in GetPreHeader()
940 return block; in GetPreHeader()
943 bool HLoopInformation::Contains(const HBasicBlock& block) const { in Contains()
944 return blocks_.IsBitSet(block.GetBlockId()); in Contains()
973 bool HLoopInformation::DominatesAllBackEdges(HBasicBlock* block) { in DominatesAllBackEdges() argument
975 if (!block->Dominates(back_edge)) { in DominatesAllBackEdges()
1049 HBasicBlock* block, in Add() argument
1053 instruction->SetBlock(block); in Add()
1054 instruction->SetId(block->GetGraph()->GetNextInstructionId()); in Add()
1105 HBasicBlock* block, in Remove() argument
1108 DCHECK_EQ(block, instruction->GetBlock()); in Remove()
1353 HBasicBlock* block = GetBlock(); in StrictlyDominates() local
1355 if (block != other_block) { in StrictlyDominates()
1379 return block->GetInstructions().FoundBefore(this, other_instruction); in StrictlyDominates()
1443 HBasicBlock* block = user->GetBlock(); in ReplaceUsesDominatedBy() local
1448 if (dominator_block == block) { in ReplaceUsesDominatedBy()
1455 dominated = visited_blocks->IsBitSet(block->GetBlockId()); in ReplaceUsesDominatedBy()
1464 HBasicBlock* predecessor = block->GetPredecessors()[index]; in ReplaceUsesDominatedBy()
1679 for (HBasicBlock* block : graph_->GetActiveBlocks()) { in FOR_EACH_CONCRETE_INSTRUCTION()
1680 VisitBasicBlock(block); in FOR_EACH_CONCRETE_INSTRUCTION()
1685 for (HBasicBlock* block : graph_->GetReversePostOrder()) { in VisitReversePostOrder()
1686 VisitBasicBlock(block); in VisitReversePostOrder()
1690 void HGraphVisitor::VisitBasicBlock(HBasicBlock* block) { in VisitBasicBlock() argument
1691 VisitPhis(block); in VisitBasicBlock()
1692 VisitNonPhiInstructions(block); in VisitBasicBlock()
1695 void HGraphVisitor::VisitPhis(HBasicBlock* block) { in VisitPhis() argument
1696 for (HInstructionIterator it(block->GetPhis()); !it.Done(); it.Advance()) { in VisitPhis()
1702 void HGraphVisitor::VisitNonPhiInstructions(HBasicBlock* block) { in VisitNonPhiInstructions() argument
1703 for (HInstructionIterator it(block->GetInstructions()); !it.Done(); it.Advance()) { in VisitNonPhiInstructions()
2189 static bool HasOnlyOneInstruction(const HBasicBlock& block) { in HasOnlyOneInstruction() argument
2190 return block.GetPhis().IsEmpty() in HasOnlyOneInstruction()
2191 && !block.GetInstructions().IsEmpty() in HasOnlyOneInstruction()
2192 && block.GetFirstInstruction() == block.GetLastInstruction(); in HasOnlyOneInstruction()
2280 void HInstructionList::SetBlockOfInstructions(HBasicBlock* block) const { in SetBlockOfInstructions()
2284 current->SetBlock(block); in SetBlockOfInstructions()
2597 void HGraph::DeleteDeadEmptyBlock(HBasicBlock* block) { in DeleteDeadEmptyBlock() argument
2598 DCHECK_EQ(block->GetGraph(), this); in DeleteDeadEmptyBlock()
2599 DCHECK(block->GetSuccessors().empty()); in DeleteDeadEmptyBlock()
2600 DCHECK(block->GetPredecessors().empty()); in DeleteDeadEmptyBlock()
2601 DCHECK(block->GetDominatedBlocks().empty()); in DeleteDeadEmptyBlock()
2602 DCHECK(block->GetDominator() == nullptr); in DeleteDeadEmptyBlock()
2603 DCHECK(block->GetInstructions().IsEmpty()); in DeleteDeadEmptyBlock()
2604 DCHECK(block->GetPhis().IsEmpty()); in DeleteDeadEmptyBlock()
2606 if (block->IsExitBlock()) { in DeleteDeadEmptyBlock()
2610 RemoveElement(reverse_post_order_, block); in DeleteDeadEmptyBlock()
2611 blocks_[block->GetBlockId()] = nullptr; in DeleteDeadEmptyBlock()
2612 block->SetGraph(nullptr); in DeleteDeadEmptyBlock()
2615 void HGraph::UpdateLoopAndTryInformationOfNewBlock(HBasicBlock* block, in UpdateLoopAndTryInformationOfNewBlock() argument
2619 if (block->IsLoopHeader()) { in UpdateLoopAndTryInformationOfNewBlock()
2624 block->GetLoopInformation()->ClearAllBlocks(); in UpdateLoopAndTryInformationOfNewBlock()
2628 if (!block->IsInLoop()) { in UpdateLoopAndTryInformationOfNewBlock()
2629 block->SetLoopInformation(reference->GetLoopInformation()); in UpdateLoopAndTryInformationOfNewBlock()
2633 HLoopInformation* loop_info = block->GetLoopInformation(); in UpdateLoopAndTryInformationOfNewBlock()
2635 for (HLoopInformationOutwardIterator loop_it(*block); in UpdateLoopAndTryInformationOfNewBlock()
2638 loop_it.Current()->Add(block); in UpdateLoopAndTryInformationOfNewBlock()
2641 loop_info->ReplaceBackEdge(reference, block); in UpdateLoopAndTryInformationOfNewBlock()
2653 block->SetTryCatchInformation(try_catch_info); in UpdateLoopAndTryInformationOfNewBlock()
2663 for (HBasicBlock* block : GetReversePostOrderSkipEntryBlock()) { in InlineInto()
2664 for (HInstructionIterator instr_it(block->GetInstructions()); in InlineInto()
3323 HBasicBlock* block = instr->GetBlock(); in ReplaceInstrOrPhiByClone() local
3329 block->ReplaceAndRemovePhiWith(phi, phi_clone); in ReplaceInstrOrPhiByClone()
3331 block->ReplaceAndRemoveInstructionWith(instr, clone); in ReplaceInstrOrPhiByClone()
3334 HLoopInformation* loop_info = block->GetLoopInformation(); in ReplaceInstrOrPhiByClone()