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