diff options
Diffstat (limited to 'gcc/loop-unroll.c')
-rw-r--r-- | gcc/loop-unroll.c | 70 |
1 files changed, 35 insertions, 35 deletions
diff --git a/gcc/loop-unroll.c b/gcc/loop-unroll.c index 5288fd74734..58bd9f23cf3 100644 --- a/gcc/loop-unroll.c +++ b/gcc/loop-unroll.c @@ -91,7 +91,7 @@ struct var_to_expand { rtx insn; /* The insn in that the variable expansion occurs. */ rtx reg; /* The accumulator which is expanded. */ - VEC(rtx,heap) *var_expansions; /* The copies of the accumulator which is expanded. */ + vec<rtx> var_expansions; /* The copies of the accumulator which is expanded. */ struct var_to_expand *next; /* Next entry in walking order. */ enum rtx_code op; /* The type of the accumulation - addition, subtraction or multiplication. */ @@ -453,7 +453,7 @@ peel_loop_completely (struct loop *loop) sbitmap wont_exit; unsigned HOST_WIDE_INT npeel; unsigned i; - VEC (edge, heap) *remove_edges; + vec<edge> remove_edges; edge ein; struct niter_desc *desc = get_simple_loop_desc (loop); struct opt_info *opt_info = NULL; @@ -470,7 +470,7 @@ peel_loop_completely (struct loop *loop) if (desc->noloop_assumptions) bitmap_clear_bit (wont_exit, 1); - remove_edges = NULL; + remove_edges.create (0); if (flag_split_ivs_in_unroller) opt_info = analyze_insns_in_loop (loop); @@ -495,9 +495,9 @@ peel_loop_completely (struct loop *loop) } /* Remove the exit edges. */ - FOR_EACH_VEC_ELT (edge, remove_edges, i, ein) + FOR_EACH_VEC_ELT (remove_edges, i, ein) remove_path (ein); - VEC_free (edge, heap, remove_edges); + remove_edges.release (); } ein = desc->in_edge; @@ -639,7 +639,7 @@ unroll_loop_constant_iterations (struct loop *loop) unsigned exit_mod; sbitmap wont_exit; unsigned i; - VEC (edge, heap) *remove_edges; + vec<edge> remove_edges; edge e; unsigned max_unroll = loop->lpt_decision.times; struct niter_desc *desc = get_simple_loop_desc (loop); @@ -657,7 +657,7 @@ unroll_loop_constant_iterations (struct loop *loop) wont_exit = sbitmap_alloc (max_unroll + 1); bitmap_ones (wont_exit); - remove_edges = NULL; + remove_edges.create (0); if (flag_split_ivs_in_unroller || flag_variable_expansion_in_unroller) opt_info = analyze_insns_in_loop (loop); @@ -805,9 +805,9 @@ unroll_loop_constant_iterations (struct loop *loop) desc->niter_expr = GEN_INT (desc->niter); /* Remove the edges. */ - FOR_EACH_VEC_ELT (edge, remove_edges, i, e) + FOR_EACH_VEC_ELT (remove_edges, i, e) remove_path (e); - VEC_free (edge, heap, remove_edges); + remove_edges.release (); if (dump_file) fprintf (dump_file, @@ -982,11 +982,11 @@ unroll_loop_runtime_iterations (struct loop *loop) rtx old_niter, niter, init_code, branch_code, tmp; unsigned i, j, p; basic_block preheader, *body, swtch, ezc_swtch; - VEC (basic_block, heap) *dom_bbs; + vec<basic_block> dom_bbs; sbitmap wont_exit; int may_exit_copy; unsigned n_peel; - VEC (edge, heap) *remove_edges; + vec<edge> remove_edges; edge e; bool extra_zero_check, last_may_exit; unsigned max_unroll = loop->lpt_decision.times; @@ -1000,20 +1000,20 @@ unroll_loop_runtime_iterations (struct loop *loop) opt_info = analyze_insns_in_loop (loop); /* Remember blocks whose dominators will have to be updated. */ - dom_bbs = NULL; + dom_bbs.create (0); body = get_loop_body (loop); for (i = 0; i < loop->num_nodes; i++) { - VEC (basic_block, heap) *ldom; + vec<basic_block> ldom; basic_block bb; ldom = get_dominated_by (CDI_DOMINATORS, body[i]); - FOR_EACH_VEC_ELT (basic_block, ldom, j, bb) + FOR_EACH_VEC_ELT (ldom, j, bb) if (!flow_bb_inside_loop_p (loop, bb)) - VEC_safe_push (basic_block, heap, dom_bbs, bb); + dom_bbs.safe_push (bb); - VEC_free (basic_block, heap, ldom); + ldom.release (); } free (body); @@ -1058,7 +1058,7 @@ unroll_loop_runtime_iterations (struct loop *loop) /* Precondition the loop. */ split_edge_and_insert (loop_preheader_edge (loop), init_code); - remove_edges = NULL; + remove_edges.create (0); wont_exit = sbitmap_alloc (max_unroll + 2); @@ -1180,9 +1180,9 @@ unroll_loop_runtime_iterations (struct loop *loop) } /* Remove the edges. */ - FOR_EACH_VEC_ELT (edge, remove_edges, i, e) + FOR_EACH_VEC_ELT (remove_edges, i, e) remove_path (e); - VEC_free (edge, heap, remove_edges); + remove_edges.release (); /* We must be careful when updating the number of iterations due to preconditioning and the fact that the value must be valid at entry @@ -1220,7 +1220,7 @@ unroll_loop_runtime_iterations (struct loop *loop) "in runtime, %i insns\n", max_unroll, num_loop_insns (loop)); - VEC_free (basic_block, heap, dom_bbs); + dom_bbs.release (); } /* Decide whether to simply peel LOOP and how much. */ @@ -1759,7 +1759,7 @@ analyze_insn_to_expand_var (struct loop *loop, rtx insn) ves = XNEW (struct var_to_expand); ves->insn = insn; ves->reg = copy_rtx (dest); - ves->var_expansions = VEC_alloc (rtx, heap, 1); + ves->var_expansions.create (1); ves->next = NULL; ves->op = GET_CODE (src); ves->expansion_count = 0; @@ -1858,7 +1858,7 @@ analyze_insns_in_loop (struct loop *loop) struct var_to_expand *ves = NULL; PTR *slot1; PTR *slot2; - VEC (edge, heap) *edges = get_loop_exit_edges (loop); + vec<edge> edges = get_loop_exit_edges (loop); edge exit; bool can_apply = false; @@ -1877,9 +1877,9 @@ analyze_insns_in_loop (struct loop *loop) /* Record the loop exit bb and loop preheader before the unrolling. */ opt_info->loop_preheader = loop_preheader_edge (loop)->src; - if (VEC_length (edge, edges) == 1) + if (edges.length () == 1) { - exit = VEC_index (edge, edges, 0); + exit = edges[0]; if (!(exit->flags & EDGE_COMPLEX)) { opt_info->loop_exit = split_edge (exit); @@ -1935,7 +1935,7 @@ analyze_insns_in_loop (struct loop *loop) } } - VEC_free (edge, heap, edges); + edges.release (); free (body); return opt_info; } @@ -2090,9 +2090,9 @@ get_expansion (struct var_to_expand *ve) if (ve->reuse_expansion == 0) reg = ve->reg; else - reg = VEC_index (rtx, ve->var_expansions, ve->reuse_expansion - 1); + reg = ve->var_expansions[ve->reuse_expansion - 1]; - if (VEC_length (rtx, ve->var_expansions) == (unsigned) ve->reuse_expansion) + if (ve->var_expansions.length () == (unsigned) ve->reuse_expansion) ve->reuse_expansion = 0; else ve->reuse_expansion++; @@ -2127,7 +2127,7 @@ expand_var_during_unrolling (struct var_to_expand *ve, rtx insn) if (apply_change_group ()) if (really_new_expansion) { - VEC_safe_push (rtx, heap, ve->var_expansions, new_reg); + ve->var_expansions.safe_push (new_reg); ve->expansion_count++; } } @@ -2168,7 +2168,7 @@ insert_var_expansion_initialization (struct var_to_expand *ve, enum machine_mode mode = GET_MODE (ve->reg); bool honor_signed_zero_p = HONOR_SIGNED_ZEROS (mode); - if (VEC_length (rtx, ve->var_expansions) == 0) + if (ve->var_expansions.length () == 0) return; start_sequence (); @@ -2178,7 +2178,7 @@ insert_var_expansion_initialization (struct var_to_expand *ve, /* Note that we only accumulate FMA via the ADD operand. */ case PLUS: case MINUS: - FOR_EACH_VEC_ELT (rtx, ve->var_expansions, i, var) + FOR_EACH_VEC_ELT (ve->var_expansions, i, var) { if (honor_signed_zero_p) zero_init = simplify_gen_unary (NEG, mode, CONST0_RTX (mode), mode); @@ -2189,7 +2189,7 @@ insert_var_expansion_initialization (struct var_to_expand *ve, break; case MULT: - FOR_EACH_VEC_ELT (rtx, ve->var_expansions, i, var) + FOR_EACH_VEC_ELT (ve->var_expansions, i, var) { zero_init = CONST1_RTX (GET_MODE (var)); emit_move_insn (var, zero_init); @@ -2217,7 +2217,7 @@ combine_var_copies_in_loop_exit (struct var_to_expand *ve, basic_block place) rtx expr, seq, var, insn; unsigned i; - if (VEC_length (rtx, ve->var_expansions) == 0) + if (ve->var_expansions.length () == 0) return; start_sequence (); @@ -2227,12 +2227,12 @@ combine_var_copies_in_loop_exit (struct var_to_expand *ve, basic_block place) /* Note that we only accumulate FMA via the ADD operand. */ case PLUS: case MINUS: - FOR_EACH_VEC_ELT (rtx, ve->var_expansions, i, var) + FOR_EACH_VEC_ELT (ve->var_expansions, i, var) sum = simplify_gen_binary (PLUS, GET_MODE (ve->reg), var, sum); break; case MULT: - FOR_EACH_VEC_ELT (rtx, ve->var_expansions, i, var) + FOR_EACH_VEC_ELT (ve->var_expansions, i, var) sum = simplify_gen_binary (MULT, GET_MODE (ve->reg), var, sum); break; @@ -2405,7 +2405,7 @@ free_opt_info (struct opt_info *opt_info) struct var_to_expand *ves; for (ves = opt_info->var_to_expand_head; ves; ves = ves->next) - VEC_free (rtx, heap, ves->var_expansions); + ves->var_expansions.release (); htab_delete (opt_info->insns_with_var_to_expand); } free (opt_info); |