diff mbox series

i386: Change prefetchi output template

Message ID 20240722064109.3849227-1-haochen.jiang@intel.com
State New
Headers show
Series i386: Change prefetchi output template | expand

Commit Message

Haochen Jiang July 22, 2024, 6:41 a.m. UTC
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(-)

Comments

Kong, Lingling July 22, 2024, 7:42 a.m. UTC | #1
> -----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 mbox series

Patch

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>