diff options
author | Ian Lance Taylor <iant@golang.org> | 2021-09-13 10:37:49 -0700 |
---|---|---|
committer | Ian Lance Taylor <iant@golang.org> | 2021-09-13 10:37:49 -0700 |
commit | e252b51ccde010cbd2a146485d8045103cd99533 (patch) | |
tree | e060f101cdc32bf5e520de8e5275db9d4236b74c /gcc/gimple-loop-jam.c | |
parent | f10c7c4596dda99d2ee872c995ae4aeda65adbdf (diff) | |
parent | 104c05c5284b7822d770ee51a7d91946c7e56d50 (diff) | |
download | gcc-e252b51ccde010cbd2a146485d8045103cd99533.zip gcc-e252b51ccde010cbd2a146485d8045103cd99533.tar.gz gcc-e252b51ccde010cbd2a146485d8045103cd99533.tar.bz2 |
Merge from trunk revision 104c05c5284b7822d770ee51a7d91946c7e56d50.
Diffstat (limited to 'gcc/gimple-loop-jam.c')
-rw-r--r-- | gcc/gimple-loop-jam.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/gcc/gimple-loop-jam.c b/gcc/gimple-loop-jam.c index 69dbaeb..d212e39 100644 --- a/gcc/gimple-loop-jam.c +++ b/gcc/gimple-loop-jam.c @@ -38,6 +38,7 @@ along with GCC; see the file COPYING3. If not see #include "tree-data-ref.h" #include "tree-ssa-loop-ivopts.h" #include "tree-vectorizer.h" +#include "tree-ssa-sccvn.h" /* Unroll and Jam transformation @@ -365,11 +366,9 @@ static bool any_access_function_variant_p (const struct data_reference *a, const class loop *loop_nest) { - unsigned int i; vec<tree> fns = DR_ACCESS_FNS (a); - tree t; - FOR_EACH_VEC_ELT (fns, i, t) + for (tree t : fns) if (!evolution_function_is_invariant_p (t, loop_nest->num)) return true; @@ -488,13 +487,12 @@ adjust_unroll_factor (class loop *inner, struct data_dependence_relation *ddr, static unsigned int tree_loop_unroll_and_jam (void) { - class loop *loop; - bool changed = false; + unsigned int todo = 0; gcc_assert (scev_initialized_p ()); /* Go through all innermost loops. */ - FOR_EACH_LOOP (loop, LI_ONLY_INNERMOST) + for (auto loop : loops_list (cfun, LI_ONLY_INNERMOST)) { class loop *outer = loop_outer (loop); @@ -593,7 +591,11 @@ tree_loop_unroll_and_jam (void) &desc); free_original_copy_tables (); fuse_loops (outer->inner); - changed = true; + todo |= TODO_cleanup_cfg; + + auto_bitmap exit_bbs; + bitmap_set_bit (exit_bbs, single_dom_exit (outer)->dest->index); + todo |= do_rpo_vn (cfun, loop_preheader_edge (outer), exit_bbs); } loop_nest.release (); @@ -601,13 +603,12 @@ tree_loop_unroll_and_jam (void) free_data_refs (datarefs); } - if (changed) + if (todo) { scev_reset (); free_dominance_info (CDI_DOMINATORS); - return TODO_cleanup_cfg; } - return 0; + return todo; } /* Pass boilerplate */ |