On Tue, Jul 23, 2024 at 4:59 AM Haochen Jiang <haochen.ji...@intel.com> wrote: > > Hi all, > > I tested with %a and it works. Therefore I suppose it is a better solution. > > Bootstrapped and regtested on x86-64-pc-linux-gnu. Ok for trunk and backport > to GCC 13 and 14?
OK, also for backports. Thanks, Uros. > > Thx, > Haochen > > --- > > Changes in v2: Use %a in pattern > > --- > > For prefetchi instructions, RIP-relative address is explicitly mentioned > for operand and assembler obeys that rule strictly. This makes > instruction like: > > prefetchit0 bar > > got illegal for assembler, which should be a broad usage for prefetchi. > > Change to %a to explicitly add (%rip) after function label to make it > legal in assembler so that it could pass to linker to get the real address. > > gcc/ChangeLog: > > * config/i386/i386.md (prefetchi): Change to %a. > > gcc/testsuite/ChangeLog: > > * gcc.target/i386/prefetchi-1.c: Check (%rip). > --- > gcc/config/i386/i386.md | 2 +- > gcc/testsuite/gcc.target/i386/prefetchi-1.c | 4 ++-- > 2 files changed, 3 insertions(+), 3 deletions(-) > > diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md > index 90d3aa450f0..6207036a2a0 100644 > --- a/gcc/config/i386/i386.md > +++ b/gcc/config/i386/i386.md > @@ -28004,7 +28004,7 @@ > "TARGET_PREFETCHI && TARGET_64BIT" > { > static const char * const patterns[2] = { > - "prefetchit1\t%0", "prefetchit0\t%0" > + "prefetchit1\t%a0", "prefetchit0\t%a0" > }; > > int locality = INTVAL (operands[1]); > diff --git a/gcc/testsuite/gcc.target/i386/prefetchi-1.c > b/gcc/testsuite/gcc.target/i386/prefetchi-1.c > index 80f25e70e8e..03dfdc55e86 100644 > --- a/gcc/testsuite/gcc.target/i386/prefetchi-1.c > +++ b/gcc/testsuite/gcc.target/i386/prefetchi-1.c > @@ -1,7 +1,7 @@ > /* { dg-do compile { target { ! ia32 } } } */ > /* { dg-options "-mprefetchi -O2" } */ > -/* { dg-final { scan-assembler-times "\[ \\t\]+prefetchit0\[ \\t\]+" 2 } } */ > -/* { dg-final { scan-assembler-times "\[ \\t\]+prefetchit1\[ \\t\]+" 2 } } */ > +/* { dg-final { scan-assembler-times "\[ \\t\]+prefetchit0\[ > \\t\]+bar\\(%rip\\)" 2 } } */ > +/* { dg-final { scan-assembler-times "\[ \\t\]+prefetchit1\[ > \\t\]+bar\\(%rip\\)" 2 } } */ > > #include <x86intrin.h> > > -- > 2.31.1 >