Allow pass_lim to run outside pass_tree_loop
authorTom de Vries <tom@codesourcery.com>
Tue, 24 Nov 2015 14:47:55 +0000 (14:47 +0000)
committerTom de Vries <vries@gcc.gnu.org>
Tue, 24 Nov 2015 14:47:55 +0000 (14:47 +0000)
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

gcc/ChangeLog
gcc/tree-ssa-loop-im.c

index 6a5ebdeeed8fa9a568d9a87ca05cf11c3d655584..5d18534493228fc89272d4de601c1a3ad2bc60fd 100644 (file)
@@ -1,3 +1,8 @@
+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.
+
 2015-11-24  Wilco Dijkstra  <wdijkstr@arm.com>
 
        * gcc/config/aarch64/aarch64.md (add<mode>3):
index 30b53ce19894faf84c6699be4ce6ad9fd23d4bc8..0d82d36af9340ffc7bed8878aa8be9e81016bcf8 100644 (file)
@@ -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