backport: re PR target/80695 (gratuitous use of stxvx to store multiple pointers)

[gcc]

2017-09-10  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>

	Backport from mainline
	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.

	Backport from mainline
	2017-07-23  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>

	PR target/80695
	* config/rs6000/rs6000.c (rs6000_builtin_vectorization_cost):
	Reduce cost estimate for direct moves.

[gcc/testsuite]

2017-09-10  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>

	Backport from mainline
	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: r251952
This commit is contained in:
Bill Schmidt 2017-09-10 21:09:38 +00:00 committed by William Schmidt
parent 1d255b97d1
commit cb3903dac5
5 changed files with 75 additions and 1 deletions

View File

@ -1,3 +1,20 @@
2017-09-10 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
Backport from mainline
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.
Backport from mainline
2017-07-23 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
PR target/80695
* config/rs6000/rs6000.c (rs6000_builtin_vectorization_cost):
Reduce cost estimate for direct moves.
2017-09-08 Eric Botcazou <ebotcazou@adacore.com>
PR target/81988

View File

@ -5766,8 +5766,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 + 5;
}
else
return max (2, TYPE_VECTOR_SUBPARTS (vectype) - 1);
/* V2DFmode doesn't need a direct move. */
return 2;
default:
gcc_unreachable ();

View File

@ -1,3 +1,12 @@
2017-09-10 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
Backport from mainline
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-09-10 Eric Botcazou <ebotcazou@adacore.com>
PR ada/79441

View File

@ -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" } } */

View File

@ -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" } } */