Home | History | Annotate | Download | only in dex

Lines Matching refs:bb

23 static unsigned int Predecessors(BasicBlock* bb) {
24 return bb->predecessors->Size();
39 void MIRGraph::DoConstantPropogation(BasicBlock* bb) {
42 for (mir = bb->first_mir_insn; mir != NULL; mir = mir->next) {
100 for (BasicBlock* bb = iter.Next(); bb != NULL; bb = iter.Next()) {
101 DoConstantPropogation(bb);
107 BasicBlock* bb = *p_bb;
111 bb = bb->fall_through;
112 if ((bb == NULL) || Predecessors(bb) != 1) {
115 *p_bb = bb;
116 mir = bb->first_mir_insn;
130 MIR* MIRGraph::FindMoveResult(BasicBlock* bb, MIR* mir) {
131 BasicBlock* tbb = bb;
150 static BasicBlock* NextDominatedBlock(BasicBlock* bb) {
151 if (bb->block_type == kDead) {
154 DCHECK((bb->block_type == kEntryBlock) || (bb->block_type == kDalvikByteCode)
155 || (bb->block_type == kExitBlock));
156 if (((bb->taken != NULL) && (bb->fall_through == NULL)) &&
157 ((bb->taken->block_type == kDalvikByteCode) || (bb->taken->block_type == kExitBlock))) {
159 bb = bb->taken;
162 bb = (bb->taken != NULL) ? NULL : bb->fall_through;
164 if (bb == NULL || (Predecessors(bb) != 1)) {
167 DCHECK((bb->block_type == kDalvikByteCode) || (bb->block_type == kExitBlock));
168 return bb;
171 static MIR* FindPhi(BasicBlock* bb, int ssa_name) {
172 for (MIR* mir = bb->first_mir_insn; mir != NULL; mir = mir->next) {
212 bool MIRGraph::BasicBlockOpt(BasicBlock* bb) {
213 if (bb->block_type == kDead) {
218 while (bb != NULL) {
219 for (MIR* mir = bb->first_mir_insn; mir != NULL; mir = mir->next) {
314 if ((IsBackedge(bb, bb->taken) && bb->taken->dominates_return) ||
315 (IsBackedge(bb, bb->fall_through) && bb->fall_through->dominates_return)) {
331 BasicBlock* ft = bb->fall_through;
336 BasicBlock* tk = bb->taken;
440 incoming[i] = bb->id;
452 bb->taken = NULL;
462 bb = NextDominatedBlock(bb);
471 void MIRGraph::NullCheckEliminationInit(struct BasicBlock* bb) {
472 if (bb->data_flow_info != NULL) {
473 bb->data_flow_info->ending_null_check_v =
479 void MIRGraph::CountChecks(struct BasicBlock* bb) {
480 if (bb->data_flow_info != NULL) {
481 for (MIR* mir = bb->first_mir_insn; mir != NULL; mir = mir->next) {
503 static bool LayoutBlocks(struct BasicBlock* bb) {
505 if (!bb->explicit_throw) {
508 BasicBlock* walker = bb;
550 bool MIRGraph::CombineBlocks(struct BasicBlock* bb) {
554 if ((bb->first_mir_insn == NULL)
555 || (bb->data_flow_info == NULL)
556 || (bb->block_type == kExceptionHandling)
557 || (bb->block_type == kExitBlock)
558 || (bb->block_type == kDead)
559 || ((bb->taken == NULL) || (bb->taken->block_type != kExceptionHandling))
560 || (bb->successor_block_list.block_list_type != kNotUsed)
561 || (static_cast<int>(bb->last_mir_insn->dalvikInsn.opcode) != kMirOpCheck)) {
566 MIR* mir = bb->last_mir_insn;
581 BasicBlock* bb_next = bb->fall_through;
584 MIR* t_mir = bb->last_mir_insn->prev;
587 *bb->last_mir_insn = *throw_insn;
588 bb->last_mir_insn->prev = t_mir;
590 bb->successor_block_list = bb_next->successor_block_list;
592 bb->fall_through = bb_next->fall_through;
593 bb->taken->block_type = kDead; // Kill the unused exception block
594 bb->taken = bb_next->taken;
596 bb->last_mir_insn = bb_next->last_mir_insn;
601 bb->terminated_by_return = bb_next->terminated_by_return;
610 block_id_map_.Overwrite(bb_next->id, bb->id);
618 bool MIRGraph::EliminateNullChecks(struct BasicBlock* bb) {
619 if (bb->data_flow_info == NULL) return false;
626 if ((bb->block_type == kEntryBlock) | bb->catch_entry) {
633 } else if (bb->predecessors->Size() == 1) {
634 BasicBlock* pred_bb = bb->predecessors->Get(0);
641 if (pred_bb->fall_through == bb) {
647 if (pred_bb->taken == bb) {
656 GrowableArray<BasicBlock*>::Iterator iter(bb->predecessors);
672 for (MIR* mir = bb->first_mir_insn; mir != NULL; mir = mir->next) {
694 } else if (bb->fall_through) {
696 struct BasicBlock* next_bb = bb->fall_through;
755 bool changed = !temp_ssa_register_v_->Equal(bb->data_flow_info->ending_null_check_v);
757 bb->data_flow_info->ending_null_check_v->Copy(temp_ssa_register_v_);
766 for (BasicBlock* bb = iter.Next(); bb != NULL; bb = iter.Next()) {
767 NullCheckEliminationInit(bb);
771 for (BasicBlock* bb = iter2.Next(change); bb != NULL; bb = iter2.Next(change)) {
772 change = EliminateNullChecks(bb);
782 for (BasicBlock* bb = iter.Next(); bb != NULL; bb = iter.Next()) {
783 CombineBlocks(bb);
795 for (BasicBlock* bb = iter.Next(); bb != NULL; bb = iter.Next()) {
796 LayoutBlocks(bb);
808 for (BasicBlock* bb = iter.Next(); bb != NULL; bb = iter.Next()) {
809 CountChecks(bb);
827 bool MIRGraph::BuildExtendedBBList(struct BasicBlock* bb) {
828 if (bb->visited) return false;
829 if (!((bb->block_type == kEntryBlock) || (bb->block_type == kDalvikByteCode)
830 || (bb->block_type == kExitBlock))) {
832 bb->visited = true;
836 BasicBlock* start_bb = bb;
837 extended_basic_blocks_.push_back(bb);
840 while (bb != NULL) {
841 bb->visited = true;
842 terminated_by_return |= bb->terminated_by_return;
843 bb = NextDominatedBlock(bb);
847 bb = start_bb;
848 while (bb != NULL) {
849 bb->dominates_return = true;
850 bb = NextDominatedBlock(bb);
862 for (BasicBlock* bb = iter2.Next(); bb != NULL; bb = iter2.Next()) {
863 BuildExtendedBBList(bb);