Similar to -mpreferred-stack-boundary=3, -mincoming-stack-boundary=3 is
allowed with -mno-sse in 64-bit mode.

OK for trunk?


H.J.
gcc/

        PR target/53383
        * config/i386/i386.c (ix86_option_override_internal): Allow
        -mincoming-stack-boundary=X if -mpreferred-stack-boundary=N is
        allowed and X < N.

gcc/testsuite/

        PR target/53383
        * gcc.target/i386/pr53383-1.c: New file.
        * gcc.target/i386/pr53383-2.c: Likewise.
        * gcc.target/i386/pr53383-3.c: Likewise.
---
 gcc/config/i386/i386.c                    | 13 ++++++++-----
 gcc/testsuite/gcc.target/i386/pr53383-1.c |  8 ++++++++
 gcc/testsuite/gcc.target/i386/pr53383-2.c |  8 ++++++++
 gcc/testsuite/gcc.target/i386/pr53383-3.c |  8 ++++++++
 4 files changed, 32 insertions(+), 5 deletions(-)
 create mode 100644 gcc/testsuite/gcc.target/i386/pr53383-1.c
 create mode 100644 gcc/testsuite/gcc.target/i386/pr53383-2.c
 create mode 100644 gcc/testsuite/gcc.target/i386/pr53383-3.c

diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 7d26e8c..cea1295 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -4085,12 +4085,15 @@ ix86_option_override_internal (bool main_args_p,
   ix86_incoming_stack_boundary = ix86_default_incoming_stack_boundary;
   if (opts_set->x_ix86_incoming_stack_boundary_arg)
     {
-      if (opts->x_ix86_incoming_stack_boundary_arg
-         < (TARGET_64BIT_P (opts->x_ix86_isa_flags) ? 4 : 2)
-         || opts->x_ix86_incoming_stack_boundary_arg > 12)
-       error ("-mincoming-stack-boundary=%d is not between %d and 12",
+      int min = (TARGET_64BIT_P (opts->x_ix86_isa_flags)
+                ? (TARGET_SSE_P (opts->x_ix86_isa_flags) ? 4 : 3) : 2);
+      int max = 12;
+
+      if (opts->x_ix86_incoming_stack_boundary_arg < min
+         || opts->x_ix86_incoming_stack_boundary_arg > max)
+       error ("-mincoming-stack-boundary=%d is not between %d and %d",
               opts->x_ix86_incoming_stack_boundary_arg,
-              TARGET_64BIT_P (opts->x_ix86_isa_flags) ? 4 : 2);
+              min, max);
       else
        {
          ix86_user_incoming_stack_boundary
diff --git a/gcc/testsuite/gcc.target/i386/pr53383-1.c 
b/gcc/testsuite/gcc.target/i386/pr53383-1.c
new file mode 100644
index 0000000..d140bda
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr53383-1.c
@@ -0,0 +1,8 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -mno-sse -mpreferred-stack-boundary=3" } */
+
+int
+bar (int x)
+{
+  return x + 9;
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr53383-2.c 
b/gcc/testsuite/gcc.target/i386/pr53383-2.c
new file mode 100644
index 0000000..a1b8e41
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr53383-2.c
@@ -0,0 +1,8 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -mno-sse -mpreferred-stack-boundary=3 
-mincoming-stack-boundary=3" } */
+
+int
+bar (int x)
+{
+  return x + 9;
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr53383-3.c 
b/gcc/testsuite/gcc.target/i386/pr53383-3.c
new file mode 100644
index 0000000..e5d3a5b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr53383-3.c
@@ -0,0 +1,8 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -mno-sse -mincoming-stack-boundary=3 
-mpreferred-stack-boundary=3" } */
+
+int
+bar (int x)
+{
+  return x + 9;
+}
-- 
2.4.3

Reply via email to