]> git.ipfire.org Git - thirdparty/gcc.git/commit
aarch64: Forbid F64MM permutes in streaming mode
authorRichard Sandiford <richard.sandiford@arm.com>
Thu, 31 Oct 2024 19:52:06 +0000 (19:52 +0000)
committerRichard Sandiford <richard.sandiford@arm.com>
Thu, 31 Oct 2024 19:52:06 +0000 (19:52 +0000)
commit94b9ffbdd9a3a2d3c71afb67e0fd6b7ce1d51391
treefb447c287d2d8a9c0943514a7c44d1785d909f16
parent2a4ee57b04398e54284e3d6b5ed4f8842ee26a5c
aarch64: Forbid F64MM permutes in streaming mode

The current code was based on an early version of the SME spec,
which allowed the .Q forms of TRN1, TRN2, UZP1, UZP2, ZIP1, and ZIP2
to be used in streaming mode.  We should now forbid them instead;
see https://developer.arm.com/documentation/ddi0602/2024-09/SVE-Instructions/TRN1--TRN2--vectors---Interleave-even-or-odd-elements-from-two-vectors-?lang=en
and the corresponding entries for the others.

gcc/
* config/aarch64/aarch64-sve-builtins-base.def (svtrn1q, svtrn2q)
(svuzp1q, svuzp2q, svzip1q, svzip2q): Require SM_OFF.

gcc/testsuite/
* g++.target/aarch64/sve/aarch64-ssve.exp: Add tests for trn[12]q,
uzp[12].c, and zip[12]q.
* gcc.target/aarch64/sve/acle/asm/trn1q_bf16.c: Skip for
STREAMING_COMPATIBLE.
* gcc.target/aarch64/sve/acle/asm/trn1q_f16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/trn1q_f32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/trn1q_f64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/trn1q_s16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/trn1q_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/trn1q_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/trn1q_s8.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/trn1q_u16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/trn1q_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/trn1q_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/trn1q_u8.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/trn2q_bf16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/trn2q_f16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/trn2q_f32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/trn2q_f64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/trn2q_s16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/trn2q_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/trn2q_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/trn2q_s8.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/trn2q_u16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/trn2q_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/trn2q_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/trn2q_u8.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/uzp1q_bf16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/uzp1q_f16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/uzp1q_f32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/uzp1q_f64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/uzp1q_s16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/uzp1q_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/uzp1q_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/uzp1q_s8.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/uzp1q_u16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/uzp1q_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/uzp1q_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/uzp1q_u8.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/uzp2q_bf16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/uzp2q_f16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/uzp2q_f32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/uzp2q_f64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/uzp2q_s16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/uzp2q_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/uzp2q_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/uzp2q_s8.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/uzp2q_u16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/uzp2q_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/uzp2q_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/uzp2q_u8.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/zip1q_bf16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/zip1q_f16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/zip1q_f32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/zip1q_f64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/zip1q_s16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/zip1q_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/zip1q_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/zip1q_s8.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/zip1q_u16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/zip1q_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/zip1q_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/zip1q_u8.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/zip2q_bf16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/zip2q_f16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/zip2q_f32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/zip2q_f64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/zip2q_s16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/zip2q_s32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/zip2q_s64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/zip2q_s8.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/zip2q_u16.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/zip2q_u32.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/zip2q_u64.c: Likewise.
* gcc.target/aarch64/sve/acle/asm/zip2q_u8.c: Likewise.
74 files changed:
gcc/config/aarch64/aarch64-sve-builtins-base.def
gcc/testsuite/g++.target/aarch64/sve/aarch64-ssve.exp
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/trn1q_bf16.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/trn1q_f16.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/trn1q_f32.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/trn1q_f64.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/trn1q_s16.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/trn1q_s32.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/trn1q_s64.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/trn1q_s8.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/trn1q_u16.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/trn1q_u32.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/trn1q_u64.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/trn1q_u8.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/trn2q_bf16.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/trn2q_f16.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/trn2q_f32.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/trn2q_f64.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/trn2q_s16.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/trn2q_s32.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/trn2q_s64.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/trn2q_s8.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/trn2q_u16.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/trn2q_u32.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/trn2q_u64.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/trn2q_u8.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/uzp1q_bf16.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/uzp1q_f16.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/uzp1q_f32.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/uzp1q_f64.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/uzp1q_s16.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/uzp1q_s32.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/uzp1q_s64.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/uzp1q_s8.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/uzp1q_u16.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/uzp1q_u32.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/uzp1q_u64.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/uzp1q_u8.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/uzp2q_bf16.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/uzp2q_f16.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/uzp2q_f32.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/uzp2q_f64.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/uzp2q_s16.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/uzp2q_s32.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/uzp2q_s64.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/uzp2q_s8.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/uzp2q_u16.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/uzp2q_u32.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/uzp2q_u64.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/uzp2q_u8.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/zip1q_bf16.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/zip1q_f16.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/zip1q_f32.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/zip1q_f64.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/zip1q_s16.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/zip1q_s32.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/zip1q_s64.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/zip1q_s8.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/zip1q_u16.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/zip1q_u32.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/zip1q_u64.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/zip1q_u8.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/zip2q_bf16.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/zip2q_f16.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/zip2q_f32.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/zip2q_f64.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/zip2q_s16.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/zip2q_s32.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/zip2q_s64.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/zip2q_s8.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/zip2q_u16.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/zip2q_u32.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/zip2q_u64.c
gcc/testsuite/gcc.target/aarch64/sve/acle/asm/zip2q_u8.c