Lines Matching refs:bb
38 static unsigned int Predecessors(BasicBlock* bb) { in Predecessors() argument
39 return bb->predecessors.size(); in Predecessors()
58 void MIRGraph::DoConstantPropagation(BasicBlock* bb) { in DoConstantPropagation() argument
61 for (mir = bb->first_mir_insn; mir != nullptr; mir = mir->next) { in DoConstantPropagation()
121 BasicBlock* bb = *p_bb; in AdvanceMIR() local
125 bb = GetBasicBlock(bb->fall_through); in AdvanceMIR()
126 if ((bb == nullptr) || Predecessors(bb) != 1) { in AdvanceMIR()
130 *p_bb = bb; in AdvanceMIR()
131 mir = bb->first_mir_insn; in AdvanceMIR()
145 MIR* MIRGraph::FindMoveResult(BasicBlock* bb, MIR* mir) { in FindMoveResult() argument
146 BasicBlock* tbb = bb; in FindMoveResult()
164 BasicBlock* MIRGraph::NextDominatedBlock(BasicBlock* bb) { in NextDominatedBlock() argument
165 if (bb->block_type == kDead) { in NextDominatedBlock()
168 DCHECK((bb->block_type == kEntryBlock) || (bb->block_type == kDalvikByteCode) in NextDominatedBlock()
169 || (bb->block_type == kExitBlock)); in NextDominatedBlock()
170 BasicBlock* bb_taken = GetBasicBlock(bb->taken); in NextDominatedBlock()
171 BasicBlock* bb_fall_through = GetBasicBlock(bb->fall_through); in NextDominatedBlock()
175 bb = bb_taken; in NextDominatedBlock()
178 bb = (bb_taken != nullptr) ? nullptr : bb_fall_through; in NextDominatedBlock()
180 if (bb == nullptr || (Predecessors(bb) != 1)) { in NextDominatedBlock()
183 DCHECK((bb->block_type == kDalvikByteCode) || (bb->block_type == kExitBlock)); in NextDominatedBlock()
184 return bb; in NextDominatedBlock()
187 static MIR* FindPhi(BasicBlock* bb, int ssa_name) { in FindPhi() argument
188 for (MIR* mir = bb->first_mir_insn; mir != nullptr; mir = mir->next) { in FindPhi()
468 bool MIRGraph::BasicBlockOpt(BasicBlock* bb) { in BasicBlockOpt() argument
469 if (bb->block_type == kDead) { in BasicBlockOpt()
474 MultiplyAddOpt(bb); in BasicBlockOpt()
476 bool use_lvn = bb->use_lvn && (cu_->disable_opt & (1u << kLocalValueNumbering)) == 0u; in BasicBlockOpt()
484 local_valnum.reset(new (allocator.get()) LocalValueNumbering(global_valnum.get(), bb->id, in BasicBlockOpt()
487 while (bb != nullptr) { in BasicBlockOpt()
488 for (MIR* mir = bb->first_mir_insn; mir != nullptr; mir = mir->next) { in BasicBlockOpt()
516 BasicBlockId edge_to_kill = is_taken ? bb->fall_through : bb->taken; in BasicBlockOpt()
519 bb->fall_through = NullBasicBlockId; in BasicBlockOpt()
525 bb->taken = NullBasicBlockId; in BasicBlockOpt()
530 successor_to_unlink->ErasePredecessor(bb->id); in BasicBlockOpt()
602 BasicBlock* ft = GetBasicBlock(bb->fall_through); in BasicBlockOpt()
607 BasicBlock* tk = GetBasicBlock(bb->taken); in BasicBlockOpt()
701 bb->data_flow_info->vreg_to_ssa_map_exit[def_vreg] = mir->ssa_rep->defs[0]; in BasicBlockOpt()
706 ft_ft->UpdatePredecessor(ft->id, bb->id); in BasicBlockOpt()
708 ft->ErasePredecessor(bb->id); in BasicBlockOpt()
710 bb->fall_through = ft_ft->id; in BasicBlockOpt()
721 bb = ((cu_->disable_opt & (1 << kSuppressExceptionEdges)) != 0) ? NextDominatedBlock(bb) : in BasicBlockOpt()
732 void MIRGraph::CountChecks(class BasicBlock* bb) { in CountChecks() argument
733 if (bb->data_flow_info != nullptr) { in CountChecks()
734 for (MIR* mir = bb->first_mir_insn; mir != nullptr; mir = mir->next) { in CountChecks()
756 bool MIRGraph::LayoutBlocks(BasicBlock* bb) { in LayoutBlocks() argument
758 if (!bb->explicit_throw) { in LayoutBlocks()
763 if (bb->visited) { in LayoutBlocks()
766 bb->visited = true; in LayoutBlocks()
768 BasicBlock* walker = bb; in LayoutBlocks()
818 void MIRGraph::CombineBlocks(class BasicBlock* bb) { in CombineBlocks() argument
820 while ((bb->block_type == kDalvikByteCode) && in CombineBlocks()
821 (bb->last_mir_insn != nullptr) && in CombineBlocks()
822 (static_cast<int>(bb->last_mir_insn->dalvikInsn.opcode) == kMirOpCheck)) { in CombineBlocks()
823 MIR* mir = bb->last_mir_insn; in CombineBlocks()
824 DCHECK(bb->first_mir_insn != nullptr); in CombineBlocks()
833 BasicBlock* bb_next = GetBasicBlock(bb->fall_through); in CombineBlocks()
843 bb->InsertMIRListAfter(bb->last_mir_insn, throw_insn, last_to_move); in CombineBlocks()
846 bb->RemoveMIR(mir); in CombineBlocks()
849 bb_next->ErasePredecessor(bb->id); in CombineBlocks()
850 if (bb->taken != NullBasicBlockId) { in CombineBlocks()
851 DCHECK_EQ(bb->successor_block_list_type, kNotUsed); in CombineBlocks()
852 BasicBlock* bb_taken = GetBasicBlock(bb->taken); in CombineBlocks()
856 DCHECK_EQ(bb_taken->predecessors[0], bb->id); in CombineBlocks()
861 DCHECK_EQ(bb->successor_block_list_type, kCatch); in CombineBlocks()
862 for (SuccessorBlockInfo* succ_info : bb->successor_blocks) { in CombineBlocks()
866 succ_bb->ErasePredecessor(bb->id); in CombineBlocks()
871 bb->successor_block_list_type = bb_next->successor_block_list_type; in CombineBlocks()
872 bb->successor_blocks.swap(bb_next->successor_blocks); // Swap instead of copying. in CombineBlocks()
875 bb->fall_through = bb_next->fall_through; in CombineBlocks()
877 bb->taken = bb_next->taken; in CombineBlocks()
884 bb->terminated_by_return = bb_next->terminated_by_return; in CombineBlocks()
885 bb->conditional_branch = bb_next->conditional_branch; in CombineBlocks()
886 bb->explicit_throw = bb_next->explicit_throw; in CombineBlocks()
888 bb->use_lvn |= bb_next->use_lvn; in CombineBlocks()
902 block_id_map_.Overwrite(bb_next->id, bb->id); in CombineBlocks()
904 ChildBlockIterator iter(bb, this); in CombineBlocks()
906 child->UpdatePredecessor(bb_next->id, bb->id); in CombineBlocks()
935 for (BasicBlock* bb = iter.Next(); bb != nullptr; bb = iter.Next()) { in EliminateNullChecksGate() local
936 for (MIR* mir = bb->first_mir_insn; mir != nullptr; mir = mir->next) { in EliminateNullChecksGate()
947 bool MIRGraph::EliminateNullChecks(BasicBlock* bb) { in EliminateNullChecks() argument
948 if (bb->block_type != kDalvikByteCode && bb->block_type != kEntryBlock) { in EliminateNullChecks()
950 DCHECK(bb->first_mir_insn == nullptr); in EliminateNullChecks()
958 if (bb->block_type == kEntryBlock) { in EliminateNullChecks()
971 DCHECK_EQ(bb->block_type, kDalvikByteCode); in EliminateNullChecks()
974 for (BasicBlockId pred_id : bb->predecessors) { in EliminateNullChecks()
982 if (pred_bb->BranchesToSuccessorOnlyIfNotZero(bb->id)) { in EliminateNullChecks()
1005 for (MIR* mir = bb->first_mir_insn; mir != nullptr; mir = mir->next) { in EliminateNullChecks()
1089 ArenaBitVector* old_ending_ssa_regs_to_check = temp_.nce.ending_vregs_to_check_matrix[bb->id]; in EliminateNullChecks()
1093 temp_.nce.ending_vregs_to_check_matrix[bb->id] = vregs_to_check; in EliminateNullChecks()
1099 temp_.nce.ending_vregs_to_check_matrix[bb->id] = vregs_to_check; in EliminateNullChecks()
1115 for (BasicBlock* bb = iter.Next(); bb != nullptr; bb = iter.Next()) { in EliminateNullChecksEnd() local
1116 for (MIR* mir = bb->first_mir_insn; mir != nullptr; mir = mir->next) { in EliminateNullChecksEnd()
1134 bool MIRGraph::InferTypes(BasicBlock* bb) { in InferTypes() argument
1135 if (bb->data_flow_info == nullptr) return false; in InferTypes()
1138 return temp_.ssa.ti->Apply(bb); in InferTypes()
1190 for (BasicBlock* bb = iter.Next(); bb != nullptr; bb = iter.Next()) { in EliminateClassInitChecksGate() local
1191 if (bb->block_type == kDalvikByteCode) { in EliminateClassInitChecksGate()
1192 for (MIR* mir = bb->first_mir_insn; mir != nullptr; mir = mir->next) { in EliminateClassInitChecksGate()
1250 bool MIRGraph::EliminateClassInitChecks(BasicBlock* bb) { in EliminateClassInitChecks() argument
1252 if (bb->block_type != kDalvikByteCode && bb->block_type != kEntryBlock) { in EliminateClassInitChecks()
1254 DCHECK(bb->first_mir_insn == nullptr); in EliminateClassInitChecks()
1263 if (bb->block_type == kEntryBlock) { in EliminateClassInitChecks()
1268 for (BasicBlockId pred_id : bb->predecessors) { in EliminateClassInitChecks()
1284 for (MIR* mir = bb->first_mir_insn; mir != nullptr; mir = mir->next) { in EliminateClassInitChecks()
1329 ArenaBitVector* old_ending_classes_to_check = temp_.cice.ending_classes_to_check_matrix[bb->id]; in EliminateClassInitChecks()
1333 temp_.cice.ending_classes_to_check_matrix[bb->id] = classes_to_check; in EliminateClassInitChecks()
1339 temp_.cice.ending_classes_to_check_matrix[bb->id] = classes_to_check; in EliminateClassInitChecks()
1378 bool MIRGraph::ApplyGlobalValueNumbering(BasicBlock* bb) { in ApplyGlobalValueNumbering() argument
1380 LocalValueNumbering* lvn = temp_.gvn.gvn->PrepareBasicBlock(bb); in ApplyGlobalValueNumbering()
1382 for (MIR* mir = bb->first_mir_insn; mir != nullptr; mir = mir->next) { in ApplyGlobalValueNumbering()
1386 bool change = (lvn != nullptr) && temp_.gvn.gvn->FinishBasicBlock(bb); in ApplyGlobalValueNumbering()
1397 for (BasicBlock* bb = iter.Next(); bb != nullptr; bb = iter.Next()) { in ApplyGlobalValueNumberingEnd() local
1399 LocalValueNumbering* lvn = temp_.gvn.gvn->PrepareBasicBlock(bb, &allocator); in ApplyGlobalValueNumberingEnd()
1401 for (MIR* mir = bb->first_mir_insn; mir != nullptr; mir = mir->next) { in ApplyGlobalValueNumberingEnd()
1404 bool change = temp_.gvn.gvn->FinishBasicBlock(bb); in ApplyGlobalValueNumberingEnd()
1427 bool MIRGraph::EliminateDeadCode(BasicBlock* bb) { in EliminateDeadCode() argument
1430 if (bb->block_type != kDalvikByteCode) { in EliminateDeadCode()
1434 temp_.gvn.dce->Apply(bb); in EliminateDeadCode()
1443 for (BasicBlock* bb = iter.Next(); bb != nullptr; bb = iter.Next()) { in EliminateDeadCodeEnd() local
1444 if (bb->data_flow_info != nullptr) { in EliminateDeadCodeEnd()
1445 bb->data_flow_info->live_in_v = nullptr; in EliminateDeadCodeEnd()
1514 void MIRGraph::InlineSpecialMethods(BasicBlock* bb) { in InlineSpecialMethods() argument
1515 if (bb->block_type != kDalvikByteCode) { in InlineSpecialMethods()
1518 for (MIR* mir = bb->first_mir_insn; mir != nullptr; mir = mir->next) { in InlineSpecialMethods()
1546 ->GenInline(this, bb, mir, target.dex_method_index)) { in InlineSpecialMethods()
1574 for (BasicBlock* bb = iter.Next(); bb != nullptr; bb = iter.Next()) { in DumpCheckStats() local
1575 CountChecks(bb); in DumpCheckStats()
1593 bool MIRGraph::BuildExtendedBBList(class BasicBlock* bb) { in BuildExtendedBBList() argument
1594 if (bb->visited) return false; in BuildExtendedBBList()
1595 if (!((bb->block_type == kEntryBlock) || (bb->block_type == kDalvikByteCode) in BuildExtendedBBList()
1596 || (bb->block_type == kExitBlock))) { in BuildExtendedBBList()
1598 bb->visited = true; in BuildExtendedBBList()
1602 BasicBlock* start_bb = bb; in BuildExtendedBBList()
1603 extended_basic_blocks_.push_back(bb->id); in BuildExtendedBBList()
1607 while (bb != nullptr) { in BuildExtendedBBList()
1608 bb->visited = true; in BuildExtendedBBList()
1609 terminated_by_return |= bb->terminated_by_return; in BuildExtendedBBList()
1610 do_local_value_numbering |= bb->use_lvn; in BuildExtendedBBList()
1611 bb = NextDominatedBlock(bb); in BuildExtendedBBList()
1615 bb = start_bb; in BuildExtendedBBList()
1616 while (bb != nullptr) { in BuildExtendedBBList()
1617 bb->use_lvn = do_local_value_numbering; in BuildExtendedBBList()
1618 bb->dominates_return = terminated_by_return; in BuildExtendedBBList()
1619 bb = NextDominatedBlock(bb); in BuildExtendedBBList()
1639 for (BasicBlock* bb = iter2.Next(); bb != nullptr; bb = iter2.Next()) { in BasicBlockOptimization() local
1640 BuildExtendedBBList(bb); in BasicBlockOptimization()
1648 for (BasicBlock* bb = iter.Next(); bb != nullptr; bb = iter.Next()) { in BasicBlockOptimization() local
1649 BasicBlockOpt(bb); in BasicBlockOptimization()
1663 for (BasicBlock* bb = iter.Next(); bb != nullptr; bb = iter.Next()) { in StringChange() local
1664 for (MIR* mir = bb->first_mir_insn; mir != nullptr; mir = mir->next) { in StringChange()
1699 bb->InsertMIRAfter(mir, move_result_mir); in StringChange()
1716 bb->InsertMIRAfter(move_result_mir, move_mir); in StringChange()
1739 bool MIRGraph::EliminateSuspendChecks(BasicBlock* bb) { in EliminateSuspendChecks() argument
1740 if (bb->block_type != kDalvikByteCode) { in EliminateSuspendChecks()
1743 DCHECK_EQ(GetTopologicalSortOrderLoopHeadStack()->size(), bb->nesting_depth); in EliminateSuspendChecks()
1744 if (bb->nesting_depth == 0u) { in EliminateSuspendChecks()
1746 DCHECK_EQ(suspend_checks_in_loops_[bb->id], 0u); // The array was zero-initialized. in EliminateSuspendChecks()
1749 uint32_t suspend_checks_in_loops = (1u << bb->nesting_depth) - 1u; // Start with all loop heads. in EliminateSuspendChecks()
1751 for (MIR* mir = bb->first_mir_insn; mir != nullptr; mir = mir->next) { in EliminateSuspendChecks()
1762 uint16_t bb_topo_idx = topological_order_indexes_[bb->id]; in EliminateSuspendChecks()
1764 for (BasicBlockId pred_id : bb->predecessors) { in EliminateSuspendChecks()
1783 DCHECK_GE(((1u << (IsLoopHead(bb->id) ? bb->nesting_depth - 1u: bb->nesting_depth)) - 1u), in EliminateSuspendChecks()
1787 suspend_checks_in_loops_[bb->id] = suspend_checks_in_loops; in EliminateSuspendChecks()
1792 if (bb->taken != NullBasicBlockId) { in EliminateSuspendChecks()
1793 DCHECK(bb->last_mir_insn != nullptr); in EliminateSuspendChecks()
1794 DCHECK(IsInstructionIfCc(bb->last_mir_insn->dalvikInsn.opcode) || in EliminateSuspendChecks()
1795 IsInstructionIfCcZ(bb->last_mir_insn->dalvikInsn.opcode) || in EliminateSuspendChecks()
1796 IsInstructionGoto(bb->last_mir_insn->dalvikInsn.opcode) || in EliminateSuspendChecks()
1797 (static_cast<int>(bb->last_mir_insn->dalvikInsn.opcode) >= kMirOpFusedCmplFloat && in EliminateSuspendChecks()
1798 static_cast<int>(bb->last_mir_insn->dalvikInsn.opcode) <= kMirOpFusedCmpLong)); in EliminateSuspendChecks()
1799 if (!IsSuspendCheckEdge(bb, bb->taken) && in EliminateSuspendChecks()
1800 (bb->fall_through == NullBasicBlockId || !IsSuspendCheckEdge(bb, bb->fall_through))) { in EliminateSuspendChecks()
1801 bb->last_mir_insn->optimization_flags |= MIR_IGNORE_SUSPEND_CHECK; in EliminateSuspendChecks()
1803 } else if (bb->fall_through != NullBasicBlockId && IsSuspendCheckEdge(bb, bb->fall_through)) { in EliminateSuspendChecks()
1808 mir->offset = GetBasicBlock(bb->fall_through)->start_offset; in EliminateSuspendChecks()
1812 bb->AppendMIR(mir); in EliminateSuspendChecks()
1813 std::swap(bb->fall_through, bb->taken); // The fall-through has become taken. in EliminateSuspendChecks()
1935 void MIRGraph::MultiplyAddOpt(BasicBlock* bb) { in MultiplyAddOpt() argument
1936 if (bb->block_type == kDead) { in MultiplyAddOpt()
1942 for (MIR* mir = bb->first_mir_insn; mir != nullptr; mir = mir->next) { in MultiplyAddOpt()