From fb1fe1f3cc3a65f3734c29b4a2280f93b76eb7cc Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Tue, 10 Oct 2017 13:26:15 +0000 Subject: [PATCH] tree-cfgcleanup.c (cleanup_tree_cfg_noloop): Avoid compacting blocks if SCEV is active. 2017-10-10 Richard Biener * tree-cfgcleanup.c (cleanup_tree_cfg_noloop): Avoid compacting blocks if SCEV is active. * tree-scalar-evolution.c (analyze_scalar_evolution_1): Remove dead code. (analyze_scalar_evolution): Handle cached evolutions the obvious way. (scev_initialize): Assert we are not yet initialized. From-SVN: r253585 --- gcc/ChangeLog | 9 +++++++++ gcc/tree-cfgcleanup.c | 6 +++++- gcc/tree-scalar-evolution.c | 23 +++++++++-------------- 3 files changed, 23 insertions(+), 15 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 01482824f71..f7f41ed3358 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2017-10-10 Richard Biener + + * tree-cfgcleanup.c (cleanup_tree_cfg_noloop): Avoid compacting + blocks if SCEV is active. + * tree-scalar-evolution.c (analyze_scalar_evolution_1): Remove + dead code. + (analyze_scalar_evolution): Handle cached evolutions the obvious way. + (scev_initialize): Assert we are not yet initialized. + 2017-10-10 Bin Cheng * tree-loop-distribution.c (generate_loops_for_partition): Remove diff --git a/gcc/tree-cfgcleanup.c b/gcc/tree-cfgcleanup.c index a7053d748c6..1a71c93aeed 100644 --- a/gcc/tree-cfgcleanup.c +++ b/gcc/tree-cfgcleanup.c @@ -892,7 +892,11 @@ cleanup_tree_cfg_noloop (void) changed |= cleanup_tree_cfg_1 (); gcc_assert (dom_info_available_p (CDI_DOMINATORS)); - compact_blocks (); + + /* Do not renumber blocks if the SCEV cache is active, it is indexed by + basic-block numbers. */ + if (! scev_initialized_p ()) + compact_blocks (); checking_verify_flow_info (); diff --git a/gcc/tree-scalar-evolution.c b/gcc/tree-scalar-evolution.c index 8459793a01b..cdf940a3874 100644 --- a/gcc/tree-scalar-evolution.c +++ b/gcc/tree-scalar-evolution.c @@ -281,7 +281,7 @@ along with GCC; see the file COPYING3. If not see #include "tree-ssa-propagate.h" #include "gimple-fold.h" -static tree analyze_scalar_evolution_1 (struct loop *, tree, tree); +static tree analyze_scalar_evolution_1 (struct loop *, tree); static tree analyze_scalar_evolution_for_address_of (struct loop *loop, tree var); @@ -2036,18 +2036,19 @@ compute_scalar_evolution_in_loop (struct loop *wrto_loop, if (no_evolution_in_loop_p (res, wrto_loop->num, &val) && val) return res; - return analyze_scalar_evolution_1 (wrto_loop, res, chrec_not_analyzed_yet); + return analyze_scalar_evolution_1 (wrto_loop, res); } /* Helper recursive function. */ static tree -analyze_scalar_evolution_1 (struct loop *loop, tree var, tree res) +analyze_scalar_evolution_1 (struct loop *loop, tree var) { tree type = TREE_TYPE (var); gimple *def; basic_block bb; struct loop *def_loop; + tree res; if (loop == NULL || TREE_CODE (type) == VECTOR_TYPE @@ -2069,18 +2070,9 @@ analyze_scalar_evolution_1 (struct loop *loop, tree var, tree res) goto set_and_end; } - if (res != chrec_not_analyzed_yet) - { - if (loop != bb->loop_father) - res = compute_scalar_evolution_in_loop - (find_common_loop (loop, bb->loop_father), bb->loop_father, res); - - goto set_and_end; - } - if (loop != def_loop) { - res = analyze_scalar_evolution_1 (def_loop, var, chrec_not_analyzed_yet); + res = analyze_scalar_evolution_1 (def_loop, var); res = compute_scalar_evolution_in_loop (loop, def_loop, res); goto set_and_end; @@ -2144,7 +2136,8 @@ analyze_scalar_evolution (struct loop *loop, tree var) } res = get_scalar_evolution (block_before_loop (loop), var); - res = analyze_scalar_evolution_1 (loop, var, res); + if (res == chrec_not_analyzed_yet) + res = analyze_scalar_evolution_1 (loop, var); if (dump_file && (dump_flags & TDF_SCEV)) fprintf (dump_file, ")\n"); @@ -3264,6 +3257,8 @@ scev_initialize (void) { struct loop *loop; + gcc_assert (! scev_initialized_p ()); + scalar_evolution_info = hash_table::create_ggc (100); initialize_scalar_evolutions_analyzer (); -- 2.30.2