]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
tree-ssa-loop-im.c (determine_max_movement): Adjust cost of PHI node moving.
authorRichard Biener <rguenther@suse.de>
Tue, 17 Jun 2014 07:37:24 +0000 (07:37 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 17 Jun 2014 07:37:24 +0000 (07:37 +0000)
2014-06-17  Richard Biener  <rguenther@suse.de>

* tree-ssa-loop-im.c (determine_max_movement): Adjust cost
of PHI node moving.

* gcc.dg/tree-ssa/ssa-lim-12.c: New testcase.

From-SVN: r211724

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

index 676621e85cf0347719e5ca68d90479d3b8837dc5..16c505f6f1d970f1a9a7e4a37d638130e4c18896 100644 (file)
@@ -1,3 +1,8 @@
+2014-06-17  Richard Biener  <rguenther@suse.de>
+
+       * tree-ssa-loop-im.c (determine_max_movement): Adjust cost
+       of PHI node moving.
+
 2014-06-17  Kugan Vivekanandarajah  <kuganv@linaro.org>
 
        * config/arm/arm.c (arm_atomic_assign_expand_fenv): call
index d6a3dd3c7e0cf32bb4bc840cd7b28fadaedf8853..7f408adf74398b2bea36f2525dc19b5e3c48e81e 100644 (file)
@@ -1,3 +1,7 @@
+2014-06-17  Richard Biener  <rguenther@suse.de>
+
+       * gcc.dg/tree-ssa/ssa-lim-12.c: New testcase.
+
 2014-06-16  Richard Biener  <rguenther@suse.de>
 
        PR tree-optimization/61482
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-12.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-12.c
new file mode 100644 (file)
index 0000000..e0d93a9
--- /dev/null
@@ -0,0 +1,27 @@
+/* { dg-do compile } */
+/* { dg-options "-O -fdump-tree-lim1" } */
+
+int a[1024];
+
+void foo (int x, int z)
+{
+  int i;
+  int y = -x;
+  for (i = 0; i < 1024; ++i)
+    a[i] = x ? y : z;
+}
+
+void bar (int x, int z)
+{
+  int j;
+  for (j = 0; j < 1024; ++j)
+    {
+      int i;
+      int y = -j + z;
+      for (i = 0; i < 1024; ++i)
+       a[i] = x ? y : j;
+    }
+}
+
+/* { dg-final { scan-tree-dump-times "!= 0 ? " 2 "lim1" } } */
+/* { dg-final { cleanup-tree-dump "lim1" } } */
index e957f92114151d11fb01b94b20db970066b4f677..6569c0664d2620fb6ec8f173294e987503b95011 100644 (file)
@@ -729,14 +729,21 @@ determine_max_movement (gimple stmt, bool must_preserve_exec)
            }
          if (!add_dependency (val, lim_data, loop, false))
            return false;
-         def_data = get_lim_data (SSA_NAME_DEF_STMT (val));
-         if (def_data)
+
+         gimple def_stmt = SSA_NAME_DEF_STMT (val);
+         if (gimple_bb (def_stmt)
+             && gimple_bb (def_stmt)->loop_father == loop)
            {
-             min_cost = MIN (min_cost, def_data->cost);
-             total_cost += def_data->cost;
+             def_data = get_lim_data (def_stmt);
+             if (def_data)
+               {
+                 min_cost = MIN (min_cost, def_data->cost);
+                 total_cost += def_data->cost;
+               }
            }
        }
 
+      min_cost = MIN (min_cost, total_cost);
       lim_data->cost += min_cost;
 
       if (gimple_phi_num_args (stmt) > 1)