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)
{
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)
{
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))
CDI_DOMINATORS, first_active[i], first_active_latch);
set_immediate_dominator (CDI_DOMINATORS, dominated, dom_bb);
}
- dom_bbs.release ();
}
free (first_active);
/* 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)
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);
{
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;
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);
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));
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 ();
}
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);
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);