diff mbox series

[13/15] aarch64: Add common subset of SVE2p1 and SME2

Message ID mpt8qtw8bmd.fsf@arm.com
State New
Headers show
Series aarch64: Add support for SVE2.1 | expand

Commit Message

Richard Sandiford Nov. 6, 2024, 6:23 p.m. UTC
This patch handles the SVE2p1 instructions that are shared
with SME2.  This includes the consecutive-register forms of
the 2-register and 4-register loads and stores, but not the
strided-register forms.

gcc/
	* config/aarch64/aarch64.h (TARGET_SVE2p1_OR_SME2): New macro.
	* config/aarch64/aarch64-early-ra.cc
	(is_stride_candidate): Require TARGET_STREAMING_SME2
	(early_ra::maybe_convert_to_strided_access): Likewise.
	* config/aarch64/aarch64-sve-builtins-sve2.def: Mark instructions
	that are common to both SVE2p1 and SME2.
	* config/aarch64/aarch64-sve.md
	(@aarch64_<sur>dot_prod_lane<SVE_FULL_SDI:mode><SVE_FULL_BHI:mode>):
	Test TARGET_SVE2p1_OR_SME2 instead of TARGET_STREAMING_SME2.
	(@aarch64_sve_<sve_fp_op>vnx4sf): Move TARGET_SVE_BF16 condition
	into SVE_BFLOAT_TERNARY_LONG.
	(@aarch64_sve_<sve_fp_op>_lanevnx4sf): Likewise
	SVE_BFLOAT_TERNARY_LONG_LANE.
	* config/aarch64/aarch64-sve2.md
	(@aarch64_<LD1_COUNT:optab><mode>): Require TARGET_SVE2p1_OR_SME2
	instead of TARGET_STREAMING_SME2.
	(@aarch64_<ST1_COUNT:optab><mode>): Likewise.
	(@aarch64_sve_ptrue_c<BHSD_BITS>): Likewise.
	(@aarch64_sve_pext<BHSD_BITS>): Likewise.
	(@aarch64_sve_pext<BHSD_BITS>x2): Likewise.
	(@aarch64_sve_cntp_c<BHSD_BITS>): Likewise.
	(@aarch64_sve_fclamp<mode>): Likewise.
	(*aarch64_sve_fclamp<mode>_x): Likewise.
	(<sur>dot_prodvnx4sivnx8hi): Likewise.
	(aarch64_sve_fdotvnx4sfvnx8hf): Likewise.
	(aarch64_fdot_prod_lanevnx4sfvnx8hf): Likewise.
	(@aarch64_sve_while<while_optab_cmp>_b<BHSD_BITS>_x2): Likewise.
	(@aarch64_sve_while<while_optab_cmp>_c<BHSD_BITS>): Likewise.
	(@aarch64_sve_<optab><VNx8HI_ONLY:mode><VNx8SI_ONLY:mode>): Move
	TARGET_STREAMING_SME2 condition into SVE_QCVTxN.
	(@aarch64_sve_<sve_int_op><mode>): Likewise
	SVE2_INT_SHIFT_IMM_NARROWxN, but also require TARGET_STREAMING_SME2
	for the 4-register forms.
	* config/aarch64/iterators.md (SVE_BFLOAT_TERNARY_LONG): Require
	TARGET_SVE2p1_OR_SME2 rather than TARGET_STREAMING_SME2 for
	UNSPEC_BFMLSLB and UNSPEC_BFMLSLT.  Require TARGET_SVE_BF16
	for the others.
	(SVE_BFLOAT_TERNARY_LONG_LANE): Likewise.
	(SVE2_INT_SHIFT_IMM_NARROWxN): Require TARGET_SVE2p1_OR_SME2 for
	the interleaving forms and TARGET_STREAMING_SME2 for the rest.
	(SVE_QCVTxN): Likewise.

gcc/testsuite/
	* gcc.target/aarch64/sve/clamp_3.c: New test.
	* gcc.target/aarch64/sve/clamp_4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/bfmlslb_f32.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/bfmlslb_lane_f32.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/bfmlslt_f32.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/bfmlslt_lane_f32.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/clamp_f16.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/clamp_f32.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/clamp_f64.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/cntp_c16.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/cntp_c32.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/cntp_c64.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/cntp_c8.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/dot_f32.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/dot_lane_f32.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/dot_lane_s32.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/dot_lane_u32.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/dot_s32.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/dot_u32.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ld1_bf16_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ld1_bf16_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ld1_f16_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ld1_f16_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ld1_f32_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ld1_f32_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ld1_f64_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ld1_f64_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ld1_s16_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ld1_s16_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ld1_s32_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ld1_s32_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ld1_s64_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ld1_s64_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ld1_s8_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ld1_s8_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ld1_u16_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ld1_u16_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ld1_u32_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ld1_u32_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ld1_u64_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ld1_u64_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ld1_u8_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ld1_u8_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ldnt1_bf16_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ldnt1_bf16_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ldnt1_f16_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ldnt1_f16_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ldnt1_f32_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ldnt1_f32_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ldnt1_f64_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ldnt1_f64_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ldnt1_s16_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ldnt1_s16_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ldnt1_s32_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ldnt1_s32_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ldnt1_s64_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ldnt1_s64_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ldnt1_s8_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ldnt1_s8_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ldnt1_u16_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ldnt1_u16_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ldnt1_u32_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ldnt1_u32_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ldnt1_u64_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ldnt1_u64_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ldnt1_u8_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ldnt1_u8_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/pext_lane_c16.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/pext_lane_c16_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/pext_lane_c32.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/pext_lane_c32_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/pext_lane_c64.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/pext_lane_c64_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/pext_lane_c8.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/pext_lane_c8_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ptrue_c16.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ptrue_c32.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ptrue_c64.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/ptrue_c8.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/qcvtn_s16_s32_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/qcvtn_u16_s32_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/qcvtn_u16_u32_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/qrshrn_s16_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/qrshrn_u16_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/qrshrun_u16_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/st1_bf16_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/st1_bf16_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/st1_f16_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/st1_f16_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/st1_f32_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/st1_f32_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/st1_f64_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/st1_f64_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/st1_s16_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/st1_s16_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/st1_s32_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/st1_s32_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/st1_s64_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/st1_s64_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/st1_s8_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/st1_s8_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/st1_u16_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/st1_u16_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/st1_u32_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/st1_u32_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/st1_u64_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/st1_u64_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/st1_u8_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/st1_u8_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/stnt1_bf16_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/stnt1_bf16_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/stnt1_f16_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/stnt1_f16_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/stnt1_f32_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/stnt1_f32_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/stnt1_f64_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/stnt1_f64_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/stnt1_s16_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/stnt1_s16_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/stnt1_s32_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/stnt1_s32_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/stnt1_s64_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/stnt1_s64_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/stnt1_s8_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/stnt1_s8_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/stnt1_u16_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/stnt1_u16_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/stnt1_u32_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/stnt1_u32_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/stnt1_u64_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/stnt1_u64_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/stnt1_u8_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/stnt1_u8_x4.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/whilege_b16_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/whilege_b32_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/whilege_b64_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/whilege_b8_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/whilege_c16.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/whilege_c32.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/whilege_c64.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/whilege_c8.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/whilegt_b16_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/whilegt_b32_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/whilegt_b64_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/whilegt_b8_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/whilegt_c16.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/whilegt_c32.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/whilegt_c64.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/whilegt_c8.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/whilele_b16_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/whilele_b32_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/whilele_b64_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/whilele_b8_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/whilele_c16.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/whilele_c32.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/whilele_c64.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/whilele_c8.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/whilelt_b16_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/whilelt_b32_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/whilelt_b64_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/whilelt_b8_x2.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/whilelt_c16.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/whilelt_c32.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/whilelt_c64.c: Likewise.
	* gcc.target/aarch64/sve2/acle/asm/whilelt_c8.c: Likewise.
---
 gcc/config/aarch64/aarch64-early-ra.cc        |   9 +-
 .../aarch64/aarch64-sve-builtins-sve2.def     |  45 ++-
 gcc/config/aarch64/aarch64-sve.md             |  10 +-
 gcc/config/aarch64/aarch64-sve2.md            |  38 +-
 gcc/config/aarch64/aarch64.h                  |   4 +
 gcc/config/aarch64/iterators.md               |  44 ++-
 .../gcc.target/aarch64/sve/clamp_3.c          |  28 ++
 .../gcc.target/aarch64/sve/clamp_4.c          |  22 ++
 .../aarch64/sve2/acle/asm/bfmlslb_f32.c       |  72 ++++
 .../aarch64/sve2/acle/asm/bfmlslb_lane_f32.c  |  91 +++++
 .../aarch64/sve2/acle/asm/bfmlslt_f32.c       |  72 ++++
 .../aarch64/sve2/acle/asm/bfmlslt_lane_f32.c  |  91 +++++
 .../aarch64/sve2/acle/asm/clamp_f16.c         |  49 +++
 .../aarch64/sve2/acle/asm/clamp_f32.c         |  49 +++
 .../aarch64/sve2/acle/asm/clamp_f64.c         |  49 +++
 .../aarch64/sve2/acle/asm/cntp_c16.c          |  46 +++
 .../aarch64/sve2/acle/asm/cntp_c32.c          |  46 +++
 .../aarch64/sve2/acle/asm/cntp_c64.c          |  46 +++
 .../aarch64/sve2/acle/asm/cntp_c8.c           |  46 +++
 .../aarch64/sve2/acle/asm/dot_f32.c           |  51 +++
 .../aarch64/sve2/acle/asm/dot_lane_f32.c      | 100 +++++
 .../aarch64/sve2/acle/asm/dot_lane_s32.c      | 100 +++++
 .../aarch64/sve2/acle/asm/dot_lane_u32.c      | 100 +++++
 .../aarch64/sve2/acle/asm/dot_s32.c           |  51 +++
 .../aarch64/sve2/acle/asm/dot_u32.c           |  51 +++
 .../aarch64/sve2/acle/asm/ld1_bf16_x2.c       | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/ld1_bf16_x4.c       | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/ld1_f16_x2.c        | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/ld1_f16_x4.c        | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/ld1_f32_x2.c        | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/ld1_f32_x4.c        | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/ld1_f64_x2.c        | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/ld1_f64_x4.c        | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/ld1_s16_x2.c        | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/ld1_s16_x4.c        | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/ld1_s32_x2.c        | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/ld1_s32_x4.c        | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/ld1_s64_x2.c        | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/ld1_s64_x4.c        | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/ld1_s8_x2.c         | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/ld1_s8_x4.c         | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/ld1_u16_x2.c        | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/ld1_u16_x4.c        | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/ld1_u32_x2.c        | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/ld1_u32_x4.c        | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/ld1_u64_x2.c        | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/ld1_u64_x4.c        | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/ld1_u8_x2.c         | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/ld1_u8_x4.c         | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/ldnt1_bf16_x2.c     | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/ldnt1_bf16_x4.c     | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/ldnt1_f16_x2.c      | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/ldnt1_f16_x4.c      | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/ldnt1_f32_x2.c      | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/ldnt1_f32_x4.c      | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/ldnt1_f64_x2.c      | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/ldnt1_f64_x4.c      | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/ldnt1_s16_x2.c      | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/ldnt1_s16_x4.c      | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/ldnt1_s32_x2.c      | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/ldnt1_s32_x4.c      | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/ldnt1_s64_x2.c      | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/ldnt1_s64_x4.c      | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/ldnt1_s8_x2.c       | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/ldnt1_s8_x4.c       | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/ldnt1_u16_x2.c      | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/ldnt1_u16_x4.c      | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/ldnt1_u32_x2.c      | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/ldnt1_u32_x4.c      | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/ldnt1_u64_x2.c      | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/ldnt1_u64_x4.c      | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/ldnt1_u8_x2.c       | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/ldnt1_u8_x4.c       | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/pext_lane_c16.c     |  57 +++
 .../aarch64/sve2/acle/asm/pext_lane_c16_x2.c  |  61 +++
 .../aarch64/sve2/acle/asm/pext_lane_c32.c     |  57 +++
 .../aarch64/sve2/acle/asm/pext_lane_c32_x2.c  |  61 +++
 .../aarch64/sve2/acle/asm/pext_lane_c64.c     |  57 +++
 .../aarch64/sve2/acle/asm/pext_lane_c64_x2.c  |  61 +++
 .../aarch64/sve2/acle/asm/pext_lane_c8.c      |  57 +++
 .../aarch64/sve2/acle/asm/pext_lane_c8_x2.c   |  61 +++
 .../aarch64/sve2/acle/asm/ptrue_c16.c         |  48 +++
 .../aarch64/sve2/acle/asm/ptrue_c32.c         |  48 +++
 .../aarch64/sve2/acle/asm/ptrue_c64.c         |  48 +++
 .../aarch64/sve2/acle/asm/ptrue_c8.c          |  48 +++
 .../aarch64/sve2/acle/asm/qcvtn_s16_s32_x2.c  |  57 +++
 .../aarch64/sve2/acle/asm/qcvtn_u16_s32_x2.c  |  57 +++
 .../aarch64/sve2/acle/asm/qcvtn_u16_u32_x2.c  |  57 +++
 .../aarch64/sve2/acle/asm/qrshrn_s16_x2.c     |  57 +++
 .../aarch64/sve2/acle/asm/qrshrn_u16_x2.c     |  57 +++
 .../aarch64/sve2/acle/asm/qrshrun_u16_x2.c    |  57 +++
 .../aarch64/sve2/acle/asm/st1_bf16_x2.c       | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/st1_bf16_x4.c       | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/st1_f16_x2.c        | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/st1_f16_x4.c        | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/st1_f32_x2.c        | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/st1_f32_x4.c        | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/st1_f64_x2.c        | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/st1_f64_x4.c        | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/st1_s16_x2.c        | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/st1_s16_x4.c        | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/st1_s32_x2.c        | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/st1_s32_x4.c        | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/st1_s64_x2.c        | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/st1_s64_x4.c        | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/st1_s8_x2.c         | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/st1_s8_x4.c         | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/st1_u16_x2.c        | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/st1_u16_x4.c        | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/st1_u32_x2.c        | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/st1_u32_x4.c        | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/st1_u64_x2.c        | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/st1_u64_x4.c        | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/st1_u8_x2.c         | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/st1_u8_x4.c         | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/stnt1_bf16_x2.c     | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/stnt1_bf16_x4.c     | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/stnt1_f16_x2.c      | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/stnt1_f16_x4.c      | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/stnt1_f32_x2.c      | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/stnt1_f32_x4.c      | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/stnt1_f64_x2.c      | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/stnt1_f64_x4.c      | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/stnt1_s16_x2.c      | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/stnt1_s16_x4.c      | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/stnt1_s32_x2.c      | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/stnt1_s32_x4.c      | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/stnt1_s64_x2.c      | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/stnt1_s64_x4.c      | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/stnt1_s8_x2.c       | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/stnt1_s8_x4.c       | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/stnt1_u16_x2.c      | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/stnt1_u16_x4.c      | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/stnt1_u32_x2.c      | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/stnt1_u32_x4.c      | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/stnt1_u64_x2.c      | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/stnt1_u64_x4.c      | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/stnt1_u8_x2.c       | 269 +++++++++++++
 .../aarch64/sve2/acle/asm/stnt1_u8_x4.c       | 361 ++++++++++++++++++
 .../aarch64/sve2/acle/asm/whilege_b16_x2.c    | 126 ++++++
 .../aarch64/sve2/acle/asm/whilege_b32_x2.c    | 126 ++++++
 .../aarch64/sve2/acle/asm/whilege_b64_x2.c    | 126 ++++++
 .../aarch64/sve2/acle/asm/whilege_b8_x2.c     | 126 ++++++
 .../aarch64/sve2/acle/asm/whilege_c16.c       | 124 ++++++
 .../aarch64/sve2/acle/asm/whilege_c32.c       | 124 ++++++
 .../aarch64/sve2/acle/asm/whilege_c64.c       | 124 ++++++
 .../aarch64/sve2/acle/asm/whilege_c8.c        | 124 ++++++
 .../aarch64/sve2/acle/asm/whilegt_b16_x2.c    | 126 ++++++
 .../aarch64/sve2/acle/asm/whilegt_b32_x2.c    | 126 ++++++
 .../aarch64/sve2/acle/asm/whilegt_b64_x2.c    | 126 ++++++
 .../aarch64/sve2/acle/asm/whilegt_b8_x2.c     | 126 ++++++
 .../aarch64/sve2/acle/asm/whilegt_c16.c       | 124 ++++++
 .../aarch64/sve2/acle/asm/whilegt_c32.c       | 124 ++++++
 .../aarch64/sve2/acle/asm/whilegt_c64.c       | 124 ++++++
 .../aarch64/sve2/acle/asm/whilegt_c8.c        | 124 ++++++
 .../aarch64/sve2/acle/asm/whilele_b16_x2.c    | 126 ++++++
 .../aarch64/sve2/acle/asm/whilele_b32_x2.c    | 126 ++++++
 .../aarch64/sve2/acle/asm/whilele_b64_x2.c    | 126 ++++++
 .../aarch64/sve2/acle/asm/whilele_b8_x2.c     | 126 ++++++
 .../aarch64/sve2/acle/asm/whilele_c16.c       | 124 ++++++
 .../aarch64/sve2/acle/asm/whilele_c32.c       | 124 ++++++
 .../aarch64/sve2/acle/asm/whilele_c64.c       | 124 ++++++
 .../aarch64/sve2/acle/asm/whilele_c8.c        | 124 ++++++
 .../aarch64/sve2/acle/asm/whilelt_b16_x2.c    | 126 ++++++
 .../aarch64/sve2/acle/asm/whilelt_b32_x2.c    | 126 ++++++
 .../aarch64/sve2/acle/asm/whilelt_b64_x2.c    | 126 ++++++
 .../aarch64/sve2/acle/asm/whilelt_b8_x2.c     | 126 ++++++
 .../aarch64/sve2/acle/asm/whilelt_c16.c       | 124 ++++++
 .../aarch64/sve2/acle/asm/whilelt_c32.c       | 124 ++++++
 .../aarch64/sve2/acle/asm/whilelt_c64.c       | 124 ++++++
 .../aarch64/sve2/acle/asm/whilelt_c8.c        | 124 ++++++
 171 files changed, 36491 insertions(+), 65 deletions(-)
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/clamp_3.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/clamp_4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bfmlslb_f32.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bfmlslb_lane_f32.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bfmlslt_f32.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bfmlslt_lane_f32.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/clamp_f16.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/clamp_f32.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/clamp_f64.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cntp_c16.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cntp_c32.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cntp_c64.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cntp_c8.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/dot_f32.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/dot_lane_f32.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/dot_lane_s32.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/dot_lane_u32.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/dot_s32.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/dot_u32.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ld1_bf16_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ld1_bf16_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ld1_f16_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ld1_f16_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ld1_f32_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ld1_f32_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ld1_f64_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ld1_f64_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ld1_s16_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ld1_s16_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ld1_s32_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ld1_s32_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ld1_s64_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ld1_s64_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ld1_s8_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ld1_s8_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ld1_u16_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ld1_u16_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ld1_u32_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ld1_u32_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ld1_u64_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ld1_u64_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ld1_u8_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ld1_u8_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_bf16_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_bf16_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_f16_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_f16_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_f32_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_f32_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_f64_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_f64_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_s16_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_s16_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_s32_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_s32_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_s64_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_s64_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_s8_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_s8_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_u16_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_u16_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_u32_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_u32_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_u64_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_u64_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_u8_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_u8_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/pext_lane_c16.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/pext_lane_c16_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/pext_lane_c32.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/pext_lane_c32_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/pext_lane_c64.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/pext_lane_c64_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/pext_lane_c8.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/pext_lane_c8_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ptrue_c16.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ptrue_c32.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ptrue_c64.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ptrue_c8.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qcvtn_s16_s32_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qcvtn_u16_s32_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qcvtn_u16_u32_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrn_s16_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrn_u16_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrun_u16_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/st1_bf16_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/st1_bf16_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/st1_f16_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/st1_f16_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/st1_f32_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/st1_f32_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/st1_f64_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/st1_f64_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/st1_s16_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/st1_s16_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/st1_s32_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/st1_s32_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/st1_s64_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/st1_s64_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/st1_s8_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/st1_s8_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/st1_u16_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/st1_u16_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/st1_u32_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/st1_u32_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/st1_u64_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/st1_u64_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/st1_u8_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/st1_u8_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_bf16_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_bf16_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_f16_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_f16_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_f32_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_f32_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_f64_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_f64_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_s16_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_s16_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_s32_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_s32_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_s64_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_s64_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_s8_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_s8_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_u16_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_u16_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_u32_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_u32_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_u64_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_u64_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_u8_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_u8_x4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilege_b16_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilege_b32_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilege_b64_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilege_b8_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilege_c16.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilege_c32.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilege_c64.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilege_c8.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilegt_b16_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilegt_b32_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilegt_b64_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilegt_b8_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilegt_c16.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilegt_c32.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilegt_c64.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilegt_c8.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilele_b16_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilele_b32_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilele_b64_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilele_b8_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilele_c16.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilele_c32.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilele_c64.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilele_c8.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilelt_b16_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilelt_b32_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilelt_b64_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilelt_b8_x2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilelt_c16.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilelt_c32.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilelt_c64.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilelt_c8.c
diff mbox series

Patch

diff --git a/gcc/config/aarch64/aarch64-early-ra.cc b/gcc/config/aarch64/aarch64-early-ra.cc
index bbd84686e13..0db8ea24389 100644
--- a/gcc/config/aarch64/aarch64-early-ra.cc
+++ b/gcc/config/aarch64/aarch64-early-ra.cc
@@ -1062,8 +1062,9 @@  is_stride_candidate (rtx_insn *insn)
     return false;
 
   auto stride_type = get_attr_stride_type (insn);
-  return (stride_type == STRIDE_TYPE_LD1_CONSECUTIVE
-	  || stride_type == STRIDE_TYPE_ST1_CONSECUTIVE);
+  return (TARGET_STREAMING_SME2
+	  && (stride_type == STRIDE_TYPE_LD1_CONSECUTIVE
+	      || stride_type == STRIDE_TYPE_ST1_CONSECUTIVE));
 }
 
 // Go through the constraints of INSN, which has already been extracted,
@@ -3213,9 +3214,9 @@  early_ra::maybe_convert_to_strided_access (rtx_insn *insn)
   auto stride_type = get_attr_stride_type (insn);
   rtx pat = PATTERN (insn);
   rtx op;
-  if (stride_type == STRIDE_TYPE_LD1_CONSECUTIVE)
+  if (TARGET_STREAMING_SME2 && stride_type == STRIDE_TYPE_LD1_CONSECUTIVE)
     op = SET_DEST (pat);
-  else if (stride_type == STRIDE_TYPE_ST1_CONSECUTIVE)
+  else if (TARGET_STREAMING_SME2 && stride_type == STRIDE_TYPE_ST1_CONSECUTIVE)
     op = XVECEXP (SET_SRC (pat), 0, 1);
   else
     return false;
diff --git a/gcc/config/aarch64/aarch64-sve-builtins-sve2.def b/gcc/config/aarch64/aarch64-sve-builtins-sve2.def
index 5cc32aa8871..9e8aad957d5 100644
--- a/gcc/config/aarch64/aarch64-sve-builtins-sve2.def
+++ b/gcc/config/aarch64/aarch64-sve-builtins-sve2.def
@@ -226,40 +226,53 @@  DEF_SVE_FUNCTION (svpsel_lane, select_pred, all_pred_count, none)
 DEF_SVE_FUNCTION (svrevd, unary, all_data, mxz)
 #undef REQUIRED_EXTENSIONS
 
-#define REQUIRED_EXTENSIONS streaming_only (AARCH64_FL_SME2)
-DEF_SVE_FUNCTION_GS (svadd, binary_single, all_integer, x24, none)
+#define REQUIRED_EXTENSIONS sve_and_sme (AARCH64_FL_SVE2p1, AARCH64_FL_SME2)
 DEF_SVE_FUNCTION (svbfmlslb, ternary_bfloat_opt_n, s_float, none)
 DEF_SVE_FUNCTION (svbfmlslb_lane, ternary_bfloat_lane, s_float, none)
 DEF_SVE_FUNCTION (svbfmlslt, ternary_bfloat_opt_n, s_float, none)
 DEF_SVE_FUNCTION (svbfmlslt_lane, ternary_bfloat_lane, s_float, none)
 DEF_SVE_FUNCTION (svclamp, clamp, all_float, none)
-DEF_SVE_FUNCTION_GS (svclamp, clamp, all_arith, x24, none)
 DEF_SVE_FUNCTION (svcntp, count_pred_c, all_count, none)
-DEF_SVE_FUNCTION_GS (svcvt, unary_convertxn, cvt_h_s_float, x2, none)
-DEF_SVE_FUNCTION_GS (svcvt, unary_convertxn, cvt_s_s, x24, none)
-DEF_SVE_FUNCTION_GS (svcvtn, unary_convertxn, cvt_h_s_float, x2, none)
 DEF_SVE_FUNCTION (svdot, ternary_qq_opt_n_or_011, s_narrow_fsu, none)
 DEF_SVE_FUNCTION (svdot_lane, ternary_qq_or_011_lane, s_narrow_fsu, none)
 DEF_SVE_FUNCTION_GS (svld1, load, all_data, x24, implicit)
 DEF_SVE_FUNCTION_GS (svldnt1, load, all_data, x24, implicit)
+DEF_SVE_FUNCTION_GS (svpext_lane, extract_pred, all_count, x12, none)
+DEF_SVE_FUNCTION (svptrue, inherent, all_count, none)
+DEF_SVE_FUNCTION_GS (svqcvtn, unary_convertxn, qcvt_x2, x2, none)
+DEF_SVE_FUNCTION_GS (svqrshrn, shift_right_imm_narrowxn, qrshr_x2, x2, none)
+DEF_SVE_FUNCTION_GS (svqrshrun, shift_right_imm_narrowxn, qrshru_x2, x2, none)
+DEF_SVE_FUNCTION_GS (svst1, storexn, all_data, x24, implicit)
+DEF_SVE_FUNCTION_GS (svstnt1, storexn, all_data, x24, implicit)
+DEF_SVE_FUNCTION_GS (svwhilege, compare_scalar, while_x, x2, none)
+DEF_SVE_FUNCTION (svwhilege, compare_scalar_count, while_x_c, none)
+DEF_SVE_FUNCTION_GS (svwhilegt, compare_scalar, while_x, x2, none)
+DEF_SVE_FUNCTION (svwhilegt, compare_scalar_count, while_x_c, none)
+DEF_SVE_FUNCTION_GS (svwhilele, compare_scalar, while_x, x2, none)
+DEF_SVE_FUNCTION (svwhilele, compare_scalar_count, while_x_c, none)
+DEF_SVE_FUNCTION_GS (svwhilelt, compare_scalar, while_x, x2, none)
+DEF_SVE_FUNCTION (svwhilelt, compare_scalar_count, while_x_c, none)
+#undef REQUIRED_EXTENSIONS
+
+#define REQUIRED_EXTENSIONS streaming_only (AARCH64_FL_SME2)
+DEF_SVE_FUNCTION_GS (svadd, binary_single, all_integer, x24, none)
+DEF_SVE_FUNCTION_GS (svclamp, clamp, all_arith, x24, none)
+DEF_SVE_FUNCTION_GS (svcvt, unary_convertxn, cvt_h_s_float, x2, none)
+DEF_SVE_FUNCTION_GS (svcvt, unary_convertxn, cvt_s_s, x24, none)
+DEF_SVE_FUNCTION_GS (svcvtn, unary_convertxn, cvt_h_s_float, x2, none)
 DEF_SVE_FUNCTION_GS (svmax, binary_opt_single_n, all_arith, x24, none)
 DEF_SVE_FUNCTION_GS (svmaxnm, binary_opt_single_n, all_float, x24, none)
 DEF_SVE_FUNCTION_GS (svmin, binary_opt_single_n, all_arith, x24, none)
 DEF_SVE_FUNCTION_GS (svminnm, binary_opt_single_n, all_float, x24, none)
-DEF_SVE_FUNCTION_GS (svpext_lane, extract_pred, all_count, x12, none)
-DEF_SVE_FUNCTION (svptrue, inherent, all_count, none)
 DEF_SVE_FUNCTION_GS (svqcvt, unary_convertxn, qcvt_x2, x2, none)
 DEF_SVE_FUNCTION_GS (svqcvt, unary_convertxn, qcvt_x4, x4, none)
-DEF_SVE_FUNCTION_GS (svqcvtn, unary_convertxn, qcvt_x2, x2, none)
 DEF_SVE_FUNCTION_GS (svqcvtn, unary_convertxn, qcvt_x4, x4, none)
 DEF_SVE_FUNCTION_GS (svqdmulh, binary_opt_single_n, all_signed, x24, none)
 DEF_SVE_FUNCTION_GS (svqrshr, shift_right_imm_narrowxn, qrshr_x2, x2, none)
 DEF_SVE_FUNCTION_GS (svqrshr, shift_right_imm_narrowxn, qrshr_x4, x4, none)
-DEF_SVE_FUNCTION_GS (svqrshrn, shift_right_imm_narrowxn, qrshr_x2, x2, none)
 DEF_SVE_FUNCTION_GS (svqrshrn, shift_right_imm_narrowxn, qrshr_x4, x4, none)
 DEF_SVE_FUNCTION_GS (svqrshru, shift_right_imm_narrowxn, qrshru_x2, x2, none)
 DEF_SVE_FUNCTION_GS (svqrshru, shift_right_imm_narrowxn, qrshru_x4, x4, none)
-DEF_SVE_FUNCTION_GS (svqrshrun, shift_right_imm_narrowxn, qrshru_x2, x2, none)
 DEF_SVE_FUNCTION_GS (svqrshrun, shift_right_imm_narrowxn, qrshru_x4, x4, none)
 DEF_SVE_FUNCTION_GS (svrinta, unaryxn, s_float, x24, none)
 DEF_SVE_FUNCTION_GS (svrintm, unaryxn, s_float, x24, none)
@@ -267,19 +280,9 @@  DEF_SVE_FUNCTION_GS (svrintn, unaryxn, s_float, x24, none)
 DEF_SVE_FUNCTION_GS (svrintp, unaryxn, s_float, x24, none)
 DEF_SVE_FUNCTION_GS (svrshl, binary_int_opt_single_n, all_integer, x24, none)
 DEF_SVE_FUNCTION_GS (svsel, binaryxn, all_data, x24, implicit)
-DEF_SVE_FUNCTION_GS (svst1, storexn, all_data, x24, implicit)
-DEF_SVE_FUNCTION_GS (svstnt1, storexn, all_data, x24, implicit)
 DEF_SVE_FUNCTION_GS (svunpk, unary_convertxn, bhs_widen, x24, none)
 DEF_SVE_FUNCTION_GS (svuzp, unaryxn, all_data, x24, none)
 DEF_SVE_FUNCTION_GS (svuzpq, unaryxn, all_data, x24, none)
-DEF_SVE_FUNCTION_GS (svwhilege, compare_scalar, while_x, x2, none)
-DEF_SVE_FUNCTION (svwhilege, compare_scalar_count, while_x_c, none)
-DEF_SVE_FUNCTION_GS (svwhilegt, compare_scalar, while_x, x2, none)
-DEF_SVE_FUNCTION (svwhilegt, compare_scalar_count, while_x_c, none)
-DEF_SVE_FUNCTION_GS (svwhilele, compare_scalar, while_x, x2, none)
-DEF_SVE_FUNCTION (svwhilele, compare_scalar_count, while_x_c, none)
-DEF_SVE_FUNCTION_GS (svwhilelt, compare_scalar, while_x, x2, none)
-DEF_SVE_FUNCTION (svwhilelt, compare_scalar_count, while_x_c, none)
 DEF_SVE_FUNCTION_GS (svzip, unaryxn, all_data, x24, none)
 DEF_SVE_FUNCTION_GS (svzipq, unaryxn, all_data, x24, none)
 #undef REQUIRED_EXTENSIONS
diff --git a/gcc/config/aarch64/aarch64-sve.md b/gcc/config/aarch64/aarch64-sve.md
index 3d92a2a454f..f89036c35f7 100644
--- a/gcc/config/aarch64/aarch64-sve.md
+++ b/gcc/config/aarch64/aarch64-sve.md
@@ -7222,7 +7222,7 @@  (define_insn "@aarch64_<sur>dot_prod_lane<SVE_FULL_SDI:mode><SVE_FULL_BHI:mode>"
 	  (match_operand:SVE_FULL_SDI 4 "register_operand")))]
   "TARGET_SVE
    && (<SVE_FULL_SDI:elem_bits> == <SVE_FULL_BHI:elem_bits> * 4
-       || (TARGET_STREAMING_SME2
+       || (TARGET_SVE2p1_OR_SME2
 	   && <SVE_FULL_SDI:elem_bits> == 32
 	   && <SVE_FULL_BHI:elem_bits> == 16))"
   {@ [ cons: =0 , 1 , 2                           , 4 ; attrs: movprfx ]
@@ -7839,8 +7839,8 @@  (define_insn "@aarch64_sve_tmad<mode>"
 ;; - BFDOT (BF16)
 ;; - BFMLALB (BF16)
 ;; - BFMLALT (BF16)
-;; - BFMLSLB (SME2)
-;; - BFMLSLT (SME2)
+;; - BFMLSLB (SVE2p1, SME2)
+;; - BFMLSLT (SVE2p1, SME2)
 ;; - BFMMLA (BF16)
 ;; -------------------------------------------------------------------------
 
@@ -7851,7 +7851,7 @@  (define_insn "@aarch64_sve_<sve_fp_op>vnx4sf"
 	   (match_operand:VNx8BF 2 "register_operand")
 	   (match_operand:VNx8BF 3 "register_operand")]
 	  SVE_BFLOAT_TERNARY_LONG))]
-  "TARGET_SVE_BF16"
+  ""
   {@ [ cons: =0 , 1 , 2 , 3 ; attrs: movprfx ]
      [ w        , 0 , w , w ; *              ] <sve_fp_op>\t%0.s, %2.h, %3.h
      [ ?&w      , w , w , w ; yes            ] movprfx\t%0, %1\;<sve_fp_op>\t%0.s, %2.h, %3.h
@@ -7867,7 +7867,7 @@  (define_insn "@aarch64_sve_<sve_fp_op>_lanevnx4sf"
 	   (match_operand:VNx8BF 3 "register_operand")
 	   (match_operand:SI 4 "const_int_operand")]
 	  SVE_BFLOAT_TERNARY_LONG_LANE))]
-  "TARGET_SVE_BF16"
+  ""
   {@ [ cons: =0 , 1 , 2 , 3 ; attrs: movprfx ]
      [ w        , 0 , w , y ; *              ] <sve_fp_op>\t%0.s, %2.h, %3.h[%4]
      [ ?&w      , w , w , y ; yes            ] movprfx\t%0, %1\;<sve_fp_op>\t%0.s, %2.h, %3.h[%4]
diff --git a/gcc/config/aarch64/aarch64-sve2.md b/gcc/config/aarch64/aarch64-sve2.md
index fd4bd42b6d9..61bae64955f 100644
--- a/gcc/config/aarch64/aarch64-sve2.md
+++ b/gcc/config/aarch64/aarch64-sve2.md
@@ -140,7 +140,7 @@  (define_insn "@aarch64_<optab><mode>"
 	  [(match_operand:VNx16BI 2 "register_operand" "Uph")
 	   (match_operand:SVE_FULLx24 1 "memory_operand" "m")]
 	  LD1_COUNT))]
-  "TARGET_STREAMING_SME2"
+  "TARGET_SVE2p1_OR_SME2"
   "<optab><Vesize>\t%0, %K2/z, %1"
   [(set_attr "stride_type" "ld1_consecutive")]
 )
@@ -276,7 +276,7 @@  (define_insn "@aarch64_<optab><mode>"
 	   (match_operand:SVE_FULLx24 1 "aligned_register_operand" "Uw<vector_count>")
 	   (match_dup 0)]
 	  ST1_COUNT))]
-  "TARGET_STREAMING_SME2"
+  "TARGET_SVE2p1_OR_SME2"
   "<optab><Vesize>\t%1, %K2, %0"
   [(set_attr "stride_type" "st1_consecutive")]
 )
@@ -370,7 +370,7 @@  (define_insn "@aarch64_scatter_stnt_<SVE_FULL_SDI:mode><SVE_PARTIAL_I:mode>"
 (define_insn "@aarch64_sve_ptrue_c<BHSD_BITS>"
   [(set (match_operand:VNx16BI 0 "register_operand" "=Uph")
 	(unspec:VNx16BI [(const_int BHSD_BITS)] UNSPEC_PTRUE_C))]
-  "TARGET_STREAMING_SME2"
+  "TARGET_SVE2p1_OR_SME2"
   "ptrue\t%K0.<bits_etype>"
 )
 
@@ -388,7 +388,7 @@  (define_insn "@aarch64_sve_pext<BHSD_BITS>"
 	   (match_operand:DI 2 "const_int_operand")
 	   (const_int BHSD_BITS)]
 	  UNSPEC_PEXT))]
-  "TARGET_STREAMING_SME2"
+  "TARGET_SVE2p1_OR_SME2"
   "pext\t%0.<bits_etype>, %K1[%2]"
 )
 
@@ -399,7 +399,7 @@  (define_insn "@aarch64_sve_pext<BHSD_BITS>x2"
 	   (match_operand:DI 2 "const_int_operand")
 	   (const_int BHSD_BITS)]
 	  UNSPEC_PEXTx2))]
-  "TARGET_STREAMING_SME2"
+  "TARGET_SVE2p1_OR_SME2"
   "pext\t{%S0.<bits_etype>, %T0.<bits_etype>}, %K1[%2]"
 )
 
@@ -451,7 +451,7 @@  (define_insn "@aarch64_sve_cntp_c<BHSD_BITS>"
 	   (match_operand:DI 2 "const_int_operand")
 	   (const_int BHSD_BITS)]
 	  UNSPEC_CNTP_C))]
-  "TARGET_STREAMING_SME2"
+  "TARGET_SVE2p1_OR_SME2"
   "cntp\t%x0, %K1.<bits_etype>, vlx%2"
 )
 
@@ -1117,7 +1117,7 @@  (define_insn "@aarch64_sve_fclamp<mode>"
 	     UNSPEC_FMAXNM)
 	   (match_operand:SVE_FULL_F 3 "register_operand")]
 	  UNSPEC_FMINNM))]
-  "TARGET_STREAMING_SME2"
+  "TARGET_SVE2p1_OR_SME2"
   {@ [cons: =0,  1, 2, 3; attrs: movprfx]
      [       w, %0, w, w; *             ] fclamp\t%0.<Vetype>, %2.<Vetype>, %3.<Vetype>
      [     ?&w,  w, w, w; yes           ] movprfx\t%0, %1\;fclamp\t%0.<Vetype>, %2.<Vetype>, %3.<Vetype>
@@ -1137,7 +1137,7 @@  (define_insn_and_split "*aarch64_sve_fclamp<mode>_x"
 	     UNSPEC_COND_FMAXNM)
 	   (match_operand:SVE_FULL_F 3 "register_operand")]
 	  UNSPEC_COND_FMINNM))]
-  "TARGET_STREAMING_SME2"
+  "TARGET_SVE2p1_OR_SME2"
   {@ [cons: =0,  1, 2, 3; attrs: movprfx]
      [       w, %0, w, w; *             ] #
      [     ?&w,  w, w, w; yes           ] #
@@ -2039,7 +2039,7 @@  (define_insn "<sur>dot_prodvnx4sivnx8hi"
 	     (match_operand:VNx8HI 2 "register_operand")]
 	    DOTPROD)
 	  (match_operand:VNx4SI 3 "register_operand")))]
-  "TARGET_STREAMING_SME2"
+  "TARGET_SVE2p1_OR_SME2"
   {@ [ cons: =0 , 1 , 2 , 3 ; attrs: movprfx ]
      [ w        , w , w , 0 ; *              ] <sur>dot\t%0.s, %1.h, %2.h
      [ ?&w      , w , w , w ; yes            ] movprfx\t%0, %3\;<sur>dot\t%0.s, %1.h, %2.h
@@ -2137,7 +2137,7 @@  (define_insn "aarch64_sve_fdotvnx4sfvnx8hf"
 	     (match_operand:VNx8HF 2 "register_operand")]
 	    UNSPEC_FDOT)
 	  (match_operand:VNx4SF 3 "register_operand")))]
-  "TARGET_STREAMING_SME2"
+  "TARGET_SVE2p1_OR_SME2"
   {@ [ cons: =0 , 1 , 2 , 3 ; attrs: movprfx ]
      [ w        , w , w , 0 ; *              ] fdot\t%0.s, %1.h, %2.h
      [ ?&w      , w , w , w ; yes            ] movprfx\t%0, %3\;fdot\t%0.s, %1.h, %2.h
@@ -2155,7 +2155,7 @@  (define_insn "aarch64_fdot_prod_lanevnx4sfvnx8hf"
 	       UNSPEC_SVE_LANE_SELECT)]
 	    UNSPEC_FDOT)
 	  (match_operand:VNx4SF 4 "register_operand")))]
-  "TARGET_STREAMING_SME2"
+  "TARGET_SVE2p1_OR_SME2"
   {@ [ cons: =0 , 1 , 2 , 4 ; attrs: movprfx ]
      [ w        , w , y , 0 ; *              ] fdot\t%0.s, %1.h, %2.h[%3]
      [ ?&w      , w , y , w ; yes            ] movprfx\t%0, %4\;fdot\t%0.s, %1.h, %2.h[%3]
@@ -2222,7 +2222,7 @@  (define_insn "@aarch64_sve_<optab><VNx8HI_ONLY:mode><VNx8SI_ONLY:mode>"
 	(unspec:VNx8HI_ONLY
 	  [(match_operand:VNx8SI_ONLY 1 "aligned_register_operand" "Uw<vector_count>")]
 	  SVE_QCVTxN))]
-  "TARGET_STREAMING_SME2"
+  ""
   "<optab>\t%0.h, %1"
 )
 
@@ -2336,6 +2336,14 @@  (define_insn "@aarch64_sve_<sve_int_op><mode>"
 ;; -------------------------------------------------------------------------
 ;; ---- [INT] Multi-vector narrowing right shifts
 ;; -------------------------------------------------------------------------
+;; Includes:
+;; - SQRSHR
+;; - SQRSHRN
+;; - SQRSHRU
+;; - SQRSHRUN
+;; - UQRSHR
+;; - UQRSHRN
+;; -------------------------------------------------------------------------
 
 (define_insn "@aarch64_sve_<sve_int_op><mode>"
   [(set (match_operand:<VNARROW> 0 "register_operand" "=w")
@@ -2343,7 +2351,7 @@  (define_insn "@aarch64_sve_<sve_int_op><mode>"
 	  [(match_operand:SVE_FULL_SIx2_SDIx4 1 "register_operand" "Uw<vector_count>")
 	   (match_operand:DI 2 "const_int_operand")]
 	  SVE2_INT_SHIFT_IMM_NARROWxN))]
-  "TARGET_STREAMING_SME2"
+  "(<MODE>mode == VNx8SImode || TARGET_STREAMING_SME2)"
   "<sve_int_op>\t%0.<Ventype>, %1, #%2"
 )
 
@@ -3145,7 +3153,7 @@  (define_insn "@aarch64_sve_while<while_optab_cmp>_b<BHSD_BITS>_x2"
 	   (const_int BHSD_BITS)]
 	  SVE_WHILE_ORDER))
    (clobber (reg:CC_NZC CC_REGNUM))]
-  "TARGET_STREAMING_SME2"
+  "TARGET_SVE2p1_OR_SME2"
   "while<cmp_op>\t{%S0.<bits_etype>, %T0.<bits_etype>}, %x1, %x2"
 )
 
@@ -3159,7 +3167,7 @@  (define_insn "@aarch64_sve_while<while_optab_cmp>_c<BHSD_BITS>"
 	   (match_operand:DI 3 "const_int_operand")]
 	  SVE_WHILE_ORDER))
    (clobber (reg:CC_NZC CC_REGNUM))]
-  "TARGET_STREAMING_SME2"
+  "TARGET_SVE2p1_OR_SME2"
   "while<cmp_op>\t%K0.<bits_etype>, %x1, %x2, vlx%3"
 )
 
diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h
index 404efa16c28..f07b2c49f0d 100644
--- a/gcc/config/aarch64/aarch64.h
+++ b/gcc/config/aarch64/aarch64.h
@@ -490,6 +490,10 @@  constexpr auto AARCH64_FL_DEFAULT_ISA_MODE ATTRIBUTE_UNUSED
    functions, since streaming mode itself implies SME.  */
 #define TARGET_SVE2p1_OR_SME (TARGET_SVE2p1 || TARGET_STREAMING)
 
+#define TARGET_SVE2p1_OR_SME2 \
+  ((TARGET_SVE2p1 || TARGET_STREAMING) \
+   && (TARGET_SME2 || TARGET_NON_STREAMING))
+
 /* Standard register usage.  */
 
 /* 31 64-bit general purpose registers R0-R30:
diff --git a/gcc/config/aarch64/iterators.md b/gcc/config/aarch64/iterators.md
index b8924cdc74b..73d674816f1 100644
--- a/gcc/config/aarch64/iterators.md
+++ b/gcc/config/aarch64/iterators.md
@@ -3050,19 +3050,19 @@  (define_int_iterator SVE_FP_BINARY_MULTI [UNSPEC_FMAX UNSPEC_FMAXNM
 					  UNSPEC_FMIN UNSPEC_FMINNM])
 
 (define_int_iterator SVE_BFLOAT_TERNARY_LONG
-  [UNSPEC_BFDOT
-   UNSPEC_BFMLALB
-   UNSPEC_BFMLALT
-   (UNSPEC_BFMLSLB "TARGET_STREAMING_SME2")
-   (UNSPEC_BFMLSLT "TARGET_STREAMING_SME2")
-   (UNSPEC_BFMMLA "TARGET_NON_STREAMING")])
+  [(UNSPEC_BFDOT "TARGET_SVE_BF16")
+   (UNSPEC_BFMLALB "TARGET_SVE_BF16")
+   (UNSPEC_BFMLALT "TARGET_SVE_BF16")
+   (UNSPEC_BFMLSLB "TARGET_SVE2p1_OR_SME2")
+   (UNSPEC_BFMLSLT "TARGET_SVE2p1_OR_SME2")
+   (UNSPEC_BFMMLA "TARGET_SVE_BF16 && TARGET_NON_STREAMING")])
 
 (define_int_iterator SVE_BFLOAT_TERNARY_LONG_LANE
-  [UNSPEC_BFDOT
-   UNSPEC_BFMLALB
-   UNSPEC_BFMLALT
-   (UNSPEC_BFMLSLB "TARGET_STREAMING_SME2")
-   (UNSPEC_BFMLSLT "TARGET_STREAMING_SME2")])
+  [(UNSPEC_BFDOT "TARGET_SVE_BF16")
+   (UNSPEC_BFMLALB "TARGET_SVE_BF16")
+   (UNSPEC_BFMLALT "TARGET_SVE_BF16")
+   (UNSPEC_BFMLSLB "TARGET_SVE2p1_OR_SME2")
+   (UNSPEC_BFMLSLT "TARGET_SVE2p1_OR_SME2")])
 
 (define_int_iterator SVE_INT_REDUCTION [UNSPEC_ANDV
 					UNSPEC_IORV
@@ -3338,12 +3338,13 @@  (define_int_iterator SVE2_INT_SHIFT_IMM_NARROWT [UNSPEC_RSHRNT
 						 UNSPEC_UQRSHRNT
 						 UNSPEC_UQSHRNT])
 
-(define_int_iterator SVE2_INT_SHIFT_IMM_NARROWxN [UNSPEC_SQRSHR
-						  UNSPEC_SQRSHRN
-						  UNSPEC_SQRSHRU
-						  UNSPEC_SQRSHRUN
-						  UNSPEC_UQRSHR
-						  UNSPEC_UQRSHRN])
+(define_int_iterator SVE2_INT_SHIFT_IMM_NARROWxN
+  [(UNSPEC_SQRSHR "TARGET_STREAMING_SME2")
+   (UNSPEC_SQRSHRN "TARGET_SVE2p1_OR_SME2")
+   (UNSPEC_SQRSHRU "TARGET_STREAMING_SME2")
+   (UNSPEC_SQRSHRUN "TARGET_SVE2p1_OR_SME2")
+   (UNSPEC_UQRSHR "TARGET_STREAMING_SME2")
+   (UNSPEC_UQRSHRN "TARGET_SVE2p1_OR_SME2")])
 
 (define_int_iterator SVE2_INT_SHIFT_INSERT [UNSPEC_SLI UNSPEC_SRI])
 
@@ -3488,9 +3489,12 @@  (define_int_iterator SVE2_PMULL [UNSPEC_PMULLB UNSPEC_PMULLT])
 
 (define_int_iterator SVE2_PMULL_PAIR [UNSPEC_PMULLB_PAIR UNSPEC_PMULLT_PAIR])
 
-(define_int_iterator SVE_QCVTxN [UNSPEC_SQCVT UNSPEC_SQCVTN
-				 UNSPEC_SQCVTU UNSPEC_SQCVTUN
-				 UNSPEC_UQCVT UNSPEC_UQCVTN])
+(define_int_iterator SVE_QCVTxN [(UNSPEC_SQCVT "TARGET_STREAMING_SME2")
+				 (UNSPEC_SQCVTN "TARGET_SVE2p1_OR_SME2")
+				 (UNSPEC_SQCVTU "TARGET_STREAMING_SME2")
+				 (UNSPEC_SQCVTUN "TARGET_SVE2p1_OR_SME2")
+				 (UNSPEC_UQCVT "TARGET_STREAMING_SME2")
+				 (UNSPEC_UQCVTN "TARGET_SVE2p1_OR_SME2")])
 
 (define_int_iterator SVE2_SFx24_UNARY [UNSPEC_FRINTA UNSPEC_FRINTM
 				       UNSPEC_FRINTN UNSPEC_FRINTP])