merge auto_vec and stack_vec
From-SVN: r206155
This commit is contained in:
parent
ede34dfceb
commit
00f96dc9a9
35 changed files with 105 additions and 78 deletions
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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];
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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. */
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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. */
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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 ())
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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
|
||||
|
|
41
gcc/vec.h
41
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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue