aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-loop-ivcanon.c
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2020-08-06 14:50:56 +0200
committerRichard Biener <rguenther@suse.de>2020-09-24 15:59:19 +0200
commit4b9d61f79c0c0185a33048ae6cc72269cf7efa31 (patch)
treef62956faf4f9fa1e7b25d44bee91258c462842fd /gcc/tree-ssa-loop-ivcanon.c
parent2e66e53b1efb98f5cf6b0a123990c1ca999affd7 (diff)
downloadgcc-4b9d61f79c0c0185a33048ae6cc72269cf7efa31.zip
gcc-4b9d61f79c0c0185a33048ae6cc72269cf7efa31.tar.gz
gcc-4b9d61f79c0c0185a33048ae6cc72269cf7efa31.tar.bz2
add move CTOR to auto_vec, use auto_vec for get_loop_exit_edges
This adds a move CTOR to auto_vec<T, 0> and makes use of a auto_vec<edge> return value for get_loop_exit_edges denoting that lifetime management of the vector is handed to the caller. The move CTOR prompted the hash_table change because it appearantly makes the copy CTOR implicitely deleted (good) and hash-table expansion of the odr_enum_map which is hash_map <nofree_string_hash, odr_enum> where odr_enum has an auto_vec<odr_enum_val, 0> member triggers this. Not sure if there's a latent bug there before this (I think we're not invoking DTORs, but we're invoking copy-CTORs). 2020-08-06 Richard Biener <rguenther@suse.de> * vec.h (auto_vec<T, 0>::auto_vec (auto_vec &&)): New move CTOR. (auto_vec<T, 0>::operator=(auto_vec &&)): Delete. * hash-table.h (hash_table::expand): Use std::move when expanding. * cfgloop.h (get_loop_exit_edges): Return auto_vec<edge>. * cfgloop.c (get_loop_exit_edges): Adjust. * cfgloopmanip.c (fix_loop_placement): Likewise. * ipa-fnsummary.c (analyze_function_body): Likewise. * ira-build.c (create_loop_tree_nodes): Likewise. (create_loop_tree_node_allocnos): Likewise. (loop_with_complex_edge_p): Likewise. * ira-color.c (ira_loop_edge_freq): Likewise. * loop-unroll.c (analyze_insns_in_loop): Likewise. * predict.c (predict_loops): Likewise. * tree-predcom.c (last_always_executed_block): Likewise. * tree-ssa-loop-ch.c (ch_base::copy_headers): Likewise. * tree-ssa-loop-im.c (store_motion_loop): Likewise. * tree-ssa-loop-ivcanon.c (loop_edge_to_cancel): Likewise. (canonicalize_loop_induction_variables): Likewise. * tree-ssa-loop-manip.c (get_loops_exits): Likewise. * tree-ssa-loop-niter.c (find_loop_niter): Likewise. (finite_loop_p): Likewise. (find_loop_niter_by_eval): Likewise. (estimate_numbers_of_iterations): Likewise. * tree-ssa-loop-prefetch.c (emit_mfence_after_loop): Likewise. (may_use_storent_in_loop_p): Likewise.
Diffstat (limited to 'gcc/tree-ssa-loop-ivcanon.c')
-rw-r--r--gcc/tree-ssa-loop-ivcanon.c9
1 files changed, 2 insertions, 7 deletions
diff --git a/gcc/tree-ssa-loop-ivcanon.c b/gcc/tree-ssa-loop-ivcanon.c
index 298ab21..5bb781d 100644
--- a/gcc/tree-ssa-loop-ivcanon.c
+++ b/gcc/tree-ssa-loop-ivcanon.c
@@ -444,7 +444,6 @@ estimated_unrolled_size (struct loop_size *size,
static edge
loop_edge_to_cancel (class loop *loop)
{
- vec<edge> exits;
unsigned i;
edge edge_to_cancel;
gimple_stmt_iterator gsi;
@@ -453,7 +452,7 @@ loop_edge_to_cancel (class loop *loop)
if (EDGE_COUNT (loop->latch->preds) > 1)
return NULL;
- exits = get_loop_exit_edges (loop);
+ auto_vec<edge> exits = get_loop_exit_edges (loop);
FOR_EACH_VEC_ELT (exits, i, edge_to_cancel)
{
@@ -477,8 +476,6 @@ loop_edge_to_cancel (class loop *loop)
if (edge_to_cancel->dest != loop->latch)
continue;
- exits.release ();
-
/* Verify that the code in loop latch does nothing that may end program
execution without really reaching the exit. This may include
non-pure/const function calls, EH statements, volatile ASMs etc. */
@@ -487,7 +484,6 @@ loop_edge_to_cancel (class loop *loop)
return NULL;
return edge_to_cancel;
}
- exits.release ();
return NULL;
}
@@ -1222,10 +1218,9 @@ canonicalize_loop_induction_variables (class loop *loop,
by find_loop_niter_by_eval. Be sure to keep it for future. */
if (niter && TREE_CODE (niter) == INTEGER_CST)
{
- vec<edge> exits = get_loop_exit_edges (loop);
+ auto_vec<edge> exits = get_loop_exit_edges (loop);
record_niter_bound (loop, wi::to_widest (niter),
exit == single_likely_exit (loop, exits), true);
- exits.release ();
}
/* Force re-computation of loop bounds so we can remove redundant exits. */