backport: re PR target/81348 (PowerPC64: Code built with -mcpu=power9 hits SEGV in RTL split2)

[gcc]
2017-07-07  Michael Meissner  <meissner@linux.vnet.ibm.com>

	Backport from mainline

	PR target/81348
	* config/rs6000/rs6000.md (HI sign_extend splitter): Use the
	correct operand in doing the split.

[gcc/testsuite]
2017-07-07  Michael Meissner  <meissner@linux.vnet.ibm.com>

	Backport from mainline
	2017-07-07  Michael Meissner  <meissner@linux.vnet.ibm.com>

	PR target/81348
	* gcc.target/powerpc/pr81348.c: New test.

From-SVN: r250060
This commit is contained in:
Michael Meissner 2017-07-07 20:47:15 +00:00 committed by Michael Meissner
parent 0316d24f7a
commit 69115c8c9d
4 changed files with 42 additions and 1 deletions

View File

@ -1,3 +1,12 @@
2017-07-07 Michael Meissner <meissner@linux.vnet.ibm.com>
Backport from mainline
2017-07-07 Michael Meissner <meissner@linux.vnet.ibm.com>
PR target/81348
* config/rs6000/rs6000.md (HI sign_extend splitter): Use the
correct operand in doing the split.
2017-07-07 Jose E. Marchesi <jose.marchesi@oracle.com>
* config/sparc/m8.md: New file.

View File

@ -954,7 +954,7 @@
(set (match_dup 0)
(sign_extend:EXTHI (match_dup 2)))]
{
operands[2] = gen_rtx_REG (HImode, REGNO (operands[1]));
operands[2] = gen_rtx_REG (HImode, REGNO (operands[0]));
})
(define_insn "*extendhi<mode>2_noload"

View File

@ -1,3 +1,11 @@
2017-07-07 Michael Meissner <meissner@linux.vnet.ibm.com>
Backport from mainline
2017-07-07 Michael Meissner <meissner@linux.vnet.ibm.com>
PR target/81348
* gcc.target/powerpc/pr81348.c: New test.
2017-07-07 Jose E. Marchesi <jose.marchesi@oracle.com>
* gcc.target/sparc/dictunpack.c: New file.

View File

@ -0,0 +1,24 @@
/* { dg-do compile { target { powerpc64*-*-* && lp64 } } } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */
/* { dg-require-effective-target powerpc_p9vector_ok } */
/* { dg-options "-mcpu=power9 -Og" } */
/* PR target/81348: Compiler died in doing short->float conversion due to using
the wrong register in a define_split. */
int a;
short b;
float ***c;
void d(void)
{
int e = 3;
if (a)
e = b;
***c = e;
}
/* { dg-final { scan-assembler {\mlxsihzx\M} } } */
/* { dg-final { scan-assembler {\mvextsh2d\M} } } */