+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
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
--- /dev/null
+/* { 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" } } */
--- /dev/null
+/* { 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" } } */