diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c7a8c254fb854dd4727bbe3901a2cd6e104b02f2..c6f01720c61a0d34214b0ad30ae5f0af5e9fc53c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,17 @@ +2013-12-20 Trevor saunders <tsaunders@mozilla.com> + + * vec.h (stack_vec): Convert to a templaate specialization of + auto_vec. + * config/i386/i386.c, df-scan.c, function.c, genautomata.c, + gimplify.c, graphite-clast-to-gimple.c, graphite-dependences.c, + graphite-scop-detection.c, graphite-sese-to-poly.c, hw-doloop.c, + trans-mem.c, tree-call-cdce.c, tree-data-ref.c, tree-dfa.c, + tree-if-conv.c, tree-inline.c, tree-loop-distribution.c, + tree-parloops.c, tree-predcom.c, tree-ssa-alias.c, + tree-ssa-loop-ivcanon.c, tree-ssa-phiopt.c, tree-ssa-threadedge.c, + tree-ssa-uncprop.c, tree-vect-loop.c, tree-vect-patterns.c, + tree-vect-slp.c, tree-vect-stmts.c, var-tracking.c: Adjust. + 2013-12-20 Eric Botcazou <ebotcazou@adacore.com> * config/arm/arm.c (arm_expand_prologue): In a nested APCS frame with diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 47279366d82f4c98c87dd6a7ce939c511d16aab2..8c5ee48dbf7a52331c2ebcf6f5f4b2bd647c6a06 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,8 @@ +2013-12-20 Trevor saunders <tsaunders@mozilla.com> + + * gcc-interface/decl.c (components_to_record): Replace stack_vec with + auto_vec. + 2013-12-12 Eric Botcazou <ebotcazou@adacore.com> * gcc-interface/Makefile.in (ARM linux, GNU eabi): Tweak regexp. diff --git a/gcc/ada/gcc-interface/decl.c b/gcc/ada/gcc-interface/decl.c index a80d1a9c0afafbc59bd5243184258c3e4b2d15be..ad129c6803c19f129efbbefbd18eadc00609e8d8 100644 --- a/gcc/ada/gcc-interface/decl.c +++ b/gcc/ada/gcc-interface/decl.c @@ -7010,7 +7010,7 @@ components_to_record (tree gnu_record_type, Node_Id gnat_component_list, tree gnu_union_type, gnu_union_name; tree this_first_free_pos, gnu_variant_list = NULL_TREE; bool union_field_needs_strict_alignment = false; - stack_vec <vinfo_t, 16> variant_types; + auto_vec <vinfo_t, 16> variant_types; vinfo_t *gnu_variant; unsigned int variants_align = 0; unsigned int i; diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 1710e8c8e38b8c3f0da599163af7d9ab55c71438..0034d3338df2e779ce80fcd0d8ccf6fcb836c035 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -30821,7 +30821,7 @@ ix86_generate_version_dispatcher_body (void *node_p) push_cfun (DECL_STRUCT_FUNCTION (resolver_decl)); - stack_vec<tree, 2> fn_ver_vec; + auto_vec<tree, 2> fn_ver_vec; for (versn_info = node_version_info->next; versn_info; versn_info = versn_info->next) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 96bc0d9e8855643ac6fadbd3b45b7d3cd0584db5..98022633e0f35847ae2fa88b9c09bd2d18a249b7 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2013-12-20 Trevor saunders <tsaunders@mozilla.com> + + * semantics.c (build_anon_member_initialization): Replace + stack_vec<T, N> with auto_vec<T, N>. + 2013-12-18 Balaji V. Iyer <balaji.v.iyer@intel.com> * parser.c (cp_parser_cilk_simd_clause_name): Changed cilk_clause_name diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 63f50fb47052886ef1267d6150d6cfffe340ae64..c08d53f48985b389705f1dca62ba8d0b082f836d 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -7439,7 +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. */ - stack_vec<tree, 2> fields; + auto_vec<tree, 2> fields; do { fields.safe_push (TREE_OPERAND (member, 1)); diff --git a/gcc/df-scan.c b/gcc/df-scan.c index a35b12fbebba710e342ed16f7e3949b417697520..a7272ce88c58aa83d5970e05a4cb57383cb51091 100644 --- a/gcc/df-scan.c +++ b/gcc/df-scan.c @@ -86,10 +86,10 @@ static HARD_REG_SET elim_reg_set; struct df_collection_rec { - stack_vec<df_ref, 128> def_vec; - stack_vec<df_ref, 32> use_vec; - stack_vec<df_ref, 32> eq_use_vec; - stack_vec<df_mw_hardreg_ptr, 32> mw_vec; + auto_vec<df_ref, 128> def_vec; + auto_vec<df_ref, 32> use_vec; + auto_vec<df_ref, 32> eq_use_vec; + auto_vec<df_mw_hardreg_ptr, 32> mw_vec; }; static df_ref df_null_ref_rec[1]; diff --git a/gcc/function.c b/gcc/function.c index e2d0e233e80960f15288e6d7ad58eb54286317b3..13e98773eb6329df666eb324181d13f0fd3436de 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -4114,7 +4114,7 @@ reorder_blocks (void) if (block == NULL_TREE) return; - stack_vec<tree, 10> block_stack; + auto_vec<tree, 10> block_stack; /* Reset the TREE_ASM_WRITTEN bit for all blocks. */ clear_block_marks (block); diff --git a/gcc/genautomata.c b/gcc/genautomata.c index 372ba90efc8d30dc7efff37fcab5dc5f6a0a12df..a66a21920a3653186fc7aad38efc2e32f783bd21 100644 --- a/gcc/genautomata.c +++ b/gcc/genautomata.c @@ -3349,7 +3349,7 @@ uniq_sort_alt_states (alt_state_t alt_states_list) if (alt_states_list->next_alt_state == 0) return alt_states_list; - stack_vec<alt_state_t, 150> alt_states; + auto_vec<alt_state_t, 150> alt_states; for (curr_alt_state = alt_states_list; curr_alt_state != NULL; curr_alt_state = curr_alt_state->next_alt_state) @@ -5484,7 +5484,7 @@ form_ainsn_with_same_reservs (automaton_t automaton) { ainsn_t curr_ainsn; size_t i; - stack_vec<ainsn_t, 150> last_insns; + auto_vec<ainsn_t, 150> last_insns; for (curr_ainsn = automaton->ainsn_list; curr_ainsn != NULL; @@ -5555,7 +5555,7 @@ make_automaton (automaton_t automaton) state_t state; state_t start_state; state_t state2; - stack_vec<state_t, 150> state_stack; + auto_vec<state_t, 150> state_stack; int states_n; reserv_sets_t reservs_matter = form_reservs_matter (automaton); diff --git a/gcc/gimplify.c b/gcc/gimplify.c index 1ca847ac7597b9ced2ed2014d2638a78aa9b5df2..1ca4ad1bb33ca2e41dede662d32df3bfbde0b2da 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -1846,7 +1846,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. */ - stack_vec<tree, 10> expr_stack; + auto_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)) diff --git a/gcc/graphite-clast-to-gimple.c b/gcc/graphite-clast-to-gimple.c index 038c4f2abb2f569167a5161e4d7d5dcfb47b9b4e..2b9e743e730008891a1f14357dfdf01f9db7889c 100644 --- a/gcc/graphite-clast-to-gimple.c +++ b/gcc/graphite-clast-to-gimple.c @@ -1659,7 +1659,7 @@ debug_generated_program (scop_p scop) bool gloog (scop_p scop, bb_pbb_htab_type bb_pbb_mapping) { - stack_vec<tree, 10> newivs; + auto_vec<tree, 10> newivs; loop_p context_loop; sese region = SCOP_REGION (scop); ifsese if_region = NULL; diff --git a/gcc/graphite-dependences.c b/gcc/graphite-dependences.c index c0d769c7dd64a95ee00a79001e944dc3a265c470..f16cb938b3dd658f2b1299100c69b990c23f9ae3 100644 --- a/gcc/graphite-dependences.c +++ b/gcc/graphite-dependences.c @@ -593,7 +593,7 @@ loop_is_parallel_p (loop_p loop, bb_pbb_htab_type bb_pbb_mapping, int depth) scop_p scop; timevar_push (TV_GRAPHITE_DATA_DEPS); - stack_vec<poly_bb_p, 3> body; + auto_vec<poly_bb_p, 3> body; scop = get_loop_body_pbbs (loop, bb_pbb_mapping, &body); dependences = loop_level_carries_dependences (scop, body, depth); timevar_pop (TV_GRAPHITE_DATA_DEPS); diff --git a/gcc/graphite-scop-detection.c b/gcc/graphite-scop-detection.c index fea15e55abe95e41b30ae3ab567dfc2447020b66..0722ab8bbbff0e34ec004747525350f59326f084 100644 --- a/gcc/graphite-scop-detection.c +++ b/gcc/graphite-scop-detection.c @@ -481,7 +481,7 @@ scopdet_basic_block_info (basic_block bb, loop_p outermost_loop, case GBB_LOOP_SING_EXIT_HEADER: { - stack_vec<sd_region, 3> regions; + auto_vec<sd_region, 3> regions; struct scopdet_info sinfo; edge exit_e = single_exit (loop); @@ -546,7 +546,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. */ - stack_vec<sd_region, 3> regions; + auto_vec<sd_region, 3> regions; vec<edge> exits = get_loop_exit_edges (loop); edge e; int i; @@ -589,7 +589,7 @@ scopdet_basic_block_info (basic_block bb, loop_p outermost_loop, } case GBB_COND_HEADER: { - stack_vec<sd_region, 3> regions; + auto_vec<sd_region, 3> regions; struct scopdet_info sinfo; vec<basic_block> dominated; int i; @@ -1192,7 +1192,7 @@ print_graphite_statistics (FILE* file, vec<scop_p> scops) static void limit_scops (vec<scop_p> *scops) { - stack_vec<sd_region, 3> regions; + auto_vec<sd_region, 3> regions; int i; scop_p scop; @@ -1404,7 +1404,7 @@ void build_scops (vec<scop_p> *scops) { struct loop *loop = current_loops->tree_root; - stack_vec<sd_region, 3> regions; + auto_vec<sd_region, 3> regions; canonicalize_loop_closed_ssa_form (); build_scops_1 (single_succ (ENTRY_BLOCK_PTR_FOR_FN (cfun)), @@ -1595,7 +1595,7 @@ dot_all_scops (vec<scop_p> scops) DEBUG_FUNCTION void dot_scop (scop_p scop) { - stack_vec<scop_p, 1> scops; + auto_vec<scop_p, 1> scops; if (scop) scops.safe_push (scop); diff --git a/gcc/graphite-sese-to-poly.c b/gcc/graphite-sese-to-poly.c index 66c1b6ef95e3a90068c45aac9a7050d268503d07..1f54eb9816f8451243db95bc3841c8f7f89210b6 100644 --- a/gcc/graphite-sese-to-poly.c +++ b/gcc/graphite-sese-to-poly.c @@ -1245,7 +1245,7 @@ public: virtual void after_dom_children (basic_block); private: - stack_vec<gimple, 3> m_conditions, m_cases; + auto_vec<gimple, 3> m_conditions, m_cases; sese m_region; }; @@ -1890,7 +1890,7 @@ build_scop_drs (scop_p scop) int i, j; poly_bb_p pbb; data_reference_p dr; - stack_vec<data_reference_p, 3> drs; + auto_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. */ @@ -1988,7 +1988,7 @@ insert_stmts (scop_p scop, gimple stmt, gimple_seq stmts, gimple_stmt_iterator insert_gsi) { gimple_stmt_iterator gsi; - stack_vec<gimple, 3> x; + auto_vec<gimple, 3> x; gimple_seq_add_stmt (&stmts, stmt); for (gsi = gsi_start (stmts); !gsi_end_p (gsi); gsi_next (&gsi)) @@ -2007,7 +2007,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); - stack_vec<gimple, 3> x; + auto_vec<gimple, 3> x; gimple_seq_add_stmt (&stmts, stmt); for (gsi = gsi_start (stmts); !gsi_end_p (gsi); gsi_next (&gsi)) @@ -2062,7 +2062,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; - stack_vec<gimple, 3> x; + auto_vec<gimple, 3> x; gimple_seq_add_stmt (&stmts, stmt); for (gsi = gsi_start (stmts); !gsi_end_p (gsi); gsi_next (&gsi)) @@ -2870,7 +2870,7 @@ remove_phi (gimple phi) tree def; use_operand_p use_p; gimple_stmt_iterator gsi; - stack_vec<gimple, 3> update; + auto_vec<gimple, 3> update; unsigned int i; gimple stmt; @@ -3028,8 +3028,8 @@ rewrite_commutative_reductions_out_of_ssa_close_phi (scop_p scop, gimple close_phi) { bool res; - stack_vec<gimple, 10> in; - stack_vec<gimple, 10> out; + auto_vec<gimple, 10> in; + auto_vec<gimple, 10> out; detect_commutative_reduction (scop, close_phi, &in, &out); res = in.length () > 1; diff --git a/gcc/hw-doloop.c b/gcc/hw-doloop.c index b6184a26d87f3e9333c1411c3ec358bfd42602af..4e67760cb8b5b39e44ca437ece21cdcfd9081e82 100644 --- a/gcc/hw-doloop.c +++ b/gcc/hw-doloop.c @@ -252,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; - stack_vec<basic_block, 20> works; + auto_vec<basic_block, 20> works; works.safe_push (loop->head); found_tail = false; diff --git a/gcc/trans-mem.c b/gcc/trans-mem.c index ba344887d91e13b0953c8ae94bbeaa57cdbf1ba1..941035bc0ba1788bf6dde9d2c815a8c70ed4f9ec 100644 --- a/gcc/trans-mem.c +++ b/gcc/trans-mem.c @@ -4532,7 +4532,7 @@ ipa_tm_scan_irr_function (struct cgraph_node *node, bool for_clone) calculate_dominance_info (CDI_DOMINATORS); d = get_cg_data (&node, true); - stack_vec<basic_block, 10> queue; + auto_vec<basic_block, 10> queue; new_irr = BITMAP_ALLOC (&tm_obstack); /* Scan each tm region, propagating irrevocable status through the tree. */ diff --git a/gcc/tree-call-cdce.c b/gcc/tree-call-cdce.c index 32d0d5a93a1b4ccd0d44cf6e47ca60103cf9e49c..5e59cad9958fb9acbab768ceaead5aaf3f731230 100644 --- a/gcc/tree-call-cdce.c +++ b/gcc/tree-call-cdce.c @@ -727,7 +727,7 @@ shrink_wrap_one_built_in_call (gimple bi_call) tree bi_call_label_decl; gimple bi_call_label; - stack_vec<gimple, 12> conds; + auto_vec<gimple, 12> conds; gen_shrink_wrap_conditions (bi_call, conds, &nconds); /* This can happen if the condition generator decides diff --git a/gcc/tree-data-ref.c b/gcc/tree-data-ref.c index 94c7917344a591a66325a1b503d990c34d164d03..03060201649dac8704e0e77ab2fe97d50d73daa1 100644 --- a/gcc/tree-data-ref.c +++ b/gcc/tree-data-ref.c @@ -4453,7 +4453,7 @@ find_data_references_in_stmt (struct loop *nest, gimple stmt, vec<data_reference_p> *datarefs) { unsigned i; - stack_vec<data_ref_loc, 2> references; + auto_vec<data_ref_loc, 2> references; data_ref_loc *ref; bool ret = true; data_reference_p dr; @@ -4483,7 +4483,7 @@ graphite_find_data_references_in_stmt (loop_p nest, loop_p loop, gimple stmt, vec<data_reference_p> *datarefs) { unsigned i; - stack_vec<data_ref_loc, 2> references; + auto_vec<data_ref_loc, 2> references; data_ref_loc *ref; bool ret = true; data_reference_p dr; diff --git a/gcc/tree-dfa.c b/gcc/tree-dfa.c index 302822c1f207ea06910a32cb632b6a8a1fa57b99..e014a719e5abd77227d790bf8f1036a1125a415c 100644 --- a/gcc/tree-dfa.c +++ b/gcc/tree-dfa.c @@ -737,7 +737,7 @@ dump_enumerated_decls (FILE *file, int flags) { basic_block bb; struct walk_stmt_info wi; - stack_vec<numbered_tree, 40> decl_list; + auto_vec<numbered_tree, 40> decl_list; memset (&wi, '\0', sizeof (wi)); wi.info = (void *) &decl_list; diff --git a/gcc/tree-if-conv.c b/gcc/tree-if-conv.c index 59404ec14e2f43a13f190c250acb1c6376b91de9..283f476be220e3e5a0384329e8497b308de154b4 100644 --- a/gcc/tree-if-conv.c +++ b/gcc/tree-if-conv.c @@ -1314,7 +1314,7 @@ if_convertible_loop_p (struct loop *loop, bool *any_mask_load_store) refs.create (5); ddrs.create (25); - stack_vec<loop_p, 3> loop_nest; + auto_vec<loop_p, 3> loop_nest; res = if_convertible_loop_p_1 (loop, &loop_nest, &refs, &ddrs, any_mask_load_store); diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c index 96a480593d46cbf203213f5a253eb9beb6447233..4f14e5e10b0919011ef9b217423a5648c8996af8 100644 --- a/gcc/tree-inline.c +++ b/gcc/tree-inline.c @@ -5240,7 +5240,7 @@ tree_function_versioning (tree old_decl, tree new_decl, unsigned i; struct ipa_replace_map *replace_info; basic_block old_entry_block, bb; - stack_vec<gimple, 10> init_stmts; + auto_vec<gimple, 10> init_stmts; tree vars = NULL_TREE; gcc_assert (TREE_CODE (old_decl) == FUNCTION_DECL diff --git a/gcc/tree-loop-distribution.c b/gcc/tree-loop-distribution.c index c16e51fb7c7f291cbb2f495354bdfc201f6f509b..c536162b5f9a0d257a63af0e5b00497022732775 100644 --- a/gcc/tree-loop-distribution.c +++ b/gcc/tree-loop-distribution.c @@ -448,7 +448,7 @@ build_rdg (vec<loop_p> loop_nest, control_dependences *cd) vec<data_reference_p> datarefs; /* Create the RDG vertices from the stmts of the loop nest. */ - stack_vec<gimple, 10> stmts; + auto_vec<gimple, 10> stmts; stmts_from_loop (loop_nest[0], &stmts); rdg = new_graph (stmts.length ()); datarefs.create (10); @@ -964,7 +964,7 @@ static partition_t build_rdg_partition_for_vertex (struct graph *rdg, int v) { partition_t partition = partition_alloc (NULL, NULL); - stack_vec<int, 3> nodes; + auto_vec<int, 3> nodes; unsigned i; int x; @@ -1418,7 +1418,7 @@ distribute_loop (struct loop *loop, vec<gimple> stmts, int num_sccs = 1; *nb_calls = 0; - stack_vec<loop_p, 3> loop_nest; + auto_vec<loop_p, 3> loop_nest; if (!find_loop_nest (loop, &loop_nest)) return 0; @@ -1436,7 +1436,7 @@ distribute_loop (struct loop *loop, vec<gimple> stmts, if (dump_file && (dump_flags & TDF_DETAILS)) dump_rdg (dump_file, rdg); - stack_vec<partition_t, 3> partitions; + auto_vec<partition_t, 3> partitions; rdg_build_partitions (rdg, stmts, &partitions); any_builtin = false; diff --git a/gcc/tree-parloops.c b/gcc/tree-parloops.c index a56145dbebe4545b26dabbafb376daac89c726e6..368a05e444119748515a2212f483b0d7f8103d19 100644 --- a/gcc/tree-parloops.c +++ b/gcc/tree-parloops.c @@ -424,7 +424,7 @@ 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; + auto_vec<loop_p, 3> loop_nest; datarefs.create (10); dependence_relations.create (100); if (! compute_data_dependences_for_loop (loop, true, &loop_nest, &datarefs, @@ -752,7 +752,7 @@ static void eliminate_local_variables (edge entry, edge exit) { basic_block bb; - stack_vec<basic_block, 3> body; + auto_vec<basic_block, 3> body; unsigned i; gimple_stmt_iterator gsi; bool has_debug_stmt = false; @@ -1303,7 +1303,7 @@ separate_decls_in_region (edge entry, edge exit, tree type, type_name, nvar; gimple_stmt_iterator gsi; struct clsn_data clsn_data; - stack_vec<basic_block, 3> body; + auto_vec<basic_block, 3> body; basic_block bb; basic_block entry_bb = bb1; basic_block exit_bb = exit->dest; diff --git a/gcc/tree-predcom.c b/gcc/tree-predcom.c index ea31302101fbeb1b8897e73dfb765bf15b75390d..4814281fd334454269bb5e0ee99ce18749d2c456 100644 --- a/gcc/tree-predcom.c +++ b/gcc/tree-predcom.c @@ -2398,7 +2398,7 @@ tree_predictive_commoning_loop (struct loop *loop) /* Find the data references and split them into components according to their dependence relations. */ - stack_vec<loop_p, 3> loop_nest; + auto_vec<loop_p, 3> loop_nest; dependences.create (10); datarefs.create (10); if (! compute_data_dependences_for_loop (loop, true, &loop_nest, &datarefs, diff --git a/gcc/tree-ssa-alias.c b/gcc/tree-ssa-alias.c index e412d72a2c2ae43beb05b5e0fc097923731b5a95..0fb4c447ab01ad77ab652c10c7721f11f8f9b21c 100644 --- a/gcc/tree-ssa-alias.c +++ b/gcc/tree-ssa-alias.c @@ -768,8 +768,8 @@ aliasing_component_refs_p (tree ref1, static bool nonoverlapping_component_refs_of_decl_p (tree ref1, tree ref2) { - stack_vec<tree, 16> component_refs1; - stack_vec<tree, 16> component_refs2; + auto_vec<tree, 16> component_refs1; + auto_vec<tree, 16> component_refs2; /* Create the stack of handled components for REF1. */ while (handled_component_p (ref1)) diff --git a/gcc/tree-ssa-loop-ivcanon.c b/gcc/tree-ssa-loop-ivcanon.c index fd4ac70821cc6880b74809141eb86cf1d858f8b9..2533971864af3fff740e8ad0bc01824f6732aa08 100644 --- a/gcc/tree-ssa-loop-ivcanon.c +++ b/gcc/tree-ssa-loop-ivcanon.c @@ -1171,7 +1171,7 @@ tree_unroll_loops_completely_1 (bool may_increase_size, bool unroll_outer, unsigned int tree_unroll_loops_completely (bool may_increase_size, bool unroll_outer) { - stack_vec<loop_p, 16> father_stack; + auto_vec<loop_p, 16> father_stack; bool changed; int iteration = 0; bool irred_invalidated = false; diff --git a/gcc/tree-ssa-phiopt.c b/gcc/tree-ssa-phiopt.c index b6bb7e9d906707b781c712ff5e0aab53e06c693d..390258f666bea14511069c9903f125a473a6811f 100644 --- a/gcc/tree-ssa-phiopt.c +++ b/gcc/tree-ssa-phiopt.c @@ -1874,7 +1874,7 @@ cond_if_else_store_replacement (basic_block then_bb, basic_block else_bb, } /* Find pairs of stores with equal LHS. */ - stack_vec<gimple, 1> then_stores, else_stores; + auto_vec<gimple, 1> then_stores, else_stores; FOR_EACH_VEC_ELT (then_datarefs, i, then_dr) { if (DR_IS_READ (then_dr)) diff --git a/gcc/tree-ssa-threadedge.c b/gcc/tree-ssa-threadedge.c index cb6accf08f4e6693ee15ad7a62c80d8764725f14..e2eb471cb4890f0404f8277e590ab17726ab6d2b 100644 --- a/gcc/tree-ssa-threadedge.c +++ b/gcc/tree-ssa-threadedge.c @@ -690,7 +690,7 @@ propagate_threaded_block_debug_into (basic_block dest, basic_block src) i++; } - stack_vec<tree, alloc_count> fewvars; + auto_vec<tree, alloc_count> fewvars; pointer_set_t *vars = NULL; /* If we're already starting with 3/4 of alloc_count, go for a diff --git a/gcc/tree-ssa-uncprop.c b/gcc/tree-ssa-uncprop.c index 63a2e10472cb55ad51361238b4731708c819531f..6318ec1911db391527d6c76b6df4075f86d4c1a9 100644 --- a/gcc/tree-ssa-uncprop.c +++ b/gcc/tree-ssa-uncprop.c @@ -380,7 +380,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. */ - stack_vec<tree, 2> m_equiv_stack; + auto_vec<tree, 2> m_equiv_stack; }; /* Main driver for un-cprop. */ diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c index fc377477648030c6a5e28895bbdfb62950551f6b..d13b1df85f9181b59590c1c582897a6bbf668186 100644 --- a/gcc/tree-vect-loop.c +++ b/gcc/tree-vect-loop.c @@ -621,7 +621,7 @@ vect_analyze_scalar_cycles_1 (loop_vec_info loop_vinfo, struct loop *loop) { basic_block bb = loop->header; tree init, step; - stack_vec<gimple, 64> worklist; + auto_vec<gimple, 64> worklist; gimple_stmt_iterator gsi; bool double_reduc; diff --git a/gcc/tree-vect-patterns.c b/gcc/tree-vect-patterns.c index 7823cc3932d4ae8ed4a161b2439f98eadd6bf4a2..d1f8123c7a5374fbb9d8cc540cf7af80b8db5ed0 100644 --- a/gcc/tree-vect-patterns.c +++ b/gcc/tree-vect-patterns.c @@ -3213,7 +3213,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; - stack_vec<gimple, 1> stmts_to_replace; + auto_vec<gimple, 1> stmts_to_replace; gimple stmt; if (dump_enabled_p ()) diff --git a/gcc/tree-vect-slp.c b/gcc/tree-vect-slp.c index 2387c0d9dfc39c9e7e395dfeb6c5238ca8510bb7..d1e179651657a715ea0c4b392f822bb5e0bb0bc5 100644 --- a/gcc/tree-vect-slp.c +++ b/gcc/tree-vect-slp.c @@ -2029,7 +2029,7 @@ vect_bb_vectorization_profitable_p (bb_vec_info bb_vinfo) /* Calculate scalar cost. */ FOR_EACH_VEC_ELT (slp_instances, i, instance) { - stack_vec<bool, 20> life; + auto_vec<bool, 20> life; life.safe_grow_cleared (SLP_INSTANCE_GROUP_SIZE (instance)); scalar_cost += vect_bb_slp_scalar_cost (BB_VINFO_BB (bb_vinfo), SLP_INSTANCE_TREE (instance), diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c index 3056c2ede0089068c9c3003ec36a3eef3b4de3af..18cf5630ca2ac5039efd5a94f2b628da03ad3313 100644 --- a/gcc/tree-vect-stmts.c +++ b/gcc/tree-vect-stmts.c @@ -629,7 +629,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"); - stack_vec<gimple, 64> worklist; + auto_vec<gimple, 64> worklist; /* 1. Init worklist. */ for (i = 0; i < nbbs; i++) @@ -6605,8 +6605,8 @@ vectorizable_condition (gimple stmt, gimple_stmt_iterator *gsi, { if (slp_node) { - stack_vec<tree, 4> ops; - stack_vec<vec<tree>, 4> vec_defs; + auto_vec<tree, 4> ops; + auto_vec<vec<tree>, 4> vec_defs; ops.safe_push (TREE_OPERAND (cond_expr, 0)); ops.safe_push (TREE_OPERAND (cond_expr, 1)); diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c index 8eb86bf4feb2b170f2e5c6cf2288385cfb12f746..b0d7922ce823e6dff0c094c55c8a8983cef1f45b 100644 --- a/gcc/var-tracking.c +++ b/gcc/var-tracking.c @@ -7931,7 +7931,7 @@ struct expand_loc_callback_data /* Stack of values and debug_exprs under expansion, and their children. */ - stack_vec<rtx, 4> expanding; + auto_vec<rtx, 4> expanding; /* Stack of values and debug_exprs whose expansion hit recursion cycles. They will have VALUE_RECURSED_INTO marked when added to @@ -7939,7 +7939,7 @@ struct expand_loc_callback_data resolves to a valid location. So, if the flag remains set at the end of the search, we know no valid location for this one can possibly exist. */ - stack_vec<rtx, 4> pending; + auto_vec<rtx, 4> pending; /* The maximum depth among the sub-expressions under expansion. Zero indicates no expansion so far. */ @@ -8886,7 +8886,7 @@ process_changed_values (variable_table_type htab) { int i, n; rtx val; - stack_vec<rtx, 20> changed_values_stack; + auto_vec<rtx, 20> changed_values_stack; /* Move values from changed_variables to changed_values_stack. */ changed_variables diff --git a/gcc/vec.h b/gcc/vec.h index 03455851b0fd64f9de9048c01c06adf4b679470e..afde351a79650a8746b93f16883c585836bfc758 100644 --- a/gcc/vec.h +++ b/gcc/vec.h @@ -1184,25 +1184,17 @@ public: }; -/* auto_vec is a sub class of vec whose storage is released when it is - destroyed. */ -template<typename T> +/* auto_vec is a subclass of vec that automatically manages creating and + releasing the internal vector. If N is non zero then it has N elements of + internal storage. The default is no internal storage, and you probably only + want to ask for internal storage for vectors on the stack because if the + size of the vector is larger than the internal storage that space is wasted. + */ +template<typename T, size_t N = 0> class auto_vec : public vec<T, va_heap> { public: - auto_vec () { this->m_vec = NULL; } - auto_vec (size_t n) { this->create (n); } - ~auto_vec () { this->release (); } -}; - -/* stack_vec is a subclass of vec containing N elements of internal storage. - You probably only want to allocate this on the stack because if the array - ends up being larger or much smaller than N it will be wasting space. */ -template<typename T, size_t N> -class stack_vec : public vec<T, va_heap> -{ -public: - stack_vec () + auto_vec () { m_header.m_alloc = N; m_header.m_has_auto_buf = 1; @@ -1210,7 +1202,7 @@ public: this->m_vec = reinterpret_cast<vec<T, va_heap, vl_embed> *> (&m_header); } - ~stack_vec () + ~auto_vec () { this->release (); } @@ -1222,6 +1214,17 @@ private: T m_data[N]; }; +/* auto_vec is a sub class of vec whose storage is released when it is + destroyed. */ +template<typename T> +class auto_vec<T, 0> : public vec<T, va_heap> +{ +public: + auto_vec () { this->m_vec = NULL; } + auto_vec (size_t n) { this->create (n); } + ~auto_vec () { this->release (); } +}; + /* Allocate heap memory for pointer V and create the internal vector with space for NELEMS elements. If NELEMS is 0, the internal @@ -1421,7 +1424,7 @@ vec<T, va_heap, vl_ptr>::release (void) if (using_auto_storage ()) { - static_cast<stack_vec<T, 1> *> (this)->m_header.m_num = 0; + static_cast<auto_vec<T, 1> *> (this)->m_header.m_num = 0; return; } @@ -1654,7 +1657,7 @@ vec<T, va_heap, vl_ptr>::using_auto_storage () const return false; const vec_prefix *auto_header - = &static_cast<const stack_vec<T, 1> *> (this)->m_header; + = &static_cast<const auto_vec<T, 1> *> (this)->m_header; return reinterpret_cast<vec_prefix *> (m_vec) == auto_header; }