aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorIra Rosen <ira.rosen@linaro.org>2011-05-31 12:31:04 +0000
committerIra Rosen <irar@gcc.gnu.org>2011-05-31 12:31:04 +0000
commit8f7de592d33e84831f3122a7f27ca05c7d308c69 (patch)
treec62c699cd03a0617508a60b9be36816b8cff5f73 /gcc
parent8d8a3bda40b0fa5aeb801287f0e2e79affe26c54 (diff)
downloadgcc-8f7de592d33e84831f3122a7f27ca05c7d308c69.zip
gcc-8f7de592d33e84831f3122a7f27ca05c7d308c69.tar.gz
gcc-8f7de592d33e84831f3122a7f27ca05c7d308c69.tar.bz2
re PR tree-optimization/49093 (ICE in vect_enhance_data_refs_alignment() with volatile inside peeled loop)
PR tree-optimization/49093 * tree-vect-data-refs.c (vect_analyze_data_refs): Fail for volatile data references. From-SVN: r174477
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr49093.c22
-rw-r--r--gcc/tree-vect-data-refs.c10
4 files changed, 43 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e29a763..4270d2d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2011-05-31 Ira Rosen <ira.rosen@linaro.org>
+
+ PR tree-optimization/49093
+ * tree-vect-data-refs.c (vect_analyze_data_refs): Fail for volatile
+ data references.
+
2011-05-31 Dodji Seketeli <dodji@redhat.com>
PR debug/49047
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index dfa323b..612fc17 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2011-05-31 Ira Rosen <ira.rosen@linaro.org>
+
+ PR tree-optimization/49093
+ * gcc.dg/vect/pr49093.c: New test.
+
2011-05-31 Dodji Seketeli <dodji@redhat.com>
PR debug/49047
diff --git a/gcc/testsuite/gcc.dg/vect/pr49093.c b/gcc/testsuite/gcc.dg/vect/pr49093.c
new file mode 100644
index 0000000..b8bded6
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr49093.c
@@ -0,0 +1,22 @@
+/* { dg-do compile } */
+/* { dg-options "-O1 -ftree-vectorize -fdump-tree-vect-details -fno-tree-fre" } */
+
+volatile unsigned char g_324[4] = {0, 1, 0, 1};
+void foo (int);
+int x, y;
+void func_81(void)
+{
+ int l_466, l_439[7] = {0}, g_97;
+lbl_473:
+ if (x) {
+ for (g_97 = 0; (g_97 < 4); ++g_97) {
+ if (y)
+ goto lbl_473;
+ g_324[g_97];
+ l_466 = l_439[g_97];
+ }
+ foo(l_466);
+ }
+}
+
+/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/tree-vect-data-refs.c b/gcc/tree-vect-data-refs.c
index ee05997..5023710 100644
--- a/gcc/tree-vect-data-refs.c
+++ b/gcc/tree-vect-data-refs.c
@@ -2584,6 +2584,16 @@ vect_analyze_data_refs (loop_vec_info loop_vinfo,
return false;
}
+ if (TREE_THIS_VOLATILE (DR_REF (dr)))
+ {
+ if (vect_print_dump_info (REPORT_UNVECTORIZED_LOCATIONS))
+ {
+ fprintf (vect_dump, "not vectorized: volatile type ");
+ print_gimple_stmt (vect_dump, stmt, 0, TDF_SLIM);
+ }
+ return false;
+ }
+
base = unshare_expr (DR_BASE_ADDRESS (dr));
offset = unshare_expr (DR_OFFSET (dr));
init = unshare_expr (DR_INIT (dr));