Commit a8f7a895 by Michael Meissner Committed by Michael Meissner

re PR target/71493 (accidental ABI change for structure return on PowerPC)

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

	PR target/71493
	* config/rs6000/rs6000.c (rs6000_function_value): Fix
	unintentional System V.4 structure return breakage for structures
	with a single floating point element.

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

	PR target/71493
	* gcc.target/powerpc/pr71493-1.c: New test.
	* gcc.target/powerpc/pr71493-2.c: Likewise.

From-SVN: r238454
parent 40d9a674
2016-07-18 Michael Meissner <meissner@linux.vnet.ibm.com>
PR target/71493
* config/rs6000/rs6000.c (rs6000_function_value): Fix
unintentional System V.4 structure return breakage for structures
with a single floating point element.
2016-07-18 Yuri Rumyantsev <ysrumyan@gmail.com>
PR tree-optimization/71734
......
......@@ -35467,7 +35467,8 @@ rs6000_function_value (const_tree valtype,
if (DECIMAL_FLOAT_MODE_P (mode) && TARGET_HARD_FLOAT && TARGET_FPRS)
/* _Decimal128 must use an even/odd register pair. */
regno = (mode == TDmode) ? FP_ARG_RETURN + 1 : FP_ARG_RETURN;
else if (SCALAR_FLOAT_MODE_NOT_VECTOR_P (mode) && TARGET_HARD_FLOAT && TARGET_FPRS
else if (SCALAR_FLOAT_TYPE_P (valtype) && TARGET_HARD_FLOAT && TARGET_FPRS
&& !FLOAT128_VECTOR_P (mode)
&& ((TARGET_SINGLE_FLOAT && (mode == SFmode)) || TARGET_DOUBLE_FLOAT))
regno = FP_ARG_RETURN;
else if (TREE_CODE (valtype) == COMPLEX_TYPE
2016-07-18 Michael Meissner <meissner@linux.vnet.ibm.com>
PR target/71493
* gcc.target/powerpc/pr71493-1.c: New test.
* gcc.target/powerpc/pr71493-2.c: Likewise.
2016-07-18 Jakub Jelinek <jakub@redhat.com>
PR c++/71835
......
/* { dg-do compile { target { powerpc*-*-linux* && ilp32 } } } */
/* { dg-options "-O2 -msvr4-struct-return" } */
struct S1 { float f; };
struct S1 foo1 (void)
{
struct S1 s = { 1.0f };
return s;
}
/* { dg-final { scan-assembler "lwz" } } */
/* { dg-final { scan-assembler-not "lfs" } } */
/* { dg-do compile { target { powerpc*-*-linux* && ilp32 } } } */
/* { dg-options "-O2 -msvr4-struct-return" } */
struct S2 { double d; };
struct S2 foo2 (void)
{
struct S2 s = { 1.0 };
return s;
}
/* { dg-final { scan-assembler "lwz" } } */
/* { dg-final { scan-assembler-not "lfd" } } */
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