Commit 1bea0f26 by Bill Schmidt Committed by William Schmidt

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
parent d86e68e2
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
......
......@@ -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 ();
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>
......
/* { 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" } } */
/* { 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" } } */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment