[PATCH 4/6] return auto_vec from get_dominated_by
Richard Biener
richard.guenther@gmail.com
Tue Jun 15 06:46:57 GMT 2021
On Tue, Jun 15, 2021 at 8:02 AM Trevor Saunders <tbsaunde@tbsaunde.org> wrote:
>
> Signed-off-by: Trevor Saunders <tbsaunde@tbsaunde.org>
>
> bootstrapped and regtested on x86_64-linux-gnu, ok?
OK.
Thanks,
Richard.
> 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
>
More information about the Gcc-patches
mailing list