diff options
author | Richard Biener <rguenther@suse.de> | 2018-11-05 11:11:04 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2018-11-05 11:11:04 +0000 |
commit | 4cc31a3c4ee108d960eb003129f05d5950f08355 (patch) | |
tree | a705d138f11930f3ce3c457f5d7b8970061fcd68 /gcc/tree-ssa-loop.c | |
parent | 18e0c3d1718157761e3f23ddc33ae22393bef15f (diff) | |
download | gcc-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.c | 19 |
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 * |