Signed-off-by: Trevor Saunders <tbsau...@tbsaunde.org> bootstrapped and regtested on x86_64-linux-gnu, ok?
gcc/ChangeLog: * dominance.c (get_dominated_by): Return auto_vec<basic_block>. * dominance.h (get_dominated_by): Likewise. * auto-profile.c (afdo_find_equiv_class): Adjust. * cfgloopmanip.c (duplicate_loop_to_header_edge): Likewise. * loop-unroll.c (unroll_loop_runtime_iterations): Likewise. * tree-cfg.c (test_linear_chain): Likewise. (test_diamond): Likewise. --- gcc/auto-profile.c | 9 +++------ gcc/cfgloopmanip.c | 4 +--- gcc/dominance.c | 6 +++--- gcc/dominance.h | 2 +- gcc/loop-unroll.c | 12 +++--------- gcc/tree-cfg.c | 14 ++++++-------- 6 files changed, 17 insertions(+), 30 deletions(-) diff --git a/gcc/auto-profile.c b/gcc/auto-profile.c index ed788dc06a8..43d6fa0b1f0 100644 --- a/gcc/auto-profile.c +++ b/gcc/auto-profile.c @@ -1155,13 +1155,10 @@ afdo_find_equiv_class (bb_set *annotated_bb) FOR_ALL_BB_FN (bb, cfun) { - vec<basic_block> dom_bbs; - if (bb->aux != NULL) continue; bb->aux = bb; - dom_bbs = get_dominated_by (CDI_DOMINATORS, bb); - for (basic_block bb1 : dom_bbs) + for (basic_block bb1 : get_dominated_by (CDI_DOMINATORS, bb)) if (bb1->aux == NULL && dominated_by_p (CDI_POST_DOMINATORS, bb, bb1) && bb1->loop_father == bb->loop_father) { @@ -1172,8 +1169,8 @@ afdo_find_equiv_class (bb_set *annotated_bb) set_bb_annotated (bb, annotated_bb); } } - dom_bbs = get_dominated_by (CDI_POST_DOMINATORS, bb); - for (basic_block bb1 : dom_bbs) + + for (basic_block bb1 : get_dominated_by (CDI_POST_DOMINATORS, bb)) if (bb1->aux == NULL && dominated_by_p (CDI_DOMINATORS, bb, bb1) && bb1->loop_father == bb->loop_father) { diff --git a/gcc/cfgloopmanip.c b/gcc/cfgloopmanip.c index 4a9ab74642c..e6df28036c4 100644 --- a/gcc/cfgloopmanip.c +++ b/gcc/cfgloopmanip.c @@ -1414,13 +1414,12 @@ duplicate_loop_to_header_edge (class loop *loop, edge e, for (i = 0; i < n; i++) { basic_block dominated, dom_bb; - vec<basic_block> dom_bbs; unsigned j; bb = bbs[i]; bb->aux = 0; - dom_bbs = get_dominated_by (CDI_DOMINATORS, bb); + auto_vec<basic_block> dom_bbs = get_dominated_by (CDI_DOMINATORS, bb); FOR_EACH_VEC_ELT (dom_bbs, j, dominated) { if (flow_bb_inside_loop_p (loop, dominated)) @@ -1429,7 +1428,6 @@ duplicate_loop_to_header_edge (class loop *loop, edge e, CDI_DOMINATORS, first_active[i], first_active_latch); set_immediate_dominator (CDI_DOMINATORS, dominated, dom_bb); } - dom_bbs.release (); } free (first_active); diff --git a/gcc/dominance.c b/gcc/dominance.c index 5fa172f3280..0e464cb7282 100644 --- a/gcc/dominance.c +++ b/gcc/dominance.c @@ -883,17 +883,17 @@ set_immediate_dominator (enum cdi_direction dir, basic_block bb, /* Returns the list of basic blocks immediately dominated by BB, in the direction DIR. */ -vec<basic_block> +auto_vec<basic_block> get_dominated_by (enum cdi_direction dir, basic_block bb) { unsigned int dir_index = dom_convert_dir_to_idx (dir); struct et_node *node = bb->dom[dir_index], *son = node->son, *ason; - vec<basic_block> bbs = vNULL; + auto_vec<basic_block> bbs; gcc_checking_assert (dom_computed[dir_index]); if (!son) - return vNULL; + return bbs; bbs.safe_push ((basic_block) son->data); for (ason = son->right; ason != son; ason = ason->right) diff --git a/gcc/dominance.h b/gcc/dominance.h index 4eeac59fc59..515a369aacf 100644 --- a/gcc/dominance.h +++ b/gcc/dominance.h @@ -46,7 +46,7 @@ extern void free_dominance_info_for_region (function *, extern basic_block get_immediate_dominator (enum cdi_direction, basic_block); extern void set_immediate_dominator (enum cdi_direction, basic_block, basic_block); -extern vec<basic_block> get_dominated_by (enum cdi_direction, basic_block); +extern auto_vec<basic_block> get_dominated_by (enum cdi_direction, basic_block); extern vec<basic_block> get_dominated_by_region (enum cdi_direction, basic_block *, unsigned); diff --git a/gcc/loop-unroll.c b/gcc/loop-unroll.c index 8b6fcf5074c..66d93487e29 100644 --- a/gcc/loop-unroll.c +++ b/gcc/loop-unroll.c @@ -884,7 +884,7 @@ unroll_loop_runtime_iterations (class loop *loop) { rtx old_niter, niter, tmp; rtx_insn *init_code, *branch_code; - unsigned i, j; + unsigned i; profile_probability p; basic_block preheader, *body, swtch, ezc_swtch = NULL; int may_exit_copy; @@ -908,15 +908,9 @@ unroll_loop_runtime_iterations (class loop *loop) body = get_loop_body (loop); for (i = 0; i < loop->num_nodes; i++) { - vec<basic_block> ldom; - basic_block bb; - - ldom = get_dominated_by (CDI_DOMINATORS, body[i]); - FOR_EACH_VEC_ELT (ldom, j, bb) + for (basic_block bb : get_dominated_by (CDI_DOMINATORS, body[i])) if (!flow_bb_inside_loop_p (loop, bb)) dom_bbs.safe_push (bb); - - ldom.release (); } free (body); @@ -1013,7 +1007,7 @@ unroll_loop_runtime_iterations (class loop *loop) gcc_assert (ok); /* Create item for switch. */ - j = n_peel - i - (extra_zero_check ? 0 : 1); + unsigned j = n_peel - i - (extra_zero_check ? 0 : 1); p = profile_probability::always ().apply_scale (1, i + 2); preheader = split_edge (loop_preheader_edge (loop)); diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index 02256580c98..6bdd1a561fd 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -9917,22 +9917,20 @@ test_linear_chain () calculate_dominance_info (CDI_DOMINATORS); ASSERT_EQ (bb_a, get_immediate_dominator (CDI_DOMINATORS, bb_b)); ASSERT_EQ (bb_b, get_immediate_dominator (CDI_DOMINATORS, bb_c)); - vec<basic_block> dom_by_b = get_dominated_by (CDI_DOMINATORS, bb_b); + auto_vec<basic_block> dom_by_b = get_dominated_by (CDI_DOMINATORS, bb_b); ASSERT_EQ (1, dom_by_b.length ()); ASSERT_EQ (bb_c, dom_by_b[0]); free_dominance_info (CDI_DOMINATORS); - dom_by_b.release (); /* Similarly for post-dominance: each BB in our chain is post-dominated by the one after it. */ calculate_dominance_info (CDI_POST_DOMINATORS); ASSERT_EQ (bb_b, get_immediate_dominator (CDI_POST_DOMINATORS, bb_a)); ASSERT_EQ (bb_c, get_immediate_dominator (CDI_POST_DOMINATORS, bb_b)); - vec<basic_block> postdom_by_b = get_dominated_by (CDI_POST_DOMINATORS, bb_b); + auto_vec<basic_block> postdom_by_b = get_dominated_by (CDI_POST_DOMINATORS, bb_b); ASSERT_EQ (1, postdom_by_b.length ()); ASSERT_EQ (bb_a, postdom_by_b[0]); free_dominance_info (CDI_POST_DOMINATORS); - postdom_by_b.release (); pop_cfun (); } @@ -9991,10 +9989,10 @@ test_diamond () ASSERT_EQ (bb_a, get_immediate_dominator (CDI_DOMINATORS, bb_b)); ASSERT_EQ (bb_a, get_immediate_dominator (CDI_DOMINATORS, bb_c)); ASSERT_EQ (bb_a, get_immediate_dominator (CDI_DOMINATORS, bb_d)); - vec<basic_block> dom_by_a = get_dominated_by (CDI_DOMINATORS, bb_a); + auto_vec<basic_block> dom_by_a = get_dominated_by (CDI_DOMINATORS, bb_a); ASSERT_EQ (3, dom_by_a.length ()); /* B, C, D, in some order. */ dom_by_a.release (); - vec<basic_block> dom_by_b = get_dominated_by (CDI_DOMINATORS, bb_b); + auto_vec<basic_block> dom_by_b = get_dominated_by (CDI_DOMINATORS, bb_b); ASSERT_EQ (0, dom_by_b.length ()); dom_by_b.release (); free_dominance_info (CDI_DOMINATORS); @@ -10004,10 +10002,10 @@ test_diamond () ASSERT_EQ (bb_d, get_immediate_dominator (CDI_POST_DOMINATORS, bb_a)); ASSERT_EQ (bb_d, get_immediate_dominator (CDI_POST_DOMINATORS, bb_b)); ASSERT_EQ (bb_d, get_immediate_dominator (CDI_POST_DOMINATORS, bb_c)); - vec<basic_block> postdom_by_d = get_dominated_by (CDI_POST_DOMINATORS, bb_d); + auto_vec<basic_block> postdom_by_d = get_dominated_by (CDI_POST_DOMINATORS, bb_d); ASSERT_EQ (3, postdom_by_d.length ()); /* A, B, C in some order. */ postdom_by_d.release (); - vec<basic_block> postdom_by_b = get_dominated_by (CDI_POST_DOMINATORS, bb_b); + auto_vec<basic_block> postdom_by_b = get_dominated_by (CDI_POST_DOMINATORS, bb_b); ASSERT_EQ (0, postdom_by_b.length ()); postdom_by_b.release (); free_dominance_info (CDI_POST_DOMINATORS); -- 2.20.1