aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorBill Schmidt <wschmidt@linux.vnet.ibm.com>2017-05-11 20:16:02 +0000
committerWilliam Schmidt <wschmidt@gcc.gnu.org>2017-05-11 20:16:02 +0000
commit1bea0f26630c2c7fc35968a6e646bd67a706bf08 (patch)
treedfd08e0e33f2a9777ee93ccf2120ba5fd0befe9e /gcc
parentd86e68e2078bb59e4f4c2c73cd111f8fd509bea4 (diff)
downloadgcc-1bea0f26630c2c7fc35968a6e646bd67a706bf08.zip
gcc-1bea0f26630c2c7fc35968a6e646bd67a706bf08.tar.gz
gcc-1bea0f26630c2c7fc35968a6e646bd67a706bf08.tar.bz2
re PR target/80695 (gratuitous use of stxvx to store multiple pointers)
[gcc] 2017-05-11 Bill Schmidt <wschmidt@linux.vnet.ibm.com> PR target/80695 * config/rs6000/rs6000.c (rs6000_builtin_vectorization_cost): Account for direct move costs for vec_construct of integer vectors. [gcc/testsuite] 2017-05-11 Bill Schmidt <wschmidt@linux.vnet.ibm.com> PR target/80695 * gcc.target/powerpc/pr80695-p8.c: New file. * gcc.target/powerpc/pr80695-p9.c: New file. From-SVN: r247928
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/rs6000/rs6000.c14
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.target/powerpc/pr80695-p8.c18
-rw-r--r--gcc/testsuite/gcc.target/powerpc/pr80695-p9.c18
5 files changed, 62 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5db5505..24af7d1 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2017-05-11 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ PR target/80695
+ * config/rs6000/rs6000.c (rs6000_builtin_vectorization_cost):
+ Account for direct move costs for vec_construct of integer
+ vectors.
+
2017-05-11 Uros Bizjak <ubizjak@gmail.com>
PR target/80706
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index d55e552..292742a 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -5850,8 +5850,20 @@ rs6000_builtin_vectorization_cost (enum vect_cost_for_stmt type_of_cost,
if (SCALAR_FLOAT_TYPE_P (elem_type)
&& TYPE_PRECISION (elem_type) == 32)
return 5;
+ /* On POWER9, integer vector types are built up in GPRs and then
+ use a direct move (2 cycles). For POWER8 this is even worse,
+ as we need two direct moves and a merge, and the direct moves
+ are five cycles. */
+ else if (INTEGRAL_TYPE_P (elem_type))
+ {
+ if (TARGET_P9_VECTOR)
+ return TYPE_VECTOR_SUBPARTS (vectype) - 1 + 2;
+ else
+ return TYPE_VECTOR_SUBPARTS (vectype) - 1 + 11;
+ }
else
- return max (2, TYPE_VECTOR_SUBPARTS (vectype) - 1);
+ /* V2DFmode doesn't need a direct move. */
+ return 2;
default:
gcc_unreachable ();
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 9fba93c..7fbf899 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2017-05-11 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ PR target/80695
+ * gcc.target/powerpc/pr80695-p8.c: New file.
+ * gcc.target/powerpc/pr80695-p9.c: New file.
+
2017-05-11 Uros Bizjak <ubizjak@gmail.com>
Jakub Jelinek <jakub@redhat.com>
diff --git a/gcc/testsuite/gcc.target/powerpc/pr80695-p8.c b/gcc/testsuite/gcc.target/powerpc/pr80695-p8.c
new file mode 100644
index 0000000..165079a
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/pr80695-p8.c
@@ -0,0 +1,18 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
+/* { dg-require-effective-target vect_int } */
+/* { dg-options "-mcpu=power8 -O3 -fdump-tree-slp-details" } */
+
+/* PR80695: Verify cost model for vec_construct on POWER8. */
+
+long a[10] __attribute__((aligned(16)));
+
+void foo (long i, long j, long k, long l)
+{
+ a[6] = i;
+ a[7] = j;
+ a[8] = k;
+ a[9] = l;
+}
+
+/* { dg-final { scan-tree-dump-times "vectorization is not profitable" 1 "slp2" } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/pr80695-p9.c b/gcc/testsuite/gcc.target/powerpc/pr80695-p9.c
new file mode 100644
index 0000000..a81f90a
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/pr80695-p9.c
@@ -0,0 +1,18 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */
+/* { dg-require-effective-target vect_int } */
+/* { dg-options "-mcpu=power9 -O3 -fdump-tree-slp-details" } */
+
+/* PR80695: Verify cost model for vec_construct on POWER9. */
+
+long a[10] __attribute__((aligned(16)));
+
+void foo (long i, long j, long k, long l)
+{
+ a[6] = i;
+ a[7] = j;
+ a[8] = k;
+ a[9] = l;
+}
+
+/* { dg-final { scan-tree-dump-times "vectorization is not profitable" 1 "slp2" } } */