Replace some heap vectors with stack vectors.
authorTrevor Saunders <tsaunders@mozilla.com>
Fri, 1 Nov 2013 20:31:32 +0000 (20:31 +0000)
committerDiego Novillo <dnovillo@gcc.gnu.org>
Fri, 1 Nov 2013 20:31:32 +0000 (16:31 -0400)
From http://gcc.gnu.org/ml/gcc-patches/2013-10/msg02735.html

This patch is pretty dull, it just replaces a bunch of things of the
form
vec<T> x;
x.create (N); // N is a constant
blah blah
x.release ();
by
stack_vec<T, N> x;
blah blah

2013-11-01  Trevor Saunders  <tsaunders@mozilla.com>

gcc/
* function.c (reorder_blocks): Convert block_stack to a stack_vec.
* gimplify.c (gimplify_compound_lval): Likewise.
* graphite-clast-to-gimple.c (gloog): Likewise.
* graphite-dependences.c (loop_is_parallel_p): Likewise.
* graphite-scop-detection.c (scopdet_basic_block_info): Likewise.
(limit_scop); Likewise.
(build_scops): Likewise.
(dot_scop): Likewise.
* graphite-sese-to-poly.c (sese_dom_walker): Likewise.
(build_scop_drs): Likewise.
(insert_stmts): Likewise.
(insert_out_of_ssa_copy): Likewise.
(remove_phi): Likewise.
(rewrite_commutative_reductions_out_of_ssa_close_phi): Likewise.
* hw-doloop.c (discover_loop): Likewise.
* tree-call-cdce.c (shrink_wrap_one_built_in_call): Likewise.
* tree-dfa.c (dump_enumerated_decls): Likewise.
* tree-if-conv.c (if_convertable_loop_p): Likewise.
* tree-inline.c (tree_function_versioning): Likewise.
* tree-loop-distribution.c (build_rdg): Likewise.
(rdg_flag_vertex_and_dependent): Likewise.
(distribute_loop): Likewise.
* tree-parloops.c (loop_parallel_p): Likewise.
(eliminate_local_variables): Likewise.
(separate_decls_in_region): Likewise.
* tree-predcom.c (tree_predictive_commoning_loop): Likewise.
* tree-ssa-phiopt.c (cond_if_else_store_replacement): Likewise.
* tree-ssa-uncprop.c (uncprop_dom_walker): Likewise.
* tree-vect-loop.c (vect_analyze_scaler_cycles_1): Likewise.
* tree-vect-patterns.c (vect_pattern_recog): Likewise.
* tree-vect-stmts.c (vect_mark_stmts_to_be_vectorized): Likewise.
(vectorizable_condition): Likewise.

gcc/cp/
* semantics.c (build_anon_member_initialization): Convert fields to be
        a stack_vec.

From-SVN: r204301

22 files changed:
gcc/ChangeLog
gcc/cp/ChangeLog
gcc/cp/semantics.c
gcc/function.c
gcc/gimplify.c
gcc/graphite-clast-to-gimple.c
gcc/graphite-dependences.c
gcc/graphite-scop-detection.c
gcc/graphite-sese-to-poly.c
gcc/hw-doloop.c
gcc/tree-call-cdce.c
gcc/tree-dfa.c
gcc/tree-if-conv.c
gcc/tree-inline.c
gcc/tree-loop-distribution.c
gcc/tree-parloops.c
gcc/tree-predcom.c
gcc/tree-ssa-phiopt.c
gcc/tree-ssa-uncprop.c
gcc/tree-vect-loop.c
gcc/tree-vect-patterns.c
gcc/tree-vect-stmts.c

index 0eea81e5001bfec016393fb22c8cf29f22163fa3..6bdaa313d8b70fa1a332853ed272d03bf1af15b0 100644 (file)
@@ -1,3 +1,38 @@
+2013-11-01  Trevor Saunders  <tsaunders@mozilla.com>
+
+       * function.c (reorder_blocks): Convert block_stack to a stack_vec.
+       * gimplify.c (gimplify_compound_lval): Likewise.
+       * graphite-clast-to-gimple.c (gloog): Likewise.
+       * graphite-dependences.c (loop_is_parallel_p): Likewise.
+       * graphite-scop-detection.c (scopdet_basic_block_info): Likewise.
+       (limit_scop); Likewise.
+       (build_scops): Likewise.
+       (dot_scop): Likewise.
+       * graphite-sese-to-poly.c (sese_dom_walker): Likewise.
+       (build_scop_drs): Likewise.
+       (insert_stmts): Likewise.
+       (insert_out_of_ssa_copy): Likewise.
+       (remove_phi): Likewise.
+       (rewrite_commutative_reductions_out_of_ssa_close_phi): Likewise.
+       * hw-doloop.c (discover_loop): Likewise.
+       * tree-call-cdce.c (shrink_wrap_one_built_in_call): Likewise.
+       * tree-dfa.c (dump_enumerated_decls): Likewise.
+       * tree-if-conv.c (if_convertable_loop_p): Likewise.
+       * tree-inline.c (tree_function_versioning): Likewise.
+       * tree-loop-distribution.c (build_rdg): Likewise.
+       (rdg_flag_vertex_and_dependent): Likewise.
+       (distribute_loop): Likewise.
+       * tree-parloops.c (loop_parallel_p): Likewise.
+       (eliminate_local_variables): Likewise.
+       (separate_decls_in_region): Likewise.
+       * tree-predcom.c (tree_predictive_commoning_loop): Likewise.
+       * tree-ssa-phiopt.c (cond_if_else_store_replacement): Likewise.
+       * tree-ssa-uncprop.c (uncprop_dom_walker): Likewise.
+       * tree-vect-loop.c (vect_analyze_scaler_cycles_1): Likewise.
+       * tree-vect-patterns.c (vect_pattern_recog): Likewise.
+       * tree-vect-stmts.c (vect_mark_stmts_to_be_vectorized): Likewise.
+       (vectorizable_condition): Likewise.
+
 2013-11-01  Uros Bizjak  <ubizjak@gmail.com>
 
        * configure.ac (HAVE_AS_IX86_INTERUNIT_MOVQ): Always define as 0/1.
index e1dbb3b15cf2f50295e73588a6687a3ae7a519f3..d707fec81f17059b341468b16a3e98356281a7e8 100644 (file)
@@ -1,3 +1,8 @@
+2013-11-01  Trevor Saunders  <tsaunders@mozilla.com>
+
+       * semantics.c (build_anon_member_initialization): Convert fields to be
+        a stack_vec.
+
 2013-11-01  Marc Glisse  <marc.glisse@inria.fr>
 
        PR c++/58834
index 6c560c660a9dbf40395c035622a3edfc71bb75ff..366756fd437593eae7e886b343e1456064dac8cb 100644 (file)
@@ -7439,8 +7439,7 @@ build_anon_member_initialization (tree member, tree init,
      to build up the initializer from the outside in so that we can reuse
      previously built CONSTRUCTORs if this is, say, the second field in an
      anonymous struct.  So we use a vec as a stack.  */
-  vec<tree> fields;
-  fields.create (2);
+  stack_vec<tree, 2> fields;
   do
     {
       fields.safe_push (TREE_OPERAND (member, 1));
@@ -7472,7 +7471,6 @@ build_anon_member_initialization (tree member, tree init,
   /* Now we're at the innermost field, the one that isn't an anonymous
      aggregate.  Add its initializer to the CONSTRUCTOR and we're done.  */
   gcc_assert (fields.is_empty());
-  fields.release ();
   CONSTRUCTOR_APPEND_ELT (*vec, field, init);
 
   return true;
index eb8aca91aaae3a89276c18d16829dbe07bc81f50..21ab691c586a43d86f629d9c71e4f5ba3d3c1611 100644 (file)
@@ -4128,12 +4128,11 @@ void
 reorder_blocks (void)
 {
   tree block = DECL_INITIAL (current_function_decl);
-  vec<tree> block_stack;
 
   if (block == NULL_TREE)
     return;
 
-  block_stack.create (10);
+  stack_vec<tree, 10> block_stack;
 
   /* Reset the TREE_ASM_WRITTEN bit for all blocks.  */
   clear_block_marks (block);
@@ -4145,8 +4144,6 @@ reorder_blocks (void)
   /* Recreate the block tree from the note nesting.  */
   reorder_blocks_1 (get_insns (), block, &block_stack);
   BLOCK_SUBBLOCKS (block) = blocks_nreverse_all (BLOCK_SUBBLOCKS (block));
-
-  block_stack.release ();
 }
 
 /* Helper function for reorder_blocks.  Reset TREE_ASM_WRITTEN.  */
index 1f18466fa8786ced2ca8f7fbac737471551fb381..0723027c392f25f579c37d5dcde276d6fcd53ea4 100644 (file)
@@ -2142,7 +2142,6 @@ gimplify_compound_lval (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p,
                        fallback_t fallback)
 {
   tree *p;
-  vec<tree> expr_stack;
   enum gimplify_status ret = GS_ALL_DONE, tret;
   int i;
   location_t loc = EXPR_LOCATION (*expr_p);
@@ -2150,7 +2149,7 @@ gimplify_compound_lval (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p,
 
   /* Create a stack of the subexpressions so later we can walk them in
      order from inner to outer.  */
-  expr_stack.create (10);
+  stack_vec<tree, 10> expr_stack;
 
   /* We can handle anything that get_inner_reference can deal with.  */
   for (p = expr_p; ; p = &TREE_OPERAND (*p, 0))
index 04c23c5bff75b4a8bf08d0b647e61a9635402fce..ec4c1d1f461fc1480ae545f0429174577943c8b1 100644 (file)
@@ -1652,8 +1652,7 @@ debug_generated_program (scop_p scop)
 bool
 gloog (scop_p scop, bb_pbb_htab_type bb_pbb_mapping)
 {
-  vec<tree> newivs;
-  newivs.create (10);
+  stack_vec<tree, 10> newivs;
   loop_p context_loop;
   sese region = SCOP_REGION (scop);
   ifsese if_region = NULL;
@@ -1711,7 +1710,6 @@ gloog (scop_p scop, bb_pbb_htab_type bb_pbb_mapping)
 
   newivs_index.dispose ();
   params_index.dispose ();
-  newivs.release ();
   cloog_clast_free (clast);
   timevar_pop (TV_GRAPHITE_CODE_GEN);
 
index 545881bc0ac556696e45ef13e499b64802400716..417ea2cd153e2309788ec464a1e044dcab9e3523 100644 (file)
@@ -585,13 +585,11 @@ loop_is_parallel_p (loop_p loop, bb_pbb_htab_type bb_pbb_mapping, int depth)
 {
   bool dependences;
   scop_p scop;
-  vec<poly_bb_p> body;
-  body.create (3);
 
   timevar_push (TV_GRAPHITE_DATA_DEPS);
+  stack_vec<poly_bb_p, 3> body;
   scop = get_loop_body_pbbs (loop, bb_pbb_mapping, &body);
   dependences = loop_level_carries_dependences (scop, body, depth);
-  body.release ();
   timevar_pop (TV_GRAPHITE_DATA_DEPS);
 
   return !dependences;
index 38fe92b44bbe27ab7e76d0516fa183edff7419cd..e73a349803a823ea1c1596a1ded8854884f834b2 100644 (file)
@@ -475,8 +475,7 @@ scopdet_basic_block_info (basic_block bb, loop_p outermost_loop,
 
     case GBB_LOOP_SING_EXIT_HEADER:
       {
-       vec<sd_region> regions;
-       regions.create (3);
+       stack_vec<sd_region, 3> regions;
        struct scopdet_info sinfo;
        edge exit_e = single_exit (loop);
 
@@ -541,8 +540,7 @@ scopdet_basic_block_info (basic_block bb, loop_p outermost_loop,
       {
         /* XXX: For now we just do not join loops with multiple exits.  If the
            exits lead to the same bb it may be possible to join the loop.  */
-        vec<sd_region> regions;
-       regions.create (3);
+        stack_vec<sd_region, 3> regions;
         vec<edge> exits = get_loop_exit_edges (loop);
         edge e;
         int i;
@@ -585,8 +583,7 @@ scopdet_basic_block_info (basic_block bb, loop_p outermost_loop,
       }
     case GBB_COND_HEADER:
       {
-       vec<sd_region> regions;
-       regions.create (3);
+       stack_vec<sd_region, 3> regions;
        struct scopdet_info sinfo;
        vec<basic_block> dominated;
        int i;
@@ -1189,8 +1186,7 @@ print_graphite_statistics (FILE* file, vec<scop_p> scops)
 static void
 limit_scops (vec<scop_p> *scops)
 {
-  vec<sd_region> regions;
-  regions.create (3);
+  stack_vec<sd_region, 3> regions;
 
   int i;
   scop_p scop;
@@ -1225,7 +1221,6 @@ limit_scops (vec<scop_p> *scops)
 
   create_sese_edges (regions);
   build_graphite_scops (regions, scops);
-  regions.release ();
 }
 
 /* Returns true when P1 and P2 are close phis with the same
@@ -1404,8 +1399,7 @@ void
 build_scops (vec<scop_p> *scops)
 {
   struct loop *loop = current_loops->tree_root;
-  vec<sd_region> regions;
-  regions.create (3);
+  stack_vec<sd_region, 3> regions;
 
   canonicalize_loop_closed_ssa_form ();
   build_scops_1 (single_succ (ENTRY_BLOCK_PTR), ENTRY_BLOCK_PTR->loop_father,
@@ -1595,7 +1589,7 @@ dot_all_scops (vec<scop_p> scops)
 DEBUG_FUNCTION void
 dot_scop (scop_p scop)
 {
-  vec<scop_p> scops = vNULL;
+  stack_vec<scop_p, 1> scops;
 
   if (scop)
     scops.safe_push (scop);
@@ -1615,8 +1609,6 @@ dot_scop (scop_p scop)
 #else
   dot_all_scops_1 (stderr, scops);
 #endif
-
-  scops.release ();
 }
 
 #endif
index 7d4796e1da94eeda3e8d48e0feab4f38d750d5c7..6c2ac41b30e74952ede2c4fb3c264ae4266f5312 100644 (file)
@@ -1231,27 +1231,18 @@ class sese_dom_walker : public dom_walker
 {
 public:
   sese_dom_walker (cdi_direction, sese);
-  ~sese_dom_walker ();
 
   virtual void before_dom_children (basic_block);
   virtual void after_dom_children (basic_block);
 
 private:
-  vec<gimple> m_conditions, m_cases;
+  stack_vec<gimple, 3> m_conditions, m_cases;
   sese m_region;
 };
 
 sese_dom_walker::sese_dom_walker (cdi_direction direction, sese region)
   : dom_walker (direction), m_region (region)
 {
-  m_conditions.create (3);
-  m_cases.create (3);
-}
-
-sese_dom_walker::~sese_dom_walker ()
-{
-  m_conditions.release ();
-  m_cases.release ();
 }
 
 /* Call-back for dom_walk executed before visiting the dominated
@@ -1890,8 +1881,7 @@ build_scop_drs (scop_p scop)
   int i, j;
   poly_bb_p pbb;
   data_reference_p dr;
-  vec<data_reference_p> drs;
-  drs.create (3);
+  stack_vec<data_reference_p, 3> drs;
 
   /* Remove all the PBBs that do not have data references: these basic
      blocks are not handled in the polyhedral representation.  */
@@ -1989,8 +1979,7 @@ insert_stmts (scop_p scop, gimple stmt, gimple_seq stmts,
              gimple_stmt_iterator insert_gsi)
 {
   gimple_stmt_iterator gsi;
-  vec<gimple> x;
-  x.create (3);
+  stack_vec<gimple, 3> x;
 
   gimple_seq_add_stmt (&stmts, stmt);
   for (gsi = gsi_start (stmts); !gsi_end_p (gsi); gsi_next (&gsi))
@@ -1998,7 +1987,6 @@ insert_stmts (scop_p scop, gimple stmt, gimple_seq stmts,
 
   gsi_insert_seq_before (&insert_gsi, stmts, GSI_SAME_STMT);
   analyze_drs_in_stmts (scop, gsi_bb (insert_gsi), x);
-  x.release ();
 }
 
 /* Insert the assignment "RES := EXPR" just after AFTER_STMT.  */
@@ -2010,8 +1998,7 @@ insert_out_of_ssa_copy (scop_p scop, tree res, tree expr, gimple after_stmt)
   gimple_stmt_iterator gsi;
   tree var = force_gimple_operand (expr, &stmts, true, NULL_TREE);
   gimple stmt = gimple_build_assign (unshare_expr (res), var);
-  vec<gimple> x;
-  x.create (3);
+  stack_vec<gimple, 3> x;
 
   gimple_seq_add_stmt (&stmts, stmt);
   for (gsi = gsi_start (stmts); !gsi_end_p (gsi); gsi_next (&gsi))
@@ -2029,7 +2016,6 @@ insert_out_of_ssa_copy (scop_p scop, tree res, tree expr, gimple after_stmt)
     }
 
   analyze_drs_in_stmts (scop, gimple_bb (after_stmt), x);
-  x.release ();
 }
 
 /* Creates a poly_bb_p for basic_block BB from the existing PBB.  */
@@ -2067,8 +2053,7 @@ insert_out_of_ssa_copy_on_edge (scop_p scop, edge e, tree res, tree expr)
   tree var = force_gimple_operand (expr, &stmts, true, NULL_TREE);
   gimple stmt = gimple_build_assign (unshare_expr (res), var);
   basic_block bb;
-  vec<gimple> x;
-  x.create (3);
+  stack_vec<gimple, 3> x;
 
   gimple_seq_add_stmt (&stmts, stmt);
   for (gsi = gsi_start (stmts); !gsi_end_p (gsi); gsi_next (&gsi))
@@ -2085,7 +2070,6 @@ insert_out_of_ssa_copy_on_edge (scop_p scop, edge e, tree res, tree expr)
     new_pbb_from_pbb (scop, pbb_from_bb (e->src), bb);
 
   analyze_drs_in_stmts (scop, bb, x);
-  x.release ();
 }
 
 /* Creates a zero dimension array of the same type as VAR.  */
@@ -2881,8 +2865,7 @@ remove_phi (gimple phi)
   tree def;
   use_operand_p use_p;
   gimple_stmt_iterator gsi;
-  vec<gimple> update;
-  update.create (3);
+  stack_vec<gimple, 3> update;
   unsigned int i;
   gimple stmt;
 
@@ -2901,8 +2884,6 @@ remove_phi (gimple phi)
   FOR_EACH_VEC_ELT (update, i, stmt)
     update_stmt (stmt);
 
-  update.release ();
-
   gsi = gsi_for_phi_node (phi);
   remove_phi_node (&gsi, false);
 }
@@ -3042,18 +3023,14 @@ rewrite_commutative_reductions_out_of_ssa_close_phi (scop_p scop,
                                                     gimple close_phi)
 {
   bool res;
-  vec<gimple> in;
-  in.create (10);
-  vec<gimple> out;
-  out.create (10);
+  stack_vec<gimple, 10> in;
+  stack_vec<gimple, 10> out;
 
   detect_commutative_reduction (scop, close_phi, &in, &out);
   res = in.length () > 1;
   if (res)
     translate_scalar_reduction_to_array (scop, in, out);
 
-  in.release ();
-  out.release ();
   return res;
 }
 
index 9b59f5ddc6dee8695dc45e332c0fd64775430b33..5d26638748510031a7626722f33e1e9bd3ed9b77 100644 (file)
@@ -237,7 +237,6 @@ discover_loop (hwloop_info loop, basic_block tail_bb, rtx tail_insn, rtx reg)
   bool found_tail;
   unsigned dwork = 0;
   basic_block bb;
-  vec<basic_block> works;
 
   loop->tail = tail_bb;
   loop->loop_end = tail_insn;
@@ -253,7 +252,7 @@ discover_loop (hwloop_info loop, basic_block tail_bb, rtx tail_insn, rtx reg)
   loop->head = BRANCH_EDGE (tail_bb)->dest;
   loop->successor = FALLTHRU_EDGE (tail_bb)->dest;
 
-  works.create (20);
+  stack_vec<basic_block, 20> works;
   works.safe_push (loop->head);
 
   found_tail = false;
@@ -340,8 +339,6 @@ discover_loop (hwloop_info loop, basic_block tail_bb, rtx tail_insn, rtx reg)
            }
        }
     }
-
-  works.release ();
 }
 
 /* Analyze the structure of the loops in the current function.  Use
index 578b21118d207bd111168e115d4cf40e22b6a975..eec1b0fb739aa3f1842f14c1e1cdeb58c65a85d1 100644 (file)
@@ -713,7 +713,6 @@ shrink_wrap_one_built_in_call (gimple bi_call)
   basic_block bi_call_bb, join_tgt_bb, guard_bb, guard_bb0;
   edge join_tgt_in_edge_from_call, join_tgt_in_edge_fall_thru;
   edge bi_call_in_edge0, guard_bb_in_edge;
-  vec<gimple> conds;
   unsigned tn_cond_stmts, nconds;
   unsigned ci;
   gimple cond_expr = NULL;
@@ -721,7 +720,7 @@ shrink_wrap_one_built_in_call (gimple bi_call)
   tree bi_call_label_decl;
   gimple bi_call_label;
 
-  conds.create (12);
+  stack_vec<gimple, 12> conds;
   gen_shrink_wrap_conditions (bi_call, conds, &nconds);
 
   /* This can happen if the condition generator decides
@@ -729,10 +728,7 @@ shrink_wrap_one_built_in_call (gimple bi_call)
      return false and do not do any transformation for
      the call.  */
   if (nconds == 0)
-    {
-      conds.release ();
-      return false;
-    }
+    return false;
 
   bi_call_bb = gimple_bb (bi_call);
 
@@ -743,10 +739,7 @@ shrink_wrap_one_built_in_call (gimple bi_call)
         it could e.g. have EH edges.  */
       join_tgt_in_edge_from_call = find_fallthru_edge (bi_call_bb->succs);
       if (join_tgt_in_edge_from_call == NULL)
-       {
-         conds.release ();
-         return false;
-       }
+        return false;
     }
   else
     join_tgt_in_edge_from_call = split_block (bi_call_bb, bi_call);
@@ -832,7 +825,6 @@ shrink_wrap_one_built_in_call (gimple bi_call)
       guard_bb_in_edge->count = guard_bb->count - bi_call_in_edge->count;
     }
 
-  conds.release ();
   if (dump_file && (dump_flags & TDF_DETAILS))
     {
       location_t loc;
index 238438e5a9b762d1de64d98636ff305aa295fbbe..a44cfe884dd941404a9bc0f27fb55326389cd31d 100644 (file)
@@ -743,8 +743,7 @@ dump_enumerated_decls (FILE *file, int flags)
 {
   basic_block bb;
   struct walk_stmt_info wi;
-  vec<numbered_tree> decl_list;
-  decl_list.create (40);
+  stack_vec<numbered_tree, 40> decl_list;
 
   memset (&wi, '\0', sizeof (wi));
   wi.info = (void *) &decl_list;
@@ -775,5 +774,4 @@ dump_enumerated_decls (FILE *file, int flags)
          last = ntp->t;
        }
     }
-  decl_list.release ();
 }
index feb51deb882b6f768cf0a8dacb2839f86fe3a399..31994b718e57150e27f19cfd269b95bf69b26320 100644 (file)
@@ -1165,7 +1165,6 @@ if_convertible_loop_p (struct loop *loop)
   bool res = false;
   vec<data_reference_p> refs;
   vec<ddr_p> ddrs;
-  vec<loop_p> loop_nest;
 
   /* Handle only innermost loop.  */
   if (!loop || loop->inner)
@@ -1199,7 +1198,7 @@ if_convertible_loop_p (struct loop *loop)
 
   refs.create (5);
   ddrs.create (25);
-  loop_nest.create (3);
+  stack_vec<loop_p, 3> loop_nest;
   res = if_convertible_loop_p_1 (loop, &loop_nest, &refs, &ddrs);
 
   if (flag_tree_loop_if_convert_stores)
index 74f333b82690db90a72fbe52e67a021c21d743b8..77013b390cb927902a407f63c775e688c0136c8e 100644 (file)
@@ -5187,8 +5187,7 @@ tree_function_versioning (tree old_decl, tree new_decl,
   unsigned i;
   struct ipa_replace_map *replace_info;
   basic_block old_entry_block, bb;
-  vec<gimple> init_stmts;
-  init_stmts.create (10);
+  stack_vec<gimple, 10> init_stmts;
   tree vars = NULL_TREE;
 
   gcc_assert (TREE_CODE (old_decl) == FUNCTION_DECL
@@ -5446,7 +5445,6 @@ tree_function_versioning (tree old_decl, tree new_decl,
   free_dominance_info (CDI_POST_DOMINATORS);
 
   gcc_assert (!id.debug_stmts.exists ());
-  init_stmts.release ();
   pop_cfun ();
   return;
 }
index 353ce247de0550fe44e15fad44986e44e261e11b..79884bf4272621fcb556ed38afec54899ab991d5 100644 (file)
@@ -436,17 +436,15 @@ static struct graph *
 build_rdg (vec<loop_p> loop_nest, control_dependences *cd)
 {
   struct graph *rdg;
-  vec<gimple> stmts;
   vec<data_reference_p> datarefs;
 
   /* Create the RDG vertices from the stmts of the loop nest.  */
-  stmts.create (10);
+  stack_vec<gimple, 10> stmts;
   stmts_from_loop (loop_nest[0], &stmts);
   rdg = new_graph (stmts.length ());
   datarefs.create (10);
   if (!create_rdg_vertices (rdg, stmts, loop_nest[0], &datarefs))
     {
-      stmts.release ();
       datarefs.release ();
       free_rdg (rdg);
       return NULL;
@@ -951,11 +949,10 @@ static partition_t
 build_rdg_partition_for_vertex (struct graph *rdg, int v)
 {
   partition_t partition = partition_alloc (NULL, NULL);
-  vec<int> nodes;
+  stack_vec<int, 3> nodes;
   unsigned i;
   int x;
 
-  nodes.create (3);
   graphds_dfs (rdg, &v, 1, &nodes, false, NULL);
 
   FOR_EACH_VEC_ELT (nodes, i, x)
@@ -965,7 +962,6 @@ build_rdg_partition_for_vertex (struct graph *rdg, int v)
                      loop_containing_stmt (RDG_STMT (rdg, x))->num);
     }
 
-  nodes.release ();
   return partition;
 }
 
@@ -1388,7 +1384,6 @@ distribute_loop (struct loop *loop, vec<gimple> stmts,
                 control_dependences *cd, int *nb_calls)
 {
   struct graph *rdg;
-  vec<loop_p> loop_nest;
   vec<partition_t> partitions;
   partition_t partition;
   bool any_builtin;
@@ -1397,12 +1392,9 @@ distribute_loop (struct loop *loop, vec<gimple> stmts,
   int num_sccs = 1;
 
   *nb_calls = 0;
-  loop_nest.create (3);
+  stack_vec<loop_p, 3> loop_nest;
   if (!find_loop_nest (loop, &loop_nest))
-    {
-      loop_nest.release ();
-      return 0;
-    }
+    return 0;
 
   rdg = build_rdg (loop_nest, cd);
   if (!rdg)
@@ -1412,7 +1404,6 @@ distribute_loop (struct loop *loop, vec<gimple> stmts,
                 "Loop %d not distributed: failed to build the RDG.\n",
                 loop->num);
 
-      loop_nest.release ();
       return 0;
     }
 
@@ -1648,7 +1639,6 @@ distribute_loop (struct loop *loop, vec<gimple> stmts,
   partitions.release ();
 
   free_rdg (rdg);
-  loop_nest.release ();
   return nbp - *nb_calls;
 }
 
index b843fe5abec987defe32be6e6024b4da3b0de641..25a0f0ac52b2a9cce5debf7274bf8318ac87bd5d 100644 (file)
@@ -395,7 +395,6 @@ lambda_transform_legal_p (lambda_trans_matrix trans,
 static bool
 loop_parallel_p (struct loop *loop, struct obstack * parloop_obstack)
 {
-  vec<loop_p> loop_nest;
   vec<ddr_p> dependence_relations;
   vec<data_reference_p> datarefs;
   lambda_trans_matrix trans;
@@ -412,9 +411,9 @@ loop_parallel_p (struct loop *loop, struct obstack * parloop_obstack)
 
   /* Check for problems with dependences.  If the loop can be reversed,
      the iterations are independent.  */
+  stack_vec<loop_p, 3> loop_nest;
   datarefs.create (10);
-  dependence_relations.create (10 * 10);
-  loop_nest.create (3);
+  dependence_relations.create (100);
   if (! compute_data_dependences_for_loop (loop, true, &loop_nest, &datarefs,
                                           &dependence_relations))
     {
@@ -440,7 +439,6 @@ loop_parallel_p (struct loop *loop, struct obstack * parloop_obstack)
             "  FAILED: data dependencies exist across iterations\n");
 
  end:
-  loop_nest.release ();
   free_dependence_relations (dependence_relations);
   free_data_refs (datarefs);
 
@@ -741,8 +739,7 @@ static void
 eliminate_local_variables (edge entry, edge exit)
 {
   basic_block bb;
-  vec<basic_block> body;
-  body.create (3);
+  stack_vec<basic_block, 3> body;
   unsigned i;
   gimple_stmt_iterator gsi;
   bool has_debug_stmt = false;
@@ -772,7 +769,6 @@ eliminate_local_variables (edge entry, edge exit)
            eliminate_local_variables_stmt (entry, &gsi, decl_address);
 
   decl_address.dispose ();
-  body.release ();
 }
 
 /* Returns true if expression EXPR is not defined between ENTRY and
@@ -1297,8 +1293,7 @@ separate_decls_in_region (edge entry, edge exit,
   tree type, type_name, nvar;
   gimple_stmt_iterator gsi;
   struct clsn_data clsn_data;
-  vec<basic_block> body;
-  body.create (3);
+  stack_vec<basic_block, 3> body;
   basic_block bb;
   basic_block entry_bb = bb1;
   basic_block exit_bb = exit->dest;
@@ -1356,8 +1351,6 @@ separate_decls_in_region (edge entry, edge exit,
            }
        }
 
-  body.release ();
-
   if (name_copies.elements () == 0 && reduction_list.elements () == 0)
     {
       /* It may happen that there is nothing to copy (if there are only
index 4eead11ae7359325f41e17fdea11b38e07a2accf..1005e783d0bf09700e4901750164128406cd1ee7 100644 (file)
@@ -2421,7 +2421,6 @@ prepare_initializers (struct loop *loop, vec<chain_p> chains)
 static bool
 tree_predictive_commoning_loop (struct loop *loop)
 {
-  vec<loop_p> loop_nest;
   vec<data_reference_p> datarefs;
   vec<ddr_p> dependences;
   struct component *components;
@@ -2437,15 +2436,14 @@ tree_predictive_commoning_loop (struct loop *loop)
 
   /* Find the data references and split them into components according to their
      dependence relations.  */
-  datarefs.create (10);
+  stack_vec<loop_p, 3> loop_nest;
   dependences.create (10);
-  loop_nest.create (3);
+  datarefs.create (10);
   if (! compute_data_dependences_for_loop (loop, true, &loop_nest, &datarefs,
                                           &dependences))
     {
       if (dump_file && (dump_flags & TDF_DETAILS))
        fprintf (dump_file, "Cannot analyze data dependencies\n");
-      loop_nest.release ();
       free_data_refs (datarefs);
       free_dependence_relations (dependences);
       return false;
index 87aa28cbffff0dd9a4e1f663308767c5d220c6c9..ef114a01a6dd8438b1b67d08d6c2e5e8177b84b4 100644 (file)
@@ -1680,7 +1680,6 @@ cond_if_else_store_replacement (basic_block then_bb, basic_block else_bb,
   data_reference_p then_dr, else_dr;
   int i, j;
   tree then_lhs, else_lhs;
-  vec<gimple> then_stores, else_stores;
   basic_block blocks[3];
 
   if (MAX_STORES_TO_SINK == 0)
@@ -1707,8 +1706,7 @@ cond_if_else_store_replacement (basic_block then_bb, basic_block else_bb,
     }
 
   /* Find pairs of stores with equal LHS.  */
-  then_stores.create (1);
-  else_stores.create (1);
+  stack_vec<gimple, 1> then_stores, else_stores;
   FOR_EACH_VEC_ELT (then_datarefs, i, then_dr)
     {
       if (DR_IS_READ (then_dr))
@@ -1746,8 +1744,6 @@ cond_if_else_store_replacement (basic_block then_bb, basic_block else_bb,
     {
       free_data_refs (then_datarefs);
       free_data_refs (else_datarefs);
-      then_stores.release ();
-      else_stores.release ();
       return false;
     }
 
@@ -1763,8 +1759,6 @@ cond_if_else_store_replacement (basic_block then_bb, basic_block else_bb,
       free_dependence_relations (else_ddrs);
       free_data_refs (then_datarefs);
       free_data_refs (else_datarefs);
-      then_stores.release ();
-      else_stores.release ();
       return false;
     }
   blocks[0] = then_bb;
@@ -1790,8 +1784,6 @@ cond_if_else_store_replacement (basic_block then_bb, basic_block else_bb,
           free_dependence_relations (else_ddrs);
          free_data_refs (then_datarefs);
          free_data_refs (else_datarefs);
-          then_stores.release ();
-          else_stores.release ();
           return false;
         }
     }
@@ -1814,8 +1806,6 @@ cond_if_else_store_replacement (basic_block then_bb, basic_block else_bb,
           free_dependence_relations (else_ddrs);
          free_data_refs (then_datarefs);
          free_data_refs (else_datarefs);
-          then_stores.release ();
-          else_stores.release ();
           return false;
         }
     }
@@ -1833,8 +1823,6 @@ cond_if_else_store_replacement (basic_block then_bb, basic_block else_bb,
   free_dependence_relations (else_ddrs);
   free_data_refs (then_datarefs);
   free_data_refs (else_datarefs);
-  then_stores.release ();
-  else_stores.release ();
 
   return ok;
 }
index 71c1f5d395d57251db6162df6e8f4571239f7db9..5255d7fb73829b4dfc8601e38da7799fa46ac1da 100644 (file)
@@ -361,15 +361,7 @@ record_equiv (tree value, tree equivalence)
 class uncprop_dom_walker : public dom_walker
 {
 public:
-  uncprop_dom_walker (cdi_direction direction)
-    : dom_walker (direction)
-  {
-    m_equiv_stack.create (2);
-  }
-  ~uncprop_dom_walker ()
-  {
-    m_equiv_stack.release ();
-  }
+  uncprop_dom_walker (cdi_direction direction) : dom_walker (direction) {}
 
   virtual void before_dom_children (basic_block);
   virtual void after_dom_children (basic_block);
@@ -380,7 +372,7 @@ private:
      leading to this block.  If no such edge equivalency exists, then we
      record NULL.  These equivalences are live until we leave the dominator
      subtree rooted at the block where we record the equivalency.  */
-  vec<tree> m_equiv_stack;
+  stack_vec<tree, 2> m_equiv_stack;
 };
 
 /* Main driver for un-cprop.  */
index 1da87c7201e6f55dd0ff1349ab67bb62d292b937..d5f86ad00a7f6a7a72a458b1b82b1ce4d22a6551 100644 (file)
@@ -591,8 +591,7 @@ vect_analyze_scalar_cycles_1 (loop_vec_info loop_vinfo, struct loop *loop)
 {
   basic_block bb = loop->header;
   tree init, step;
-  vec<gimple> worklist;
-  worklist.create (64);
+  stack_vec<gimple, 64> worklist;
   gimple_stmt_iterator gsi;
   bool double_reduc;
 
@@ -723,8 +722,6 @@ vect_analyze_scalar_cycles_1 (loop_vec_info loop_vinfo, struct loop *loop)
           dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
                           "Unknown def-use cycle pattern.\n");
     }
-
-  worklist.release ();
 }
 
 
index 8d9aaa2303e48192b4f085544902a683a66e4426..099880488bc41587c467f8aa1b354eb3b9d0f590 100644 (file)
@@ -3207,8 +3207,7 @@ vect_pattern_recog (loop_vec_info loop_vinfo, bb_vec_info bb_vinfo)
   gimple_stmt_iterator si;
   unsigned int i, j;
   vect_recog_func_ptr vect_recog_func;
-  vec<gimple> stmts_to_replace;
-  stmts_to_replace.create (1);
+  stack_vec<gimple, 1> stmts_to_replace;
   gimple stmt;
 
   if (dump_enabled_p ())
@@ -3248,6 +3247,4 @@ vect_pattern_recog (loop_vec_info loop_vinfo, bb_vec_info bb_vinfo)
             }
         }
     }
-
-  stmts_to_replace.release ();
 }
index 9516e76bda2c68c45891111db6519414008d7bb9..c1ba3c7eedb2e6bb3dbff34535bb8c4715f256d9 100644 (file)
@@ -580,7 +580,6 @@ process_use (gimple stmt, tree use, loop_vec_info loop_vinfo, bool live_p,
 bool
 vect_mark_stmts_to_be_vectorized (loop_vec_info loop_vinfo)
 {
-  vec<gimple> worklist;
   struct loop *loop = LOOP_VINFO_LOOP (loop_vinfo);
   basic_block *bbs = LOOP_VINFO_BBS (loop_vinfo);
   unsigned int nbbs = loop->num_nodes;
@@ -598,7 +597,7 @@ vect_mark_stmts_to_be_vectorized (loop_vec_info loop_vinfo)
     dump_printf_loc (MSG_NOTE, vect_location,
                      "=== vect_mark_stmts_to_be_vectorized ===\n");
 
-  worklist.create (64);
+  stack_vec<gimple, 64> worklist;
 
   /* 1. Init worklist.  */
   for (i = 0; i < nbbs; i++)
@@ -688,7 +687,6 @@ vect_mark_stmts_to_be_vectorized (loop_vec_info loop_vinfo)
                  if (dump_enabled_p ())
                    dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
                                      "unsupported use of reduction.\n");
-                 worklist.release ();
                  return false;
              }
 
@@ -704,7 +702,6 @@ vect_mark_stmts_to_be_vectorized (loop_vec_info loop_vinfo)
                   dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
                                    "unsupported use of nested cycle.\n");
 
-                worklist.release ();
                 return false;
               }
 
@@ -719,7 +716,6 @@ vect_mark_stmts_to_be_vectorized (loop_vec_info loop_vinfo)
                   dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
                                    "unsupported use of double reduction.\n");
 
-                worklist.release ();
                 return false;
               }
 
@@ -747,10 +743,7 @@ vect_mark_stmts_to_be_vectorized (loop_vec_info loop_vinfo)
                                    live_p, relevant, &worklist, false)
                      || !process_use (stmt, TREE_OPERAND (op, 1), loop_vinfo,
                                       live_p, relevant, &worklist, false))
-                   {
-                     worklist.release ();
-                     return false;
-                   }
+        return false;
                  i = 2;
                }
              for (; i < gimple_num_ops (stmt); i++)
@@ -758,10 +751,7 @@ vect_mark_stmts_to_be_vectorized (loop_vec_info loop_vinfo)
                  op = gimple_op (stmt, i);
                   if (!process_use (stmt, op, loop_vinfo, live_p, relevant,
                                    &worklist, false))
-                    {
-                      worklist.release ();
-                      return false;
-                    }
+                    return false;
                  }
             }
           else if (is_gimple_call (stmt))
@@ -771,10 +761,7 @@ vect_mark_stmts_to_be_vectorized (loop_vec_info loop_vinfo)
                   tree arg = gimple_call_arg (stmt, i);
                   if (!process_use (stmt, arg, loop_vinfo, live_p, relevant,
                                    &worklist, false))
-                    {
-                      worklist.release ();
-                      return false;
-                    }
+                    return false;
                 }
             }
         }
@@ -784,10 +771,7 @@ vect_mark_stmts_to_be_vectorized (loop_vec_info loop_vinfo)
             tree op = USE_FROM_PTR (use_p);
             if (!process_use (stmt, op, loop_vinfo, live_p, relevant,
                              &worklist, false))
-              {
-                worklist.release ();
-                return false;
-              }
+              return false;
           }
 
       if (STMT_VINFO_GATHER_P (stmt_vinfo))
@@ -797,14 +781,10 @@ vect_mark_stmts_to_be_vectorized (loop_vec_info loop_vinfo)
          gcc_assert (decl);
          if (!process_use (stmt, off, loop_vinfo, live_p, relevant,
                            &worklist, true))
-           {
-             worklist.release ();
-             return false;
-           }
+      return false;
        }
     } /* while worklist */
 
-  worklist.release ();
   return true;
 }
 
@@ -5552,11 +5532,9 @@ vectorizable_condition (gimple stmt, gimple_stmt_iterator *gsi,
        {
           if (slp_node)
             {
-              vec<tree> ops;
-             ops.create (4);
-             vec<vec<tree> > vec_defs;
+              stack_vec<tree, 4> ops;
+             stack_vec<vec<tree>, 4> vec_defs;
 
-             vec_defs.create (4);
               ops.safe_push (TREE_OPERAND (cond_expr, 0));
               ops.safe_push (TREE_OPERAND (cond_expr, 1));
               ops.safe_push (then_clause);