]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR tree-optimization/82603 (ICE in ifcvt_local_dce w/ -O2 -ftree-loop-vectorize)
authorRichard Biener <rguenther@suse.de>
Fri, 20 Oct 2017 11:21:11 +0000 (11:21 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Fri, 20 Oct 2017 11:21:11 +0000 (11:21 +0000)
2017-10-20  Richard Biener  <rguenther@suse.de>

PR tree-optimization/82603
* tree-if-conv.c (predicate_mem_writes): Make sure to only
remove false predicated stores.

* gcc.dg/torture/pr82603.c: New testcase.

From-SVN: r253933

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/torture/pr82603.c [new file with mode: 0644]
gcc/tree-if-conv.c

index 2bb52cf1bda7c5da49420dc194ea708aec88dcd4..87474af384f92af958f9fe006838387d47904d9c 100644 (file)
@@ -1,3 +1,9 @@
+2017-10-20  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/82603
+       * tree-if-conv.c (predicate_mem_writes): Make sure to only
+       remove false predicated stores.
+
 2017-10-20  Richard Biener  <rguenther@suse.de>
 
        * graphite-isl-ast-to-gimple.c
index fd7ce2eac329a8a789ea72f0b2bcb623f49b2c77..2744146268faa77073d6ff18ef2d9bf6e5bae572 100644 (file)
@@ -1,3 +1,8 @@
+2017-10-20  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/82603
+       * gcc.dg/torture/pr82603.c: New testcase.
+
 2017-10-20  Tom de Vries  <tom@codesourcery.com>
 
        * gcc.dg/tree-ssa/ldist-27.c: Remove dg-require-stack-size.
diff --git a/gcc/testsuite/gcc.dg/torture/pr82603.c b/gcc/testsuite/gcc.dg/torture/pr82603.c
new file mode 100644 (file)
index 0000000..960a48b
--- /dev/null
@@ -0,0 +1,24 @@
+/* { dg-do compile } */
+/* { dg-additional-options "-ftree-loop-vectorize" } */
+
+int
+mr (unsigned int lf, int ms)
+{
+  unsigned int sw = 0;
+  char *cu = (char *)&ms;
+
+  while (ms < 1)
+    {
+      if (lf == 0)
+       ms = 0;
+      else
+       ms = 0;
+      ms += ((lf > 0) && ((lf > sw) ? 1 : ++*cu));
+    }
+
+  if (lf != 0)
+    cu = (char *)&sw;
+  *cu = lf;
+
+  return ms;
+}
index e2fce3c114a55e418db4e26fea230b5dcdb2cd78..a1803ff43918abd1097e6058fe52f841570f08ca 100644 (file)
@@ -2214,7 +2214,8 @@ predicate_mem_writes (loop_p loop)
        {
          if (!gimple_assign_single_p (stmt = gsi_stmt (gsi)))
            ;
-         else if (is_false_predicate (cond))
+         else if (is_false_predicate (cond)
+                  && gimple_vdef (stmt))
            {
              unlink_stmt_vdef (stmt);
              gsi_remove (&gsi, true);