aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-loop.c
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2018-11-05 11:11:04 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2018-11-05 11:11:04 +0000
commit4cc31a3c4ee108d960eb003129f05d5950f08355 (patch)
treea705d138f11930f3ce3c457f5d7b8970061fcd68 /gcc/tree-ssa-loop.c
parent18e0c3d1718157761e3f23ddc33ae22393bef15f (diff)
downloadgcc-4cc31a3c4ee108d960eb003129f05d5950f08355.zip
gcc-4cc31a3c4ee108d960eb003129f05d5950f08355.tar.gz
gcc-4cc31a3c4ee108d960eb003129f05d5950f08355.tar.bz2
tree-scalar-evolution.h (final_value_replacement_loop): Update prototype.
2018-11-05 Richard Biener <rguenther@suse.de> * tree-scalar-evolution.h (final_value_replacement_loop): Update prototype. * tree-scalar-evolution.c (final_value_replacement_loop): Return whether anything was done. (scev_const_prop): Remove constant propagation part, fold remains into ... * tree-ssa-loop.c (pass_scev_cprop::execute): ... here. (pass_data_scev_cprop): TODO_cleanup_cfg is now done conditionally. * gcc.dg/pr41488.c: Scan ivcanon dump instead of sccp one. * gcc.dg/tree-ssa/scev-7.c: Likewise. From-SVN: r265795
Diffstat (limited to 'gcc/tree-ssa-loop.c')
-rw-r--r--gcc/tree-ssa-loop.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/gcc/tree-ssa-loop.c b/gcc/tree-ssa-loop.c
index b2a7d18..7771a0d 100644
--- a/gcc/tree-ssa-loop.c
+++ b/gcc/tree-ssa-loop.c
@@ -436,8 +436,7 @@ const pass_data pass_data_scev_cprop =
0, /* properties_provided */
0, /* properties_destroyed */
0, /* todo_flags_start */
- ( TODO_cleanup_cfg
- | TODO_update_ssa_only_virtuals ), /* todo_flags_finish */
+ 0, /* todo_flags_finish */
};
class pass_scev_cprop : public gimple_opt_pass
@@ -449,10 +448,24 @@ public:
/* opt_pass methods: */
virtual bool gate (function *) { return flag_tree_scev_cprop; }
- virtual unsigned int execute (function *) { return scev_const_prop (); }
+ virtual unsigned int execute (function *);
}; // class pass_scev_cprop
+unsigned
+pass_scev_cprop::execute (function *)
+{
+ struct loop *loop;
+ bool any = false;
+
+ /* Perform final value replacement in loops, in case the replacement
+ expressions are cheap. */
+ FOR_EACH_LOOP (loop, LI_FROM_INNERMOST)
+ any |= final_value_replacement_loop (loop);
+
+ return any ? TODO_cleanup_cfg | TODO_update_ssa_only_virtuals : 0;
+}
+
} // anon namespace
gimple_opt_pass *