On 11/07/2024 19:31, Richard Sandiford wrote:
> These tests used to generate:
> 
>         bl      swap
>         ldr     r2, [sp, #4]
>         mov     r0, r2  @ __fp16
> 
> but g:9d20529d94b23275885f380d155fe8671ab5353a means that we can
> load directly into r0:
> 
>         bl      swap
>         ldrh    r0, [sp, #4]    @ __fp16
> 
> This patch updates the tests to "defend" this change.
> 
> While there, the scans include:
> 
> mov\tr1, r[03]}
> 
> But if the spill of r2 occurs first, there's no real reason why
> r2 couldn't be used as the temporary, instead r3.
> 
> The patch tries to update the scans while preserving the spirit
> of the originals.
> 
> Spot-checked with armv8l-unknown-linux-gnueabihf.  OK to install?
> 
> Richard

OK.

I'm not sure that these tests are really doing very much; it would probably be 
better if they could be rewritten using the gcc.target/arm/aapcs framework.  
But that's for another day.

R.

> 
> 
> gcc/testsuite/
>       * gcc.target/arm/fp16-aapcs-2.c: Expect the return value to be
>       loaded directly from the stack.  Test that the swap generates
>       two moves out of r0/r1 and two moves in.
>       * gcc.target/arm/fp16-aapcs-4.c: Likewise.
> ---
>  gcc/testsuite/gcc.target/arm/fp16-aapcs-2.c | 8 +++++---
>  gcc/testsuite/gcc.target/arm/fp16-aapcs-4.c | 8 +++++---
>  2 files changed, 10 insertions(+), 6 deletions(-)
> 
> diff --git a/gcc/testsuite/gcc.target/arm/fp16-aapcs-2.c 
> b/gcc/testsuite/gcc.target/arm/fp16-aapcs-2.c
> index c34387f5782..12d20560f53 100644
> --- a/gcc/testsuite/gcc.target/arm/fp16-aapcs-2.c
> +++ b/gcc/testsuite/gcc.target/arm/fp16-aapcs-2.c
> @@ -16,6 +16,8 @@ F (__fp16 a, __fp16 b, __fp16 c)
>    return c;
>  }
>  
> -/* { dg-final { scan-assembler-times {mov\tr[0-9]+, r[0-2]} 3 } }  */
> -/* { dg-final { scan-assembler-times {mov\tr1, r[03]} 1 } }  */
> -/* { dg-final { scan-assembler-times {mov\tr0, r[0-9]+} 2 } }  */
> +/* The swap must include two moves out of r0/r1 and two moves in.  */
> +/* { dg-final { scan-assembler-times {mov\tr[0-9]+, r[01]} 2 } }  */
> +/* { dg-final { scan-assembler-times {mov\tr[01], r[0-9]+} 2 } }  */
> +/* c should be spilled around the call.  */
> +/* { dg-final { scan-assembler {str\tr2, ([^\n]*).*ldrh\tr0, \1} { target 
> arm_little_endian } } } */
> diff --git a/gcc/testsuite/gcc.target/arm/fp16-aapcs-4.c 
> b/gcc/testsuite/gcc.target/arm/fp16-aapcs-4.c
> index daac29137ae..09fa64aa494 100644
> --- a/gcc/testsuite/gcc.target/arm/fp16-aapcs-4.c
> +++ b/gcc/testsuite/gcc.target/arm/fp16-aapcs-4.c
> @@ -16,6 +16,8 @@ F (__fp16 a, __fp16 b, __fp16 c)
>    return c;
>  }
>  
> -/* { dg-final { scan-assembler-times {mov\tr[0-9]+, r[0-2]} 3 } }  */
> -/* { dg-final { scan-assembler-times {mov\tr1, r[03]} 1 } }  */
> -/* { dg-final { scan-assembler-times {mov\tr0, r[0-9]+} 2 } }  */
> +/* The swap must include two moves out of r0/r1 and two moves in.  */
> +/* { dg-final { scan-assembler-times {mov\tr[0-9]+, r[01]} 2 } }  */
> +/* { dg-final { scan-assembler-times {mov\tr[01], r[0-9]+} 2 } }  */
> +/* c should be spilled around the call.  */
> +/* { dg-final { scan-assembler {str\tr2, ([^\n]*).*ldrh\tr0, \1} { target 
> arm_little_endian } } } */

Reply via email to