aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorIra Rosen <irar@il.ibm.com>2009-06-30 11:33:27 +0000
committerIra Rosen <irar@gcc.gnu.org>2009-06-30 11:33:27 +0000
commit1825a1f3cab46c55e7377ed50ab5bd1358b2b0ee (patch)
tree1a3e1815802c814b678e40fab991cb4301007d6f /gcc
parent0dca215363824df130e4a80b405baa4c7fbbe8a7 (diff)
downloadgcc-1825a1f3cab46c55e7377ed50ab5bd1358b2b0ee.zip
gcc-1825a1f3cab46c55e7377ed50ab5bd1358b2b0ee.tar.gz
gcc-1825a1f3cab46c55e7377ed50ab5bd1358b2b0ee.tar.bz2
re PR tree-optimization/40542 (vectorizes access to volatile array)
PR tree-optimization/40542 * tree-vect-stmts.c (vect_analyze_stmt): Don't vectorize volatile types. From-SVN: r149090
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr40542.c14
-rw-r--r--gcc/tree-vect-stmts.c8
4 files changed, 33 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 79637f0..644ef85 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2009-06-30 Ira Rosen <irar@il.ibm.com>
+
+ PR tree-optimization/40542
+ * tree-vect-stmts.c (vect_analyze_stmt): Don't vectorize volatile
+ types.
+
2009-06-30 Martin Jambor <mjambor@suse.cz>
PR tree-optimization/40582
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 49ca9c1..7ab502e 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2009-06-30 Ira Rosen <irar@il.ibm.com>
+
+ PR tree-optimization/40542
+ * gcc.dg/vect/pr40542.c: New test.
+
2009-06-30 Martin Jambor <mjambor@suse.cz>
PR tree-optimization/40582
diff --git a/gcc/testsuite/gcc.dg/vect/pr40542.c b/gcc/testsuite/gcc.dg/vect/pr40542.c
new file mode 100644
index 0000000..0a82772
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr40542.c
@@ -0,0 +1,14 @@
+/* { dg-do compile } */
+
+void
+volarr_cpy(char *d, volatile char *s)
+{
+ int i;
+
+ for (i = 0; i < 16; i++)
+ d[i] = s[i];
+}
+
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail *-*-* } } } */
+/* { dg-final { cleanup-tree-dump "vect" } } */
+
diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c
index 586e906..1c9415b 100644
--- a/gcc/tree-vect-stmts.c
+++ b/gcc/tree-vect-stmts.c
@@ -3910,6 +3910,14 @@ vect_analyze_stmt (gimple stmt, bool *need_to_vectorize, slp_tree node)
print_gimple_stmt (vect_dump, stmt, 0, TDF_SLIM);
}
+ if (gimple_has_volatile_ops (stmt))
+ {
+ if (vect_print_dump_info (REPORT_UNVECTORIZED_LOCATIONS))
+ fprintf (vect_dump, "not vectorized: stmt has volatile operands");
+
+ return false;
+ }
+
/* Skip stmts that do not need to be vectorized. In loops this is expected
to include:
- the COND_EXPR which is the loop exit condition