tree-loop-distribution.c (can_generate_builtin): Reject volatile stmts.
authorRichard Guenther <rguenther@suse.de>
Mon, 21 May 2012 10:46:19 +0000 (10:46 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Mon, 21 May 2012 10:46:19 +0000 (10:46 +0000)
2012-05-21  Richard Guenther  <rguenther@suse.de>

* tree-loop-distribution.c (can_generate_builtin): Reject
volatile stmts.

* gcc.dg/torture/ldist-1.c: New testcase.

From-SVN: r187707

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/torture/ldist-1.c [new file with mode: 0644]
gcc/tree-loop-distribution.c

index b142f2baa8fedc7bcb430094cd8772bcb35641da..7d50aa4ebd9add7ae85d35c7e2ade1bf5756a525 100644 (file)
@@ -1,3 +1,8 @@
+2012-05-21  Richard Guenther  <rguenther@suse.de>
+
+       * tree-loop-distribution.c (can_generate_builtin): Reject
+       volatile stmts.
+
 2012-05-21  Chung-Lin Tang  <cltang@codesourcery.com>
 
        * Makefile.in (options.c): Add options.h to included header
index 0e4edf5ca2e97ee0722e091db4cafeb3bc72acf3..33aaeb010610ae0fe9c6012699515038493c6015 100644 (file)
@@ -1,3 +1,7 @@
+2012-05-21  Richard Guenther  <rguenther@suse.de>
+
+       * gcc.dg/torture/ldist-1.c: New testcase.
+
 2012-05-20  Eric Botcazou  <ebotcazou@adacore.com>
 
        * gnat.dg/lto13.adb: New test.
diff --git a/gcc/testsuite/gcc.dg/torture/ldist-1.c b/gcc/testsuite/gcc.dg/torture/ldist-1.c
new file mode 100644 (file)
index 0000000..b6a0f28
--- /dev/null
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-options "-ftree-loop-distribute-patterns" } */
+
+void foo (volatile int *p, int n)
+{
+  int i;
+  for (i = 0; i < n; ++i)
+    p[i] = 0;
+}
+
+/* { dg-final { scan-assembler-not "memset" } } */
+/* { dg-final { cleanup-tree-dump "ldist" } } */
index d7506e69b0423b52ce42d8a2b812a8e00abe2b99..f4b03bd8394bad357d9aa57078338f69e3674199 100644 (file)
@@ -822,8 +822,10 @@ can_generate_builtin (struct graph *rdg, bitmap partition)
       nb_reads++;
     else if (RDG_MEM_WRITE_STMT (rdg, i))
       {
+       gimple stmt = RDG_STMT (rdg, i);
        nb_writes++;
-       if (stmt_with_adjacent_zero_store_dr_p (RDG_STMT (rdg, i)))
+       if (!gimple_has_volatile_ops (stmt)
+           && stmt_with_adjacent_zero_store_dr_p (stmt))
          stores_zero++;
       }