@@ -9330,7 +9330,12 @@ construct_container (machine_mode mode,
some less clueful developer tries to use floating-point anyway. */
if (needed_sseregs && !TARGET_SSE)
{
- if (in_return)
+ /* Don't diagnose anything until after inlining, we might have
+ functions with such arguments that are just always inlined
+ and don't really need SSE returns or arguments. */
+ if (symtab->state < IPA_SSA_AFTER_INLINING)
+ ;
+ else if (in_return)
{
if (!issued_sse_ret_error)
{
@@ -9354,7 +9359,11 @@ construct_container (machine_mode mode,
|| regclass[i] == X86_64_X87UP_CLASS
|| regclass[i] == X86_64_COMPLEX_X87_CLASS)
{
- if (!issued_x87_ret_error)
+ /* Don't diagnose anything until after inlining, we might have
+ functions with such arguments that are just always inlined
+ and don't really need x87 returns. */
+ if (symtab->state >= IPA_SSA_AFTER_INLINING
+ && !issued_x87_ret_error)
{
error ("x87 register return with x87 disabled");
issued_x87_ret_error = true;
@@ -0,0 +1,7 @@
+/* PR target/80298 */
+/* { dg-do compile } */
+/* { dg-options "-mno-sse -mmmx" } */
+
+#include <x86intrin.h>
+
+int i;
@@ -0,0 +1,7 @@
+/* PR target/80298 */
+/* { dg-do compile } */
+/* { dg-options "-mno-sse -mmmx -O2" } */
+
+#include <x86intrin.h>
+
+int i;
@@ -1,7 +1,7 @@
/* { dg-do compile } */
/* { dg-options "-mavx -mvzeroupper -mno-fp-ret-in-387" }
-/* { dg-error "x87 register return with x87 disabled" "" { target { ! ia32 } } 8 } */
+/* { dg-error "x87 register return with x87 disabled" "" { target { ! ia32 } } 7 } */
long double
foo (long double x)
@@ -8,7 +8,7 @@ typedef int __v4si __attribute__ ((__vec
extern __v4si x;
__v4si
-foo (void)
-{ /* { dg-error "SSE register return with SSE disabled" } */
+foo (void) /* { dg-error "SSE register return with SSE disabled" } */
+{
return x;
}
@@ -1,9 +1,9 @@
/* { dg-do compile { target { ! ia32 } } } */
-/* { dg-options "-msse2 -mgeneral-regs-only" } */
+/* { dg-options "-msse2 -mgeneral-regs-only -Wno-psabi" } */
typedef int int32x2_t __attribute__ ((__vector_size__ ((8))));
-int32x2_t test (int32x2_t a, int32x2_t b)
-{ /* { dg-error "SSE register return with SSE disabled" } */
+int32x2_t test (int32x2_t a, int32x2_t b) /* { dg-error "SSE register return with SSE disabled" } */
+{
return a + b;
}
@@ -1,5 +1,5 @@
/* { dg-do compile { target { ! ia32 } } } */
-/* { dg-options "-fdiagnostics-show-caret -mno-fp-ret-in-387" } */
+/* { dg-options "-fdiagnostics-show-caret -mno-fp-ret-in-387 -fno-builtin-fminl" } */
extern long double fminl (long double __x, long double __y);