re PR tree-optimization/87465 (Loop removal regression)
authorRichard Biener <rguenther@suse.de>
Mon, 1 Oct 2018 13:10:48 +0000 (13:10 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Mon, 1 Oct 2018 13:10:48 +0000 (13:10 +0000)
2018-10-01  Richard Biener  <rguenther@suse.de>

PR tree-optimization/87465
* tree-ssa-loop-ivcanon.c (tree_estimate_loop_size): Fix typo
causing branch miscounts.

* gcc.dg/tree-ssa/cunroll-15.c: New testcase.

From-SVN: r264758

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/tree-ssa/cunroll-15.c [new file with mode: 0644]
gcc/tree-ssa-loop-ivcanon.c

index b4bc50829151414b936630773dc89fcf866a9087..fbe49a9ea587f72f8cecc03332115eabe031c57b 100644 (file)
@@ -1,3 +1,9 @@
+2018-10-01  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/87465
+       * tree-ssa-loop-ivcanon.c (tree_estimate_loop_size): Fix typo
+       causing branch miscounts.
+
 2018-10-01  Tamar Christina  <tamar.christina@arm.com>
 
        * common/config/aarch64/aarch64-common.c (TARGET_OPTION_DEFAULT_PARAM,
index e8ba7fc66597a41e68c875342f1b4130e82410f5..dced1ea8895592a6a3f4314dd528bdfc9300ac8e 100644 (file)
@@ -1,3 +1,8 @@
+2018-10-01  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/87465
+       * gcc.dg/tree-ssa/cunroll-15.c: New testcase.
+
 2018-10-01  Tamar Christina  <tamar.christina@arm.com>
 
        PR target/86486
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/cunroll-15.c b/gcc/testsuite/gcc.dg/tree-ssa/cunroll-15.c
new file mode 100644 (file)
index 0000000..3fc752a
--- /dev/null
@@ -0,0 +1,22 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -funroll-loops -fdump-tree-cunroll-optimized -fdump-tree-optimized" } */
+
+int Test(void)
+{
+  int c = 0;
+  const int in[4] = {4,3,4,4};
+  for (unsigned i = 0; i < 4; i++) {
+      for (unsigned j = 0; j < i; j++) {
+         if (in[i] == in[j])
+           break;
+         else 
+           ++c;
+      }
+  }
+  return c;
+}
+
+/* { dg-final { scan-tree-dump-times "optimized:\[^\n\r\]*completely unrolled" 2 "cunroll" } } */
+/* When SLP vectorization is enabled the following will fail because DOM
+   doesn't know how to deal with the vectorized initializer of in.  */
+/* { dg-final { scan-tree-dump "return 1;" "optimized" } } */
index 97c2ad9498560133f9352d926d0685085345dac8..eeae2a8c54af14e58970d1797c92ecc86ac0523c 100644 (file)
@@ -368,8 +368,8 @@ tree_estimate_loop_size (struct loop *loop, edge exit, edge edge_to_cancel,
            size->non_call_stmts_on_hot_path++;
          if (((gimple_code (stmt) == GIMPLE_COND
                && (!constant_after_peeling (gimple_cond_lhs (stmt), stmt, loop)
-                   || constant_after_peeling (gimple_cond_rhs (stmt), stmt,
-                                              loop)))
+                   || !constant_after_peeling (gimple_cond_rhs (stmt), stmt,
+                                               loop)))
               || (gimple_code (stmt) == GIMPLE_SWITCH
                   && !constant_after_peeling (gimple_switch_index (
                                                 as_a <gswitch *> (stmt)),