> -----Original Message-----
> From: Haochen Jiang <haochen.ji...@intel.com>
> Sent: Monday, July 22, 2024 2:41 PM
> To: gcc-patches@gcc.gnu.org
> Cc: Liu, Hongtao <hongtao....@intel.com>; ubiz...@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

Reply via email to