On Sun, Jul 5, 2015 at 11:40 PM, H.J. Lu <hjl.to...@gmail.com> wrote: > 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.
OK with a small change below. Thanks, Uros. > --- > 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; Just get rid of the above variable and directly use 12 in the code below. > + > + 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 >