On Wed, Aug 13, 2025 at 6:47 PM Hongtao Liu <crazy...@gmail.com> wrote:
>
> On Thu, Aug 14, 2025 at 9:22 AM H.J. Lu <hjl.to...@gmail.com> wrote:
> >
> > commit 9804b23198b39f85a7258be556c5e8aed44b9efc
> > Author: H.J. Lu <hjl.to...@gmail.com>
> > Date:   Sun Apr 13 11:38:24 2025 -0700
> >
> >     x86: Add preserve_none and update no_caller_saved_registers attributes
> >
> > allowed MMX/80387 instructions in functions with no_caller_saved_registers
> > attribute by accident.  Update ix86_set_current_function to properly
> > check if MMX and 80387 are enabled.
> >
> > gcc/
> >
> >         PR target/121540
> >         * config/i386/i386-options.cc (ix86_set_current_function):
> >         Properly check if MMX and 80387 are enabled.
> >
> > gcc/testsuite/
> >
> >         PR target/121540
> >         * gcc.target/i386/no-callee-saved-19a.c (dg-options): Add
> >         "-mno-avx -mno-mmx -mno-80387"
> >         * gcc.target/i386/no-callee-saved-19b.c: Likewise.
> >         * gcc.target/i386/no-callee-saved-19c.c: Likewise.
> >         * gcc.target/i386/no-callee-saved-19d.c: Likewise.
> >         * gcc.target/i386/no-callee-saved-19e.c: Likewise.
> >         * gcc.target/i386/pr121208-1a.c: Likewise.
> >         * gcc.target/i386/pr121208-1b.c: Likewise.
> >         * gcc.target/i386/pr121540-1.c: New test.
> >         * gcc.target/i386/pr121540-2.c: Likewise.
> >
> > Signed-off-by: H.J. Lu <hjl.to...@gmail.com>
> > ---
> >  gcc/config/i386/i386-options.cc                 | 17 ++++++++---------
> >  .../gcc.target/i386/no-callee-saved-19a.c       |  2 +-
> >  .../gcc.target/i386/no-callee-saved-19b.c       |  2 +-
> >  .../gcc.target/i386/no-callee-saved-19c.c       |  2 +-
> >  .../gcc.target/i386/no-callee-saved-19d.c       |  2 +-
> >  .../gcc.target/i386/no-callee-saved-19e.c       |  2 +-
> >  gcc/testsuite/gcc.target/i386/pr121208-1a.c     |  2 +-
> >  gcc/testsuite/gcc.target/i386/pr121208-1b.c     |  2 +-
> >  gcc/testsuite/gcc.target/i386/pr121540-1.c      |  8 ++++++++
> >  gcc/testsuite/gcc.target/i386/pr121540-2.c      |  8 ++++++++
> >  10 files changed, 31 insertions(+), 16 deletions(-)
> >  create mode 100644 gcc/testsuite/gcc.target/i386/pr121540-1.c
> >  create mode 100644 gcc/testsuite/gcc.target/i386/pr121540-2.c
> >
> > diff --git a/gcc/config/i386/i386-options.cc 
> > b/gcc/config/i386/i386-options.cc
> > index 09a35ef6298..f96c76727e2 100644
> > --- a/gcc/config/i386/i386-options.cc
> > +++ b/gcc/config/i386/i386-options.cc
> > @@ -3547,7 +3547,7 @@ ix86_set_current_function (tree fndecl)
> >        /* Don't allow AVX, AVX512, MMX nor x87 instructions since they
> >          may change processor state.  Don't allow SSE instructions in
> >          exception/interrupt service routines.  */
> > -      const char *isa;
> > +      const char *isa = NULL;
> >        if (TARGET_SSE)
> >         {
> >           if (TARGET_AVX512F)
> > @@ -3556,15 +3556,14 @@ ix86_set_current_function (tree fndecl)
> >             isa = "AVX";
> >           else if (cfun->machine->func_type != TYPE_NORMAL)
> >             isa = "SSE";
> > -         else
> > -           isa = NULL;
> >         }
> > -      else if (TARGET_MMX)
> > -       isa = "MMX/3Dnow";
> > -      else if (TARGET_80387)
> > -       isa = "80387";
> > -      else
> > -       isa = NULL;
> > +      if (isa == NULL)
> > +       {
> > +         if (TARGET_MMX)
> > +           isa = "MMX/3Dnow";
> > +         else if (TARGET_80387)
> > +           isa = "80387";
> > +       }
>
> Maybe this is more readable?
>
> diff --git a/gcc/config/i386/i386-options.cc b/gcc/config/i386/i386-options.cc
> index 09a35ef6298..136c0f2e966 100644
> --- a/gcc/config/i386/i386-options.cc
> +++ b/gcc/config/i386/i386-options.cc
> @@ -3556,6 +3556,10 @@ ix86_set_current_function (tree fndecl)
>             isa = "AVX";
>           else if (cfun->machine->func_type != TYPE_NORMAL)
>             isa = "SSE";
> +         else if (TARGET_MMX)
> +           isa = "MMX/3Dnow";
> +         else if (TARGET_80387)
> +           isa = "80387";
>           else
>             isa = NULL;
>         }

Fixed in the v2 patch:

https://patchwork.sourceware.org/project/gcc/list/?series=50779

> >        if (isa != NULL)
> >         {
> >           if (cfun->machine->func_type != TYPE_NORMAL)
> > diff --git a/gcc/testsuite/gcc.target/i386/no-callee-saved-19a.c 
> > b/gcc/testsuite/gcc.target/i386/no-callee-saved-19a.c
> > index 12f35cfa8bb..3ba578df8c2 100644
> > --- a/gcc/testsuite/gcc.target/i386/no-callee-saved-19a.c
> > +++ b/gcc/testsuite/gcc.target/i386/no-callee-saved-19a.c
> > @@ -1,5 +1,5 @@
> >  /* { dg-do compile { target { *-*-linux* && lp64 } } } */
> > -/* { dg-options "-O2 -fno-pic -mtune=generic -msse2 -mno-apxf 
> > -mtune-ctrl=prologue_using_move,epilogue_using_move" } */
> > +/* { dg-options "-O2 -fno-pic -mtune=generic -msse2 -mno-avx -mno-mmx 
> > -mno-80387 -mno-apxf -mtune-ctrl=prologue_using_move,epilogue_using_move" } 
> > */
> >  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
> >  /* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } 
> > {^\t?\.}  } } */
> >
> > diff --git a/gcc/testsuite/gcc.target/i386/no-callee-saved-19b.c 
> > b/gcc/testsuite/gcc.target/i386/no-callee-saved-19b.c
> > index c9343a65470..dc38936a61a 100644
> > --- a/gcc/testsuite/gcc.target/i386/no-callee-saved-19b.c
> > +++ b/gcc/testsuite/gcc.target/i386/no-callee-saved-19b.c
> > @@ -1,5 +1,5 @@
> >  /* { dg-do compile { target { *-*-linux* && maybe_x32 } } } */
> > -/* { dg-options "-O2 -mx32 -fno-pic -mtune=generic -msse2 -mno-apxf 
> > -mtune-ctrl=prologue_using_move,epilogue_using_move" } */
> > +/* { dg-options "-O2 -mx32 -fno-pic -mtune=generic -msse2 -mno-avx 
> > -mno-mmx -mno-80387 -mno-apxf 
> > -mtune-ctrl=prologue_using_move,epilogue_using_move" } */
> >  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
> >  /* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } 
> > {^\t?\.}  } } */
> >
> > diff --git a/gcc/testsuite/gcc.target/i386/no-callee-saved-19c.c 
> > b/gcc/testsuite/gcc.target/i386/no-callee-saved-19c.c
> > index 05aca9f4b11..e7f247b723c 100644
> > --- a/gcc/testsuite/gcc.target/i386/no-callee-saved-19c.c
> > +++ b/gcc/testsuite/gcc.target/i386/no-callee-saved-19c.c
> > @@ -1,5 +1,5 @@
> >  /* { dg-do compile { target { *-*-linux* && ia32 } } } */
> > -/* { dg-options "-O2 -fno-pic -mtune=generic -msse2 
> > -mtune-ctrl=prologue_using_move,epilogue_using_move" } */
> > +/* { dg-options "-O2 -fno-pic -mtune=generic -msse2 -mno-avx -mno-mmx 
> > -mno-80387 -mtune-ctrl=prologue_using_move,epilogue_using_move" } */
> >  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
> >  /* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } 
> > {^\t?\.}  } } */
> >
> > diff --git a/gcc/testsuite/gcc.target/i386/no-callee-saved-19d.c 
> > b/gcc/testsuite/gcc.target/i386/no-callee-saved-19d.c
> > index b3caa3d81b2..4657e170350 100644
> > --- a/gcc/testsuite/gcc.target/i386/no-callee-saved-19d.c
> > +++ b/gcc/testsuite/gcc.target/i386/no-callee-saved-19d.c
> > @@ -1,5 +1,5 @@
> >  /* { dg-do compile { target { *-*-linux* && lp64 } } } */
> > -/* { dg-options "-O2 -fno-pic -mtune=generic -msse2 -mapxf 
> > -mtune-ctrl=prologue_using_move,epilogue_using_move" } */
> > +/* { dg-options "-O2 -fno-pic -mtune=generic -msse2 -mno-avx -mno-mmx 
> > -mno-80387 -mapxf -mtune-ctrl=prologue_using_move,epilogue_using_move" } */
> >  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
> >  /* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } 
> > {^\t?\.}  } } */
> >
> > diff --git a/gcc/testsuite/gcc.target/i386/no-callee-saved-19e.c 
> > b/gcc/testsuite/gcc.target/i386/no-callee-saved-19e.c
> > index 3fcb41ff196..8e0bbe82eae 100644
> > --- a/gcc/testsuite/gcc.target/i386/no-callee-saved-19e.c
> > +++ b/gcc/testsuite/gcc.target/i386/no-callee-saved-19e.c
> > @@ -1,5 +1,5 @@
> >  /* { dg-do compile { target { *-*-linux* && maybe_x32 } } } */
> > -/* { dg-options "-O2 -mx32 -fno-pic -mtune=generic -msse2 -mapxf 
> > -mtune-ctrl=prologue_using_move,epilogue_using_move" } */
> > +/* { dg-options "-O2 -mx32 -fno-pic -mtune=generic -msse2 -mno-avx 
> > -mno-mmx -mno-80387 -mapxf 
> > -mtune-ctrl=prologue_using_move,epilogue_using_move" } */
> >  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
> >  /* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } 
> > {^\t?\.}  } } */
> >
> > diff --git a/gcc/testsuite/gcc.target/i386/pr121208-1a.c 
> > b/gcc/testsuite/gcc.target/i386/pr121208-1a.c
> > index cb8bd0bc8d2..f799bc81d4d 100644
> > --- a/gcc/testsuite/gcc.target/i386/pr121208-1a.c
> > +++ b/gcc/testsuite/gcc.target/i386/pr121208-1a.c
> > @@ -1,5 +1,5 @@
> >  /* { dg-do compile { target *-*-linux* } } */
> > -/* { dg-options "-O2 -fPIC -mno-80387 -mtls-dialect=gnu" } */
> > +/* { dg-options "-O2 -fPIC -mno-avx -mno-mmx -mno-80387 -mtls-dialect=gnu" 
> > } */
> >
> >  extern __thread int bar;
> >  extern void func (void);
> > diff --git a/gcc/testsuite/gcc.target/i386/pr121208-1b.c 
> > b/gcc/testsuite/gcc.target/i386/pr121208-1b.c
> > index 037e9a0899c..ba37abccfc0 100644
> > --- a/gcc/testsuite/gcc.target/i386/pr121208-1b.c
> > +++ b/gcc/testsuite/gcc.target/i386/pr121208-1b.c
> > @@ -1,4 +1,4 @@
> >  /* { dg-do compile { target *-*-linux* } } */
> > -/* { dg-options "-O2 -fPIC -mno-80387 -mtls-dialect=gnu2" } */
> > +/* { dg-options "-O2 -fPIC -mno-avx -mno-mmx -mno-80387 
> > -mtls-dialect=gnu2" } */
> >
> >  #include "pr121208-1a.c"
> > diff --git a/gcc/testsuite/gcc.target/i386/pr121540-1.c 
> > b/gcc/testsuite/gcc.target/i386/pr121540-1.c
> > new file mode 100644
> > index 00000000000..dee9c279d39
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/i386/pr121540-1.c
> > @@ -0,0 +1,8 @@
> > +/* { dg-do compile } */
> > +/* { dg-options "-O2 -march=x86-64" } */
> > +
> > +void
> > + __attribute__ ((no_caller_saved_registers))
> > +fn (void)
> > +{ /* { dg-message "sorry, unimplemented: MMX/3Dnow instructions aren't 
> > allowed" } */
> > +}
> > diff --git a/gcc/testsuite/gcc.target/i386/pr121540-2.c 
> > b/gcc/testsuite/gcc.target/i386/pr121540-2.c
> > new file mode 100644
> > index 00000000000..15a3f40af33
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/i386/pr121540-2.c
> > @@ -0,0 +1,8 @@
> > +/* { dg-do compile } */
> > +/* { dg-options "-O2 -march=x86-64 -mno-mmx" } */
> > +
> > +void
> > + __attribute__ ((no_caller_saved_registers))
> > +fn (void)
> > +{ /* { dg-message "sorry, unimplemented: 80387 instructions aren't 
> > allowed" } */
> > +}
> > --
> > 2.50.1
> >
>
>
> --
> BR,
> Hongtao



-- 
H.J.

Reply via email to