On Tue, Jul 30, 2024 at 9:27 AM Hongtao Liu <crazy...@gmail.com> wrote:
>
> On Fri, Jul 26, 2024 at 4:55 PM Haochen Jiang <haochen.ji...@intel.com> wrote:
> >
> > Hi all,
> >
> > I added related O0 testcase in this patch.
> >
> > Ok for trunk and backport to GCC 14 and GCC 13?
> Ok.
I mean for trunk, and it needs jakub's approval to backport to GCC14.2.
> >
> > Thx,
> > Haochen
> >
> > ---
> >
> > Changes in v2: Add testcases.
> >
> > ---
> >
> > Under -O0, with the "newly" introduced intrins, the variable will be
> > transformed as mem instead of the origin symbol_ref. The compiler will
> > then treat the operand as invalid and turn the operation into nop, which
> > is not expected. Use macro for non-optimize to keep the variable as
> > symbol_ref just as how prefetch intrin does.
> >
> > gcc/ChangeLog:
> >
> >         * config/i386/prfchiintrin.h
> >         (_m_prefetchit0): Add macro for non-optimized option.
> >         (_m_prefetchit1): Ditto.
> >
> > gcc/testsuite/ChangeLog:
> >
> >         * gcc.target/i386/prefetchi-1b.c: New test.
> > ---
> >  gcc/config/i386/prfchiintrin.h               |  9 +++++++
> >  gcc/testsuite/gcc.target/i386/prefetchi-1b.c | 26 ++++++++++++++++++++
> >  2 files changed, 35 insertions(+)
> >  create mode 100644 gcc/testsuite/gcc.target/i386/prefetchi-1b.c
> >
> > diff --git a/gcc/config/i386/prfchiintrin.h b/gcc/config/i386/prfchiintrin.h
> > index dfca89c7d16..d6580e504c0 100644
> > --- a/gcc/config/i386/prfchiintrin.h
> > +++ b/gcc/config/i386/prfchiintrin.h
> > @@ -37,6 +37,7 @@
> >  #define __DISABLE_PREFETCHI__
> >  #endif /* __PREFETCHI__ */
> >
> > +#ifdef __OPTIMIZE__
> >  extern __inline void
> >  __attribute__((__gnu_inline__, __always_inline__, __artificial__))
> >  _m_prefetchit0 (void* __P)
> > @@ -50,6 +51,14 @@ _m_prefetchit1 (void* __P)
> >  {
> >    __builtin_ia32_prefetchi (__P, 2);
> >  }
> > +#else
> > +#define _m_prefetchit0(P)      \
> > +  __builtin_ia32_prefetchi(P, 3);
> > +
> > +#define _m_prefetchit1(P)      \
> > +  __builtin_ia32_prefetchi(P, 2);
> > +
> > +#endif
> >
> >  #ifdef __DISABLE_PREFETCHI__
> >  #undef __DISABLE_PREFETCHI__
> > diff --git a/gcc/testsuite/gcc.target/i386/prefetchi-1b.c 
> > b/gcc/testsuite/gcc.target/i386/prefetchi-1b.c
> > new file mode 100644
> > index 00000000000..93139554d3c
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/i386/prefetchi-1b.c
> > @@ -0,0 +1,26 @@
> > +/* { dg-do compile { target { ! ia32 } } } */
> > +/* { dg-options "-mprefetchi -O0" } */
> > +/* { dg-final { scan-assembler-times "\[ \\t\]+prefetchit0\[ 
> > \\t\]+bar\\(%rip\\)" 1 } } */
> > +/* { dg-final { scan-assembler-times "\[ \\t\]+prefetchit1\[ 
> > \\t\]+bar\\(%rip\\)" 1 } } */
> > +
> > +#include <x86intrin.h>
> > +
> > +int
> > +bar (int a)
> > +{
> > +  return a + 1;
> > +}
> > +
> > +int
> > +foo1 (int b)
> > +{
> > +  _m_prefetchit0 (bar);
> > +  return bar (b) + 1;
> > +}
> > +
> > +int
> > +foo2 (int b)
> > +{
> > +  _m_prefetchit1 (bar);
> > +  return bar (b) + 1;
> > +}
> > --
> > 2.31.1
> >
>
>
> --
> BR,
> Hongtao



-- 
BR,
Hongtao

Reply via email to