diff options
Diffstat (limited to 'gcc/tree-if-conv.c')
-rw-r--r-- | gcc/tree-if-conv.c | 37 |
1 files changed, 23 insertions, 14 deletions
diff --git a/gcc/tree-if-conv.c b/gcc/tree-if-conv.c index 3ee16739cf8..88696465856 100644 --- a/gcc/tree-if-conv.c +++ b/gcc/tree-if-conv.c @@ -187,9 +187,9 @@ tree_if_conversion (struct loop *loop, bool for_vectorizer) /* If current bb has only one successor, then consider it as an unconditional goto. */ - if (bb->succ && !bb->succ->succ_next) + if (EDGE_COUNT (bb->succs) == 1) { - basic_block bb_n = bb->succ->dest; + basic_block bb_n = EDGE_SUCC (bb, 0)->dest; if (cond != NULL_TREE) add_to_predicate_list (bb_n, cond); cond = NULL_TREE; @@ -472,6 +472,7 @@ static bool if_convertable_bb_p (struct loop *loop, basic_block bb, bool exit_bb_seen) { edge e; + edge_iterator ei; if (dump_file && (dump_flags & TDF_DETAILS)) fprintf (dump_file, "----------[%d]-------------\n", bb->index); @@ -493,7 +494,7 @@ if_convertable_bb_p (struct loop *loop, basic_block bb, bool exit_bb_seen) } /* Be less adventurous and handle only normal edges. */ - for (e = bb->succ; e; e = e->succ_next) + FOR_EACH_EDGE (e, ei, bb->succs) if (e->flags & (EDGE_ABNORMAL_CALL | EDGE_EH | EDGE_ABNORMAL | EDGE_IRREDUCIBLE_LOOP)) { @@ -524,6 +525,7 @@ if_convertable_loop_p (struct loop *loop, bool for_vectorizer ATTRIBUTE_UNUSED) block_stmt_iterator itr; unsigned int i; edge e; + edge_iterator ei; bool exit_bb_seen = false; /* Handle only inner most loop. */ @@ -556,7 +558,7 @@ if_convertable_loop_p (struct loop *loop, bool for_vectorizer ATTRIBUTE_UNUSED) /* If one of the loop header's edge is exit edge then do not apply if-conversion. */ - for (e = loop->header->succ; e; e = e->succ_next) + FOR_EACH_EDGE (e, ei, loop->header->succs) if ( e->flags & EDGE_LOOP_EXIT) return false; @@ -679,11 +681,12 @@ find_phi_replacement_condition (basic_block bb, tree *cond, basic_block p2 = NULL; basic_block true_bb = NULL; tree tmp_cond; + edge_iterator ei; - for (e = bb->pred; e; e = e->pred_next) + FOR_EACH_EDGE (e, ei, bb->preds) { if (p1 == NULL) - p1 = e->src; + p1 = e->src; else { gcc_assert (!p2); @@ -869,6 +872,7 @@ combine_blocks (struct loop *loop) if (bb == exit_bb) { edge new_e; + edge_iterator ei; /* Connect this node with loop header. */ new_e = make_edge (ifc_bbs[0], bb, EDGE_FALLTHRU); @@ -877,7 +881,7 @@ combine_blocks (struct loop *loop) if (exit_bb != loop->latch) { /* Redirect non-exit edge to loop->latch. */ - for (e = bb->succ; e; e = e->succ_next) + FOR_EACH_EDGE (e, ei, bb->succs) if (!(e->flags & EDGE_LOOP_EXIT)) { redirect_edge_and_branch (e, loop->latch); @@ -888,10 +892,10 @@ combine_blocks (struct loop *loop) } /* It is time to remove this basic block. First remove edges. */ - while (bb->succ != NULL) - ssa_remove_edge (bb->succ); - while (bb->pred != NULL) - ssa_remove_edge (bb->pred); + while (EDGE_COUNT (bb->succs) > 0) + ssa_remove_edge (EDGE_SUCC (bb, 0)); + while (EDGE_COUNT (bb->preds) > 0) + ssa_remove_edge (EDGE_PRED (bb, 0)); /* Remove labels and make stmts member of loop->header. */ for (bsi = bsi_start (bb); !bsi_end_p (bsi); ) @@ -970,7 +974,8 @@ static bool pred_blocks_visited_p (basic_block bb, bitmap *visited) { edge e; - for (e = bb->pred; e; e = e->pred_next) + edge_iterator ei; + FOR_EACH_EDGE (e, ei, bb->preds) if (!bitmap_bit_p (*visited, e->src->index)) return false; @@ -1041,11 +1046,15 @@ static bool bb_with_exit_edge_p (basic_block bb) { edge e; + edge_iterator ei; bool exit_edge_found = false; - for (e = bb->succ; e && !exit_edge_found ; e = e->succ_next) + FOR_EACH_EDGE (e, ei, bb->succs) if (e->flags & EDGE_LOOP_EXIT) - exit_edge_found = true; + { + exit_edge_found = true; + break; + } return exit_edge_found; } |