aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2015-05-12 07:40:00 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2015-05-12 07:40:00 +0000
commitdfc55d308ef79c55173542cd2bdea3ae92847a83 (patch)
treee595bcb1e6980363b3b38ae8de26ec07d9d43a66 /gcc
parent9b7df66f80888ba9f47853af080ead6f4422cddb (diff)
downloadgcc-dfc55d308ef79c55173542cd2bdea3ae92847a83.zip
gcc-dfc55d308ef79c55173542cd2bdea3ae92847a83.tar.gz
gcc-dfc55d308ef79c55173542cd2bdea3ae92847a83.tar.bz2
tree-vect-slp.c (vect_build_slp_tree_1): For BB vectorization do not allow unrolling.
2015-05-12 Richard Biener <rguenther@suse.de> * tree-vect-slp.c (vect_build_slp_tree_1): For BB vectorization do not allow unrolling. * gcc.dg/vect/bb-slp-35.c: New testcase. From-SVN: r223033
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/vect/bb-slp-35.c13
-rw-r--r--gcc/tree-vect-slp.c13
4 files changed, 35 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f7d9856..54f80c5 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2015-05-12 Richard Biener <rguenther@suse.de>
+
+ * tree-vect-slp.c (vect_build_slp_tree_1): For BB vectorization
+ do not allow unrolling.
+
2015-05-11 Richard Henderson <rth@redhat.com>
* config/i386/i386-modes.def (CCP): New.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 0c97ea2..3f5f347 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2015-05-12 Richard Biener <rguenther@suse.de>
+
+ * gcc.dg/vect/bb-slp-35.c: New testcase.
+
2015-05-11 Mikael Morin <mikael@gcc.gnu.org>
PR fortran/66100
diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-35.c b/gcc/testsuite/gcc.dg/vect/bb-slp-35.c
new file mode 100644
index 0000000..7d67558
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/bb-slp-35.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target vect_int } */
+
+void foo (int * __restrict__ p, short * __restrict__ q)
+{
+ p[0] = q[0] + 1;
+ p[1] = q[1] + 1;
+ p[2] = q[2] + 1;
+ p[3] = q[3] + 1;
+}
+
+/* { dg-final { scan-tree-dump "basic block vectorized" "slp2" } } */
+/* { dg-final { cleanup-tree-dump "slp2" } } */
diff --git a/gcc/tree-vect-slp.c b/gcc/tree-vect-slp.c
index fc96df3..d6efe94 100644
--- a/gcc/tree-vect-slp.c
+++ b/gcc/tree-vect-slp.c
@@ -568,6 +568,19 @@ vect_build_slp_tree_1 (loop_vec_info loop_vinfo, bb_vec_info bb_vinfo,
return false;
}
+ /* If populating the vector type requires unrolling then fail
+ before adjusting *max_nunits for basic-block vectorization. */
+ if (bb_vinfo
+ && TYPE_VECTOR_SUBPARTS (vectype) > group_size)
+ {
+ dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
+ "Build SLP failed: unrolling required "
+ "in basic block SLP\n");
+ /* Fatal mismatch. */
+ matches[0] = false;
+ return false;
+ }
+
/* In case of multiple types we need to detect the smallest type. */
if (*max_nunits < TYPE_VECTOR_SUBPARTS (vectype))
{