I have a patch that seems to improve register allocation for SIMD
lane operations, and for similar instructions that require a reduced
register range.  However, it showed that a lot of asm tests are
sensitive to the current register allocation.  This patch series
tries to correct the affected cases.  Putting it in first is an
attempt to “prove” that the new tests work both ways.

Tested on aarch64-linux-gnu and pushed.

Richard


Richard Sandiford (6):
  aarch64: Fix move-after-intrinsic function-body tests
  aarch64: Allow moves after tied-register intrinsics
  aarch64: Relax ordering requirements in SVE dup tests
  aarch64: Relax predicate register matches
  aarch64: Relax FP/vector register matches
  aarch64: Avoid hard-coding specific register allocations

 .../g++.target/aarch64/sve/vcond_1.C          | 258 +++++++++---------
 .../advsimd-intrinsics/bfcvtnq2-untied.c      |   5 +
 .../aarch64/advsimd-intrinsics/bfdot-1.c      |  10 +
 .../aarch64/advsimd-intrinsics/vdot-3-1.c     |  10 +
 .../aarch64/advsimd-intrinsics/vshl-opt-6.c   |   2 +-
 .../gcc.target/aarch64/asimd-mul-to-shl-sub.c |   4 +-
 .../gcc.target/aarch64/asm-x-constraint-1.c   |   4 +-
 .../gcc.target/aarch64/auto-init-padding-1.c  |   2 +-
 .../gcc.target/aarch64/auto-init-padding-2.c  |   3 +-
 .../gcc.target/aarch64/auto-init-padding-3.c  |   3 +-
 .../gcc.target/aarch64/auto-init-padding-4.c  |   3 +-
 .../gcc.target/aarch64/auto-init-padding-9.c  |   2 +-
 .../gcc.target/aarch64/fmul_fcvt_2.c          |   6 +-
 gcc/testsuite/gcc.target/aarch64/ldp_stp_17.c |   2 +-
 gcc/testsuite/gcc.target/aarch64/ldp_stp_21.c |   2 +-
 gcc/testsuite/gcc.target/aarch64/ldp_stp_8.c  |   2 +-
 .../gcc.target/aarch64/memset-corner-cases.c  |  22 +-
 .../gcc.target/aarch64/memset-q-reg.c         |  22 +-
 .../gcc.target/aarch64/simd/vaddlv_1.c        |  24 +-
 .../gcc.target/aarch64/simd/vpaddd_f64.c      |   2 +-
 .../gcc.target/aarch64/simd/vpaddd_s64.c      |   2 +-
 .../gcc.target/aarch64/simd/vpaddd_u64.c      |   2 +-
 .../gcc.target/aarch64/sve-neon-modes_1.c     |   4 +-
 .../gcc.target/aarch64/sve-neon-modes_3.c     |  16 +-
 .../aarch64/sve/acle/asm/adda_f16.c           |   5 +
 .../aarch64/sve/acle/asm/adda_f32.c           |   5 +
 .../aarch64/sve/acle/asm/adda_f64.c           |   5 +
 .../gcc.target/aarch64/sve/acle/asm/brka_b.c  |   5 +
 .../gcc.target/aarch64/sve/acle/asm/brkb_b.c  |   5 +
 .../gcc.target/aarch64/sve/acle/asm/brkn_b.c  |   5 +
 .../aarch64/sve/acle/asm/clasta_bf16.c        |   5 +
 .../aarch64/sve/acle/asm/clasta_f16.c         |   5 +
 .../aarch64/sve/acle/asm/clasta_f32.c         |   5 +
 .../aarch64/sve/acle/asm/clasta_f64.c         |   5 +
 .../aarch64/sve/acle/asm/clastb_bf16.c        |   5 +
 .../aarch64/sve/acle/asm/clastb_f16.c         |   5 +
 .../aarch64/sve/acle/asm/clastb_f32.c         |   5 +
 .../aarch64/sve/acle/asm/clastb_f64.c         |   5 +
 .../gcc.target/aarch64/sve/acle/asm/dup_s16.c |  72 +++++
 .../gcc.target/aarch64/sve/acle/asm/dup_s32.c |  60 ++++
 .../gcc.target/aarch64/sve/acle/asm/dup_s64.c |  60 ++++
 .../gcc.target/aarch64/sve/acle/asm/dup_u16.c |  72 +++++
 .../gcc.target/aarch64/sve/acle/asm/dup_u32.c |  60 ++++
 .../gcc.target/aarch64/sve/acle/asm/dup_u64.c |  60 ++++
 .../aarch64/sve/acle/asm/dupq_b16.c           |  86 +++---
 .../aarch64/sve/acle/asm/dupq_b32.c           |  48 ++--
 .../aarch64/sve/acle/asm/dupq_b64.c           |  16 +-
 .../gcc.target/aarch64/sve/acle/asm/dupq_b8.c | 136 ++++-----
 .../aarch64/sve/acle/asm/pfirst_b.c           |   5 +
 .../aarch64/sve/acle/asm/pnext_b16.c          |   5 +
 .../aarch64/sve/acle/asm/pnext_b32.c          |   5 +
 .../aarch64/sve/acle/asm/pnext_b64.c          |   5 +
 .../aarch64/sve/acle/asm/pnext_b8.c           |   5 +
 .../aarch64/sve/acle/general/whilele_10.c     |   2 +-
 .../aarch64/sve/acle/general/whilele_5.c      |  10 +-
 .../aarch64/sve/acle/general/whilele_6.c      |   2 +-
 .../aarch64/sve/acle/general/whilele_7.c      |   6 +-
 .../aarch64/sve/acle/general/whilele_9.c      |   6 +-
 .../aarch64/sve/acle/general/whilelt_1.c      |  10 +-
 .../aarch64/sve/acle/general/whilelt_2.c      |   2 +-
 .../aarch64/sve/acle/general/whilelt_3.c      |   6 +-
 gcc/testsuite/gcc.target/aarch64/sve/adr_1.c  |  24 +-
 gcc/testsuite/gcc.target/aarch64/sve/adr_2.c  |  24 +-
 gcc/testsuite/gcc.target/aarch64/sve/adr_3.c  |  24 +-
 gcc/testsuite/gcc.target/aarch64/sve/adr_4.c  |   6 +-
 gcc/testsuite/gcc.target/aarch64/sve/adr_5.c  |  16 +-
 .../gcc.target/aarch64/sve/extract_1.c        |   4 +-
 .../gcc.target/aarch64/sve/extract_2.c        |   4 +-
 .../gcc.target/aarch64/sve/extract_3.c        |   4 +-
 .../gcc.target/aarch64/sve/extract_4.c        |   4 +-
 .../aarch64/sve/load_scalar_offset_1.c        |   8 +-
 .../aarch64/sve/mask_gather_load_6.c          |   4 +-
 .../aarch64/sve/pcs/args_5_be_bf16.c          |  18 +-
 .../aarch64/sve/pcs/args_5_be_f16.c           |  18 +-
 .../aarch64/sve/pcs/args_5_be_f32.c           |  18 +-
 .../aarch64/sve/pcs/args_5_be_f64.c           |  18 +-
 .../aarch64/sve/pcs/args_5_be_s16.c           |  18 +-
 .../aarch64/sve/pcs/args_5_be_s32.c           |  18 +-
 .../aarch64/sve/pcs/args_5_be_s64.c           |  18 +-
 .../gcc.target/aarch64/sve/pcs/args_5_be_s8.c |  18 +-
 .../aarch64/sve/pcs/args_5_be_u16.c           |  18 +-
 .../aarch64/sve/pcs/args_5_be_u32.c           |  18 +-
 .../aarch64/sve/pcs/args_5_be_u64.c           |  18 +-
 .../gcc.target/aarch64/sve/pcs/args_5_be_u8.c |  18 +-
 .../aarch64/sve/pcs/return_6_1024.c           |  48 ++--
 .../aarch64/sve/pcs/return_6_2048.c           |  48 ++--
 .../gcc.target/aarch64/sve/pcs/return_6_256.c |  48 ++--
 .../gcc.target/aarch64/sve/pcs/return_6_512.c |  48 ++--
 .../gcc.target/aarch64/sve/pcs/return_9.c     |  16 +-
 .../gcc.target/aarch64/sve/pcs/varargs_1.c    |   8 +-
 .../gcc.target/aarch64/sve/peel_ind_2.c       |   2 +-
 .../gcc.target/aarch64/sve/pr89007-1.c        |   2 +-
 .../gcc.target/aarch64/sve/pr89007-2.c        |   2 +-
 gcc/testsuite/gcc.target/aarch64/sve/slp_4.c  |   2 +-
 .../gcc.target/aarch64/sve/spill_3.c          |   8 +-
 .../aarch64/sve/store_scalar_offset_1.c       |   8 +-
 .../gcc.target/aarch64/sve/vcond_18.c         |  14 +-
 .../gcc.target/aarch64/sve/vcond_19.c         |  34 +--
 .../gcc.target/aarch64/sve/vcond_2.c          | 248 ++++++++---------
 .../gcc.target/aarch64/sve/vcond_20.c         |  34 +--
 .../gcc.target/aarch64/sve/vcond_3.c          |  26 +-
 .../gcc.target/aarch64/sve/vcond_7.c          | 198 +++++++-------
 .../aarch64/sve2/acle/asm/aesd_u8.c           |   4 +-
 .../aarch64/sve2/acle/asm/aese_u8.c           |   4 +-
 .../aarch64/sve2/acle/asm/aesimc_u8.c         |   2 +-
 .../aarch64/sve2/acle/asm/aesmc_u8.c          |   2 +-
 .../aarch64/sve2/acle/asm/sli_s16.c           |  15 +
 .../aarch64/sve2/acle/asm/sli_s32.c           |  15 +
 .../aarch64/sve2/acle/asm/sli_s64.c           |  15 +
 .../gcc.target/aarch64/sve2/acle/asm/sli_s8.c |  15 +
 .../aarch64/sve2/acle/asm/sli_u16.c           |  15 +
 .../aarch64/sve2/acle/asm/sli_u32.c           |  15 +
 .../aarch64/sve2/acle/asm/sli_u64.c           |  15 +
 .../gcc.target/aarch64/sve2/acle/asm/sli_u8.c |  15 +
 .../aarch64/sve2/acle/asm/sm4e_u32.c          |   2 +-
 .../aarch64/sve2/acle/asm/sri_s16.c           |  15 +
 .../aarch64/sve2/acle/asm/sri_s32.c           |  15 +
 .../aarch64/sve2/acle/asm/sri_s64.c           |  15 +
 .../gcc.target/aarch64/sve2/acle/asm/sri_s8.c |  15 +
 .../aarch64/sve2/acle/asm/sri_u16.c           |  15 +
 .../aarch64/sve2/acle/asm/sri_u32.c           |  15 +
 .../aarch64/sve2/acle/asm/sri_u64.c           |  15 +
 .../gcc.target/aarch64/sve2/acle/asm/sri_u8.c |  15 +
 .../gcc.target/aarch64/vadd_reduc-1.c         |   4 +-
 .../gcc.target/aarch64/vadd_reduc-2.c         |   4 +-
 gcc/testsuite/gcc.target/aarch64/vfp-1.c      |   4 +-
 126 files changed, 1680 insertions(+), 939 deletions(-)

-- 
2.25.1

Reply via email to