On Fri, Jun 20, 2025, 4:47 PM Wilco Dijkstra <wilco.dijks...@arm.com> wrote:

>
> TARGET_CONST_ANCHOR appears to trigger too often, even on simple
> immediates.
> It inserts extra ADD/SUB instructions even when a single MOV exists.
> Disable it to improve overall code quality: on SPEC2017 it removes
> 1850 ADD/SUB instructions and 630 spill instructions, and SPECINT is ~0.06%
> faster on Neoverse V2.  Adjust a testcase that was confusing neg and fneg.
>
> Passes regress, OK for commit?
>

I am not sure 2017 might be best benchmark for this.
Do you have more data?
Even on which spill is happening where?

This seems like it would be better to improve the RA rather than workaround
it via this.

Also 0.6% is in the noise as far as I know.

Thanks,
Andrew




> gcc:
>         * config/aarch64/aarch64.cc (TARGET_CONST_ANCHOR): Remove.
>
> gcc/testsuite:
>         * gcc.target/aarch64/vneg_s.c: Update test.
>
> ---
>
> diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
> index
> 0a3c246517a86697142589a513a327e5ee930349..51279e29db88f0aa332c40abda68ad3b957b0ef0
> 100644
> --- a/gcc/config/aarch64/aarch64.cc
> +++ b/gcc/config/aarch64/aarch64.cc
> @@ -32444,9 +32444,6 @@ aarch64_libgcc_floating_mode_supported_p
>  #undef TARGET_HAVE_SHADOW_CALL_STACK
>  #define TARGET_HAVE_SHADOW_CALL_STACK true
>
> -#undef TARGET_CONST_ANCHOR
> -#define TARGET_CONST_ANCHOR 0x1000000
> -
>  #undef TARGET_EXTRA_LIVE_ON_ENTRY
>  #define TARGET_EXTRA_LIVE_ON_ENTRY aarch64_extra_live_on_entry
>
> diff --git a/gcc/testsuite/gcc.target/aarch64/vneg_s.c
> b/gcc/testsuite/gcc.target/aarch64/vneg_s.c
> index
> 8ddc4d21c1f89d6c66624a33ee0386cb3a28c512..8d91639faaa1c728095265ce4e61327a4dc441e3
> 100644
> --- a/gcc/testsuite/gcc.target/aarch64/vneg_s.c
> +++ b/gcc/testsuite/gcc.target/aarch64/vneg_s.c
> @@ -256,7 +256,7 @@ test_vnegq_s64 ()
>    return o1||o2||o2||o4;
>  }
>
> -/* { dg-final { scan-assembler-times "neg\\tv\[0-9\]+\.2d, v\[0-9\]+\.2d"
> 1 } } */
> +/* { dg-final { scan-assembler-times "\tneg\\tv\[0-9\]+\.2d,
> v\[0-9\]+\.2d" 1 } } */
>
>  int
>  main (int argc, char **argv)
>
>

Reply via email to