aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-loop-im.c
diff options
context:
space:
mode:
authorTom de Vries <tom@codesourcery.com>2015-11-24 14:47:55 +0000
committerTom de Vries <vries@gcc.gnu.org>2015-11-24 14:47:55 +0000
commit9c37629fe0abc8aa8a07521f282eb7803c056b1b (patch)
tree0367b380138fae228e11618b71da358fba49e479 /gcc/tree-ssa-loop-im.c
parent4e55c7c347fe797af3aaee1dedb46230168c371b (diff)
downloadgcc-9c37629fe0abc8aa8a07521f282eb7803c056b1b.zip
gcc-9c37629fe0abc8aa8a07521f282eb7803c056b1b.tar.gz
gcc-9c37629fe0abc8aa8a07521f282eb7803c056b1b.tar.bz2
Allow pass_lim to run outside pass_tree_loop
2015-11-24 Tom de Vries <tom@codesourcery.com> * tree-ssa-loop-im.c (tree_ssa_lim): Make static. (pass_lim::execute): Allow to run outside pass_tree_loop. From-SVN: r230815
Diffstat (limited to 'gcc/tree-ssa-loop-im.c')
-rw-r--r--gcc/tree-ssa-loop-im.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/gcc/tree-ssa-loop-im.c b/gcc/tree-ssa-loop-im.c
index 30b53ce..0d82d36 100644
--- a/gcc/tree-ssa-loop-im.c
+++ b/gcc/tree-ssa-loop-im.c
@@ -43,6 +43,7 @@ along with GCC; see the file COPYING3. If not see
#include "tree-ssa-propagate.h"
#include "trans-mem.h"
#include "gimple-fold.h"
+#include "tree-scalar-evolution.h"
/* TODO: Support for predicated code motion. I.e.
@@ -2496,7 +2497,7 @@ tree_ssa_lim_finalize (void)
/* Moves invariants from loops. Only "expensive" invariants are moved out --
i.e. those that are likely to be win regardless of the register pressure. */
-unsigned int
+static unsigned int
tree_ssa_lim (void)
{
unsigned int todo;
@@ -2560,10 +2561,17 @@ public:
unsigned int
pass_lim::execute (function *fun)
{
+ bool in_loop_pipeline = scev_initialized_p ();
+ if (!in_loop_pipeline)
+ loop_optimizer_init (LOOPS_NORMAL | LOOPS_HAVE_RECORDED_EXITS);
+
if (number_of_loops (fun) <= 1)
return 0;
+ unsigned int todo = tree_ssa_lim ();
- return tree_ssa_lim ();
+ if (!in_loop_pipeline)
+ loop_optimizer_finalize ();
+ return todo;
}
} // anon namespace