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
>

Reply via email to