Message ID | 20240722064109.3849227-1-haochen.jiang@intel.com |
---|---|
State | New |
Headers | show |
Series | i386: Change prefetchi output template | expand |
> -----Original Message----- > From: Haochen Jiang <haochen.jiang@intel.com> > Sent: Monday, July 22, 2024 2:41 PM > To: gcc-patches@gcc.gnu.org > Cc: Liu, Hongtao <hongtao.liu@intel.com>; ubizjak@gmail.com > Subject: [PATCH] i386: Change prefetchi output template > > Hi all, > > 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. > > Explicitly add (%rip) after function label to make it legal in assembler so that it > could pass to linker to get the real address. > > Ok for trunk and backport to GCC14 and GCC13 since prefetchi instructions are > introduced in GCC13? > > Thx, > Haochen > > gcc/ChangeLog: > > * config/i386/i386.md (prefetchi): Add explicit (%rip) after > function label. > > 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..3ec51bad6fe 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{%p0(%%rip)|%p0[rip]}", "prefetchit0\t{%p0(%%rip)|%p0[rip]}" > }; "prefetchit1\t%a0", "prefetchit0\t%a0" maybe better. Thanks, Lingling > 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
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 90d3aa450f0..3ec51bad6fe 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{%p0(%%rip)|%p0[rip]}", "prefetchit0\t{%p0(%%rip)|%p0[rip]}" }; 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>