]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR tree-optimization/43934 (LIM should handle PHI nodes)
authorChristian Bruel <christian.bruel@st.com>
Fri, 6 Jun 2014 07:21:02 +0000 (09:21 +0200)
committerChristian Bruel <chrbr@gcc.gnu.org>
Fri, 6 Jun 2014 07:21:02 +0000 (09:21 +0200)
PR tree-optimization/43934
* tree-ssa-loop-im.c (determine_max_movement): Add PHI def constant cost.

From-SVN: r211302

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-8.c [new file with mode: 0644]
gcc/tree-ssa-loop-im.c

index d8ca149b2df2acc64fdccac5ac032090420dda2e..e807a610d78eea74bc593bb281c8227eaeaedc14 100644 (file)
@@ -1,3 +1,8 @@
+2014-06-06  Christian Bruel  <christian.bruel@st.com>
+
+       PR tree-optimization/43934
+       * tree-ssa-loop-im.c (determine_max_movement): Add PHI def constant cost.
+
 2014-06-06  Richard Sandiford  <rdsandiford@googlemail.com>
 
        * ira-lives.c (single_reg_class): Add missing break.  Explicitly
index 8e0fb801342b1c5129d64dcacf3ffa4efd242f8b..98a2a053249a1893a372aab2b9744ff56a1575e6 100644 (file)
@@ -1,3 +1,8 @@
+2014-06-06  Christian Bruel  <christian.bruel@st.com>
+
+       PR tree-optimization/43934
+       * gcc.dg/tree-ssa/ssa-lim-8.c: New testcase.
+
 2014-06-05  S. Gilles  <sgilles@terpmail.umd.edu>
 
        PR c/53119
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-8.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-8.c
new file mode 100644 (file)
index 0000000..551b68f
--- /dev/null
@@ -0,0 +1,20 @@
+/* { dg-do compile } */
+/* { dg-options "-O -fdump-tree-lim1-details" } */
+
+void bar (int);
+void foo (int n, int m)
+{
+  unsigned i;
+  for (i = 0; i < n; ++i)
+    {
+      int x;
+      if (m < 0)
+       x = 1;
+      else
+       x = m;
+      bar (x);
+    }
+}
+
+/* { dg-final { scan-tree-dump-times "Moving PHI node" 1 "lim1"  } } */
+/* { dg-final { cleanup-tree-dump "lim1" } } */
index 5863127c49376d3c178b14b4a8080a5ee6ab960b..e957f92114151d11fb01b94b20db970066b4f677 100644 (file)
@@ -719,8 +719,14 @@ determine_max_movement (gimple stmt, bool must_preserve_exec)
       FOR_EACH_PHI_ARG (use_p, stmt, iter, SSA_OP_USE)
        {
          val = USE_FROM_PTR (use_p);
+
          if (TREE_CODE (val) != SSA_NAME)
-           continue;
+           {
+             /* Assign const 1 to constants.  */
+             min_cost = MIN (min_cost, 1);
+             total_cost += 1;
+             continue;
+           }
          if (!add_dependency (val, lim_data, loop, false))
            return false;
          def_data = get_lim_data (SSA_NAME_DEF_STMT (val));