]> git.ipfire.org Git - thirdparty/gcc.git/commit
aarch64: Fix gcc.target/aarch64/sve/pcs failures
authorRichard Sandiford <richard.sandiford@arm.com>
Tue, 20 Jun 2023 20:48:38 +0000 (21:48 +0100)
committerRichard Sandiford <richard.sandiford@arm.com>
Tue, 20 Jun 2023 20:48:38 +0000 (21:48 +0100)
commit079f31c553182f49eda70f4d4ce839c3e35bf6cf
treeef59ee115d57a22f1b7ce0312732e556465fd307
parent580b74a79146e51268dd11192d3870645adb0bbb
aarch64: Fix gcc.target/aarch64/sve/pcs failures

Several gcc.target/aarch64/sve/pcs tests started failing after
6a2e8dcbbd4, because the tests weren't robust against whether
an indirect argument register or the stack pointer was used as
the base for stores.

The patch allows either base register when there is only one
indirect argument.  It disables -fcprop-registers in cases where
there are sometimes multiple indirect arguments, since the name
of the argument register is then an important part of the test.

Disabling -fcprop-registers gives poor final register allocation,
since:

* combine's make_more_copies hack adds extra redundant moves
* code with those moves is not allocated as well as moves without them
* we often rely on -fcprop-registers to clean up the allocation later

The patch therefore disables combine in the same tests as
cprop-registers.

gcc/testsuite/
* gcc.target/aarch64/sve/pcs/args_1.c: Match moves from the stack
pointer to indirect argument registers and allow either to be used
as the base register in subsequent stores.
* gcc.target/aarch64/sve/pcs/args_8.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_2.c: Allow the store of the
indirect argument to happen via the argument register or the
stack pointer.
* gcc.target/aarch64/sve/pcs/args_3.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_4.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_5_be_bf16.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_5_be_f16.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_5_be_f32.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_5_be_f64.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_5_be_s16.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_5_be_s32.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_5_be_s64.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_5_be_s8.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_5_be_u16.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_5_be_u32.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_5_be_u64.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_5_be_u8.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_5_le_bf16.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_5_le_f16.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_5_le_f32.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_5_le_f64.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_5_le_s16.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_5_le_s32.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_5_le_s64.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_5_le_s8.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_5_le_u16.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_5_le_u32.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_5_le_u64.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_5_le_u8.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_6_be_bf16.c: Disable
-fcprop-registers and combine.
* gcc.target/aarch64/sve/pcs/args_6_be_f16.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_6_be_f32.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_6_be_f64.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_6_be_s16.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_6_be_s32.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_6_be_s64.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_6_be_s8.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_6_be_u16.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_6_be_u32.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_6_be_u64.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_6_be_u8.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_6_le_bf16.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_6_le_f16.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_6_le_f32.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_6_le_f64.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_6_le_s16.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_6_le_s32.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_6_le_s64.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_6_le_s8.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_6_le_u16.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_6_le_u32.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_6_le_u64.c: Likewise.
* gcc.target/aarch64/sve/pcs/args_6_le_u8.c: Likewise.
* gcc.target/aarch64/sve/pcs/varargs_1.c: Likewise.
* gcc.target/aarch64/sve/pcs/varargs_2_f16.c: Likewise.
* gcc.target/aarch64/sve/pcs/varargs_2_f32.c: Likewise.
* gcc.target/aarch64/sve/pcs/varargs_2_f64.c: Likewise.
* gcc.target/aarch64/sve/pcs/varargs_2_s16.c: Likewise.
* gcc.target/aarch64/sve/pcs/varargs_2_s32.c: Likewise.
* gcc.target/aarch64/sve/pcs/varargs_2_s64.c: Likewise.
* gcc.target/aarch64/sve/pcs/varargs_2_s8.c: Likewise.
* gcc.target/aarch64/sve/pcs/varargs_2_u16.c: Likewise.
* gcc.target/aarch64/sve/pcs/varargs_2_u32.c: Likewise.
* gcc.target/aarch64/sve/pcs/varargs_2_u64.c: Likewise.
* gcc.target/aarch64/sve/pcs/varargs_2_u8.c: Likewise.
* gcc.target/aarch64/sve/pcs/varargs_3_nosc.c: Likewise.
* gcc.target/aarch64/sve/pcs/varargs_3_sc.c: Likewise.
67 files changed:
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_1.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_2.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_3.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_4.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_5_be_bf16.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_5_be_f16.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_5_be_f32.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_5_be_f64.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_5_be_s16.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_5_be_s32.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_5_be_s64.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_5_be_s8.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_5_be_u16.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_5_be_u32.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_5_be_u64.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_5_be_u8.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_5_le_bf16.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_5_le_f16.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_5_le_f32.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_5_le_f64.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_5_le_s16.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_5_le_s32.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_5_le_s64.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_5_le_s8.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_5_le_u16.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_5_le_u32.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_5_le_u64.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_5_le_u8.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_6_be_bf16.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_6_be_f16.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_6_be_f32.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_6_be_f64.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_6_be_s16.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_6_be_s32.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_6_be_s64.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_6_be_s8.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_6_be_u16.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_6_be_u32.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_6_be_u64.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_6_be_u8.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_6_le_bf16.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_6_le_f16.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_6_le_f32.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_6_le_f64.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_6_le_s16.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_6_le_s32.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_6_le_s64.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_6_le_s8.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_6_le_u16.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_6_le_u32.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_6_le_u64.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_6_le_u8.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/args_8.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_1.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_f16.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_f32.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_f64.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_s16.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_s32.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_s64.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_s8.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_u16.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_u32.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_u64.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_u8.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_3_nosc.c
gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_3_sc.c