re PR tree-optimization/77621 (Internal compiler error for mtune=atom + msse2)
authorRichard Biener <rguenther@suse.de>
Wed, 21 Sep 2016 07:37:18 +0000 (07:37 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Wed, 21 Sep 2016 07:37:18 +0000 (07:37 +0000)
2016-09-21  Richard Biener  <rguenther@suse.de>
Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/77621
* tree-vect-data-refs.c (vect_analyze_data_ref_accesses): Split
group at non-vectorizable stmts.

* gcc.dg/pr77621.c: New testcase.

Co-Authored-By: Jakub Jelinek <jakub@redhat.com>
From-SVN: r240302

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr77621.c [new file with mode: 0644]
gcc/tree-vect-data-refs.c

index faa7fb2..35f6e3a 100644 (file)
@@ -1,3 +1,10 @@
+2016-09-21  Richard Biener  <rguenther@suse.de>
+       Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/77621
+       * tree-vect-data-refs.c (vect_analyze_data_ref_accesses): Split
+       group at non-vectorizable stmts.
+
 2016-09-21  Kugan Vivekanandarajah  <kuganv@linaro.org>
 
        PR tree-optimization/72835
index c355f21..04613e4 100644 (file)
@@ -1,3 +1,9 @@
+2016-09-21  Richard Biener  <rguenther@suse.de>
+       Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/77621
+       * gcc.dg/pr77621.c: New testcase.
+
 2016-09-21  Paul Thomas  <pault@gcc.gnu.org>
 
        PR fortran/77657
diff --git a/gcc/testsuite/gcc.dg/pr77621.c b/gcc/testsuite/gcc.dg/pr77621.c
new file mode 100644 (file)
index 0000000..e280452
--- /dev/null
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-O3" } */
+/* { dg-additional-options "-mtune=atom -msse2" { target i?86-*-* x86_64-*-* } } */
+
+void
+foo (double *x, int *y)
+{
+  int i;
+  for (i = 0; i < 8; i++)
+    x[i] -= y[i] * x[i + 1];
+}
index 03c4a66..7c5f101 100644 (file)
@@ -2711,10 +2711,17 @@ vect_analyze_data_ref_accesses (vec_info *vinfo)
       data_reference_p dra = datarefs_copy[i];
       stmt_vec_info stmtinfo_a = vinfo_for_stmt (DR_STMT (dra));
       stmt_vec_info lastinfo = NULL;
+      if (! STMT_VINFO_VECTORIZABLE (stmtinfo_a))
+       {
+         ++i;
+         continue;
+       }
       for (i = i + 1; i < datarefs_copy.length (); ++i)
        {
          data_reference_p drb = datarefs_copy[i];
          stmt_vec_info stmtinfo_b = vinfo_for_stmt (DR_STMT (drb));
+         if (! STMT_VINFO_VECTORIZABLE (stmtinfo_b))
+           break;
 
          /* ???  Imperfect sorting (non-compatible types, non-modulo
             accesses, same accesses) can lead to a group to be artificially