Commit 6e0cc90b by Kelvin Nilsen

rs6000-p8swap.c (const_load_sequence_p): Revise this function to return false if…

rs6000-p8swap.c (const_load_sequence_p): Revise this function to return false if the definition used by the swap...

gcc/ChangeLog:

2017-09-27  Kelvin Nilsen  <kelvin@gcc.gnu.org>

	* config/rs6000/rs6000-p8swap.c (const_load_sequence_p): Revise
	this function to return false if the definition used by the swap
	instruction is artificial, or if the memory address from which the
	constant value is loaded is not represented by a base address held
	in a register or if the base address register is a frame or stack
	pointer.  Additionally, return false if the base address of the
	loaded constant is a SYMBOL_REF but is not considered to be a
	constant.
	(replace_swapped_load_constant): New function.
	(rs6000_analyze_swaps): Add a new pass to replace a swap of a
	loaded constant vector with a load of a swapped constant vector.

gcc/testsuite/ChangeLog:

2017-09-27  Kelvin Nilsen  <kelvin@gcc.gnu.org>

	* gcc.target/powerpc/swaps-p8-28.c: New test.
	* gcc.target/powerpc/swaps-p8-29.c: New test.
	* gcc.target/powerpc/swaps-p8-30.c: New test.
	* gcc.target/powerpc/swaps-p8-31.c: New test.
	* gcc.target/powerpc/swaps-p8-32.c: New test.
	* gcc.target/powerpc/swaps-p8-33.c: New test.
	* gcc.target/powerpc/swaps-p8-34.c: New test.
	* gcc.target/powerpc/swaps-p8-35.c: New test.
	* gcc.target/powerpc/swaps-p8-36.c: New test.
	* gcc.target/powerpc/swaps-p8-37.c: New test.
	* gcc.target/powerpc/swaps-p8-38.c: New test.
	* gcc.target/powerpc/swaps-p8-39.c: New test.
	* gcc.target/powerpc/swaps-p8-40.c: New test.
	* gcc.target/powerpc/swaps-p8-41.c: New test.
	* gcc.target/powerpc/swaps-p8-42.c: New test.
	* gcc.target/powerpc/swaps-p8-43.c: New test.
	* gcc.target/powerpc/swaps-p8-44.c: New test.
	* gcc.target/powerpc/swaps-p8-45.c: New test.

From-SVN: r253240
parent 4ca4cf4e
2017-09-27 Kelvin Nilsen <kelvin@gcc.gnu.org>
* config/rs6000/rs6000-p8swap.c (const_load_sequence_p): Revise
this function to return false if the definition used by the swap
instruction is artificial, or if the memory address from which the
constant value is loaded is not represented by a base address held
in a register or if the base address register is a frame or stack
pointer. Additionally, return false if the base address of the
loaded constant is a SYMBOL_REF but is not considered to be a
constant.
(replace_swapped_load_constant): New function.
(rs6000_analyze_swaps): Add a new pass to replace a swap of a
loaded constant vector with a load of a swapped constant vector.
2017-09-27 Carl Love <cel@us.ibm.com>
* config/rs6000/rs6000-builtin.def (BU_FP_1MISC_1): Add define macro.
2017-09-27 Kelvin Nilsen <kelvin@gcc.gnu.org>
* gcc.target/powerpc/swaps-p8-28.c: New test.
* gcc.target/powerpc/swaps-p8-29.c: New test.
* gcc.target/powerpc/swaps-p8-30.c: New test.
* gcc.target/powerpc/swaps-p8-31.c: New test.
* gcc.target/powerpc/swaps-p8-32.c: New test.
* gcc.target/powerpc/swaps-p8-33.c: New test.
* gcc.target/powerpc/swaps-p8-34.c: New test.
* gcc.target/powerpc/swaps-p8-35.c: New test.
* gcc.target/powerpc/swaps-p8-36.c: New test.
* gcc.target/powerpc/swaps-p8-37.c: New test.
* gcc.target/powerpc/swaps-p8-38.c: New test.
* gcc.target/powerpc/swaps-p8-39.c: New test.
* gcc.target/powerpc/swaps-p8-40.c: New test.
* gcc.target/powerpc/swaps-p8-41.c: New test.
* gcc.target/powerpc/swaps-p8-42.c: New test.
* gcc.target/powerpc/swaps-p8-43.c: New test.
* gcc.target/powerpc/swaps-p8-44.c: New test.
* gcc.target/powerpc/swaps-p8-45.c: New test.
2017-09-27 Carl Love <cel@us.ibm.com>
* gcc.target/powerpc/builtin-fctid-fctiw-runnable.c: New test file
for the __builtin_fctid and __builtin_fctiw.
......
/* { dg-require-effective-target p8vector_hw } */
/* { dg-do run { target { powerpc*-*-* } } } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
/* { dg-options "-mcpu=power8 -O3 " } */
#include <altivec.h>
extern void abort (void);
vector char y = { 0, 1, 2, 3,
4, 5, 6, 7,
8, 9, 10, 11,
12, 13, 14, 15 };
vector char
foo (void)
{
return y;
}
int
main (int argc, char *argv[])
{
vector char fetched_value = foo ();
if (fetched_value[0] != 0 || fetched_value[15] != 15)
abort ();
else
return 0;
}
/* { dg-require-effective-target p8vector_hw } */
/* { dg-do run { target { powerpc*-*-* } } } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
/* { dg-options "-mcpu=power8 -O3 " } */
#include <altivec.h>
extern void abort (void);
const vector char y = { 0, 1, 2, 3,
4, 5, 6, 7,
8, 9, 10, 11,
12, 13, 14, 15 };
vector char
foo (void)
{
return y;
}
int
main (int argc, char *argv[])
{
vector char fetched_value = foo ();
if (fetched_value[0] != 0 || fetched_value[15] != 15)
abort ();
else
return 0;
}
/* { dg-require-effective-target powerpc_p8vector_ok } */
/* { dg-do compile { target { powerpc64le-*-* } } } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
/* { dg-options "-mcpu=power8 -O3 " } */
/* { dg-final { scan-assembler-not "xxpermdi" } } */
/* { dg-final { scan-assembler-not "xxswapd" } } */
#include <altivec.h>
extern void abort (void);
const vector char y = { 0, 1, 2, 3,
4, 5, 6, 7,
8, 9, 10, 11,
12, 13, 14, 15 };
vector char
foo (void)
{
return y;
}
int
main (int argc, char *argv[])
{
vector char fetched_value = foo ();
if (fetched_value[0] != 0 || fetched_value[15] != 15)
abort ();
else
return 0;
}
/* { dg-require-effective-target p8vector_hw } */
/* { dg-do run { target { powerpc*-*-* } } } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
/* { dg-options "-mcpu=power8 -O3 " } */
#include <altivec.h>
extern void abort (void);
vector short y = { 0, 1, 2, 3,
4, 5, 6, 7 };
vector short
foo (void)
{
return y;
}
int
main (int argc, char *argv[])
{
vector short fetched_value = foo ();
if (fetched_value[0] != 0 || fetched_value[7] != 7)
abort ();
else
return 0;
}
/* { dg-require-effective-target p8vector_hw } */
/* { dg-do run { target { powerpc*-*-* } } } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
/* { dg-options "-mcpu=power8 -O3 " } */
#include <altivec.h>
extern void abort (void);
const vector short y = { 0, 1, 2, 3,
4, 5, 6, 7 };
vector short
foo (void)
{
return y;
}
int
main (int argc, char *argv[])
{
vector short fetched_value = foo ();
if (fetched_value[0] != 0 || fetched_value[7] != 7)
abort ();
else
return 0;
}
/* { dg-require-effective-target powerpc_p8vector_ok } */
/* { dg-do compile { target { powerpc64le-*-* } } } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
/* { dg-options "-mcpu=power8 -O3 " } */
/* { dg-final { scan-assembler-not "xxpermdi" } } */
/* { dg-final { scan-assembler-not "xxswapd" } } */
#include <altivec.h>
extern void abort (void);
const vector short y = { 0, 1, 2, 3,
4, 5, 6, 7 };
vector short
foo (void)
{
return y;
}
int
main (int argc, char *argv[])
{
vector short fetched_value = foo ();
if (fetched_value[0] != 0 || fetched_value[15] != 15)
abort ();
else
return 0;
}
/* { dg-require-effective-target p8vector_hw } */
/* { dg-do run { target { powerpc*-*-* } } } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
/* { dg-options "-mcpu=power8 -O3 " } */
#include <altivec.h>
extern void abort (void);
vector int y = { 0, 1, 2, 3 };
vector int
foo (void)
{
return y;
}
int
main (int argc, char *argv[])
{
vector int fetched_value = foo ();
if (fetched_value[0] != 0 || fetched_value[3] != 3)
abort ();
else
return 0;
}
/* { dg-require-effective-target p8vector_hw } */
/* { dg-do run { target { powerpc*-*-* } } } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
/* { dg-options "-mcpu=power8 -O3 " } */
#include <altivec.h>
extern void abort (void);
const vector int y = { 0, 1, 2, 3 };
vector int
foo (void)
{
return y;
}
int
main (int argc, char *argv[])
{
vector int fetched_value = foo ();
if (fetched_value[0] != 0 || fetched_value[3] != 3)
abort ();
else
return 0;
}
/* { dg-require-effective-target powerpc_p8vector_ok } */
/* { dg-do compile { target { powerpc64le-*-* } } } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
/* { dg-options "-mcpu=power8 -O3 " } */
/* { dg-final { scan-assembler-not "xxpermdi" } } */
/* { dg-final { scan-assembler-not "xxswapd" } } */
#include <altivec.h>
extern void abort (void);
const vector int y = { 0, 1, 2, 3 };
vector int
foo (void)
{
return y;
}
int
main (int argc, char *argv[])
{
vector int fetched_value = foo ();
if (fetched_value[0] != 0 || fetched_value[3] != 3)
abort ();
else
return 0;
}
/* { dg-require-effective-target p8vector_hw } */
/* { dg-do run { target { powerpc*-*-* } } } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
/* { dg-options "-mcpu=power8 -O3 " } */
#include <altivec.h>
extern void abort (void);
vector float y = { 0.0f, 0.1f, 0.2f, 0.3f };
vector float
foo (void)
{
return y;
}
int
main (int argc, char *argv[])
{
vector float fetched_value = foo ();
if (fetched_value[0] != 0.0f || fetched_value[3] != 0.3f)
abort ();
else
return 0;
}
/* { dg-require-effective-target p8vector_hw } */
/* { dg-do run { target { powerpc*-*-* } } } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
/* { dg-options "-mcpu=power8 -O3 " } */
#include <altivec.h>
extern void abort (void);
const vector float y = { 0.0f, 0.1f, 0.2f, 0.3f };
vector float
foo (void)
{
return y;
}
int
main (int argc, char *argv[])
{
vector float fetched_value = foo ();
if (fetched_value[0] != 0.0f || fetched_value[3] != 0.3f)
abort ();
else
return 0;
}
/* { dg-require-effective-target powerpc_p8vector_ok } */
/* { dg-do compile { target { powerpc64le-*-* } } } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
/* { dg-options "-mcpu=power8 -O3 " } */
/* { dg-final { scan-assembler-not "xxpermdi" } } */
/* { dg-final { scan-assembler-not "xxswapd" } } */
#include <altivec.h>
extern void abort (void);
const vector float y = { 0.0f, 0.1f, 0.2f, 0.3f };
vector float
foo (void)
{
return y;
}
int
main (int argc, char *argv[])
{
vector float fetched_value = foo ();
if (fetched_value[0] != 0.0f || fetched_value[3] != 0.3)
abort ();
else
return 0;
}
/* { dg-require-effective-target p8vector_hw } */
/* { dg-do run { target { powerpc*-*-* } } } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
/* { dg-options "-mcpu=power8 -O3 " } */
#include <altivec.h>
extern void abort (void);
vector long long int y = { 0, 1 };
vector long long int
foo (void)
{
return y;
}
int
main (int argc, int *argv[])
{
vector long long int fetched_value = foo ();
if (fetched_value[0] != 0 || fetched_value[1] != 1)
abort ();
else
return 0;
}
/* { dg-require-effective-target p8vector_hw } */
/* { dg-do run { target { powerpc*-*-* } } } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
/* { dg-options "-mcpu=power8 -O3 " } */
#include <altivec.h>
extern void abort (void);
const vector long long int y = { 0, 1 };
vector long long int
foo (void)
{
return y;
}
int
main (int argc, char *argv[])
{
vector long long int fetched_value = foo ();
if (fetched_value[0] != 0 || fetched_value[1] != 1)
abort ();
else
return 0;
}
/* { dg-require-effective-target powerpc_p8vector_ok } */
/* { dg-do compile { target { powerpc64le-*-* } } } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
/* { dg-options "-mcpu=power8 -O3 " } */
/* { dg-final { scan-assembler-not "xxpermdi" } } */
/* { dg-final { scan-assembler-not "xxswapd" } } */
#include <altivec.h>
extern void abort (void);
const vector long long int y = { 0, 1 };
vector long long int
foo (void)
{
return y;
}
int
main (int argc, char *argv[])
{
vector long long int fetched_value = foo ();
if (fetched_value[0] != 0 || fetched_value[1] != 1)
abort ();
else
return 0;
}
/* { dg-require-effective-target p8vector_hw } */
/* { dg-do run { target { powerpc*-*-* } } } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
/* { dg-options "-mcpu=power8 -O3 " } */
#include <altivec.h>
extern void abort (void);
vector double y = { 0.0, 0.1 };
vector double
foo (void)
{
return y;
}
int
main (int argc, char *argv[])
{
vector double fetched_value = foo ();
if (fetched_value[0] != 0 || fetched_value[1] != 0.1)
abort ();
else
return 0;
}
/* { dg-require-effective-target p8vector_hw } */
/* { dg-do run { target { powerpc*-*-* } } } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
/* { dg-options "-mcpu=power8 -O3 " } */
#include <altivec.h>
extern void abort (void);
const vector double y = { 0.0, 0.1 };
vector double
foo (void)
{
return y;
}
int
main (int argc, char *argv[])
{
vector double fetched_value = foo ();
if (fetched_value[0] != 0.0 || fetched_value[1] != 0.1)
abort ();
else
return 0;
}
/* { dg-require-effective-target powerpc_p8vector_ok } */
/* { dg-do compile { target { powerpc64le-*-* } } } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
/* { dg-options "-mcpu=power8 -O3 " } */
/* { dg-final { scan-assembler-not "xxpermdi" } } */
/* { dg-final { scan-assembler-not "xxswapd" } } */
#include <altivec.h>
extern void abort (void);
const vector double y = { 0.0, 0.1 };
vector double
foo (void)
{
return y;
}
int
main (int argc, char *argv[])
{
vector double fetched_value = foo ();
if (fetched_value[0] != 0.0 || fetched_value[15] != 0.1)
abort ();
else
return 0;
}
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