> -----Original Message-----
> From: Artemiy Volkov <[email protected]>
> Sent: 08 June 2026 13:44
> To: [email protected]
> Cc: Tamar Christina <[email protected]>; Wilco Dijkstra
> <[email protected]>; [email protected]; Richard
> Earnshaw <[email protected]>; [email protected]; Alice
> Carlotti <[email protected]>; Alex Coplan <[email protected]>;
> Artemiy Volkov <[email protected]>
> Subject: [PATCH] aarch64: use ZIP1 instead of UZP1 for concatenation
> [PR125550]
>
> This patch addresses the issue in PR125550, where two float16 values are
> being concatenated using uzp1, i.e., this code:
>
> svfloat16_t foo (float x0, float x1)
> {
> return svdupq_n_f16 (x0, x1, x0, x1, x0, x1, x0, x1);
> }
>
> is being compiled into:
>
> fcvt h0, s0
> fcvt h1, s1
> uzp1 v0.4h, v0.4h, v1.4h
> mov z0.s, s0
> ret
>
> causing the duplication of a 2-element vector (0, (float16) x0) into z0.
>
> This is a copy-paste error from the original combine_internal patterns,
> where UZP1 always operates on vectors of 2 elements, in which circumstance
> it is equivalent to ZIP1. For smaller element sizes (and thus higher
> element counts) only ZIP1 is correct.
>
> The fix is to emit ZIP1 when concatenating values on vector registers.
> For consistency, I've changed the original combine_internal patterns as
> well as the ones added in r17-898-g920eeb67a3537b. Since this latter
> change has nothing to do with the PR, it could have been better to split
> the patch in two; I'd be happy to do that if necessary.
>
> Both aforementioned changes required adjusting existing AdvSIMD/SVE
> vec_init-related testcases; I've added pr125550.c from the PR on top of
> that as well.
>
> Bootstrapped and regtested on aarch64-linux-gnu.
>
> PR target/125550
>
> gcc/ChangeLog:
>
> * config/aarch64/aarch64-simd.md
> (*aarch64_combine_internal<mode>): Use zip1 instead of uzp1
> to concatenate values residing in SIMD registers.
> (*aarch64_combine_internal_be<mode>: Likewise.
>
> gcc/testsuite/ChangeLog:
>
> * gcc.target/aarch64/ldp_stp_16.c: Adjust testcases.
> * gcc.target/aarch64/pr109072_1.c: Likewise.
> * gcc.target/aarch64/simd/mf8_data_1.c: Likewise.
> * gcc.target/aarch64/sve/vec_init_5.c: Likewise.
> * gcc.target/aarch64/vec-init-14.c: Likewise.
> * gcc.target/aarch64/vec-init-23.c: Likewise.
> * gcc.target/aarch64/vec-init-9.c: Likewise.
> * gcc.target/aarch64/sve/pr125550.c: New test.
OK.
Thanks,
Tamar
> ---
> gcc/config/aarch64/aarch64-simd.md | 8 +++---
> gcc/testsuite/gcc.target/aarch64/ldp_stp_16.c | 10 +++----
> gcc/testsuite/gcc.target/aarch64/pr109072_1.c | 4 +--
> .../gcc.target/aarch64/simd/mf8_data_1.c | 18 ++++++-------
> .../gcc.target/aarch64/sve/pr125550.c | 19 ++++++++++++++
> .../gcc.target/aarch64/sve/vec_init_5.c | 26 +++++++++----------
> .../gcc.target/aarch64/vec-init-14.c | 4 +--
> .../gcc.target/aarch64/vec-init-23.c | 26 +++++++++----------
> gcc/testsuite/gcc.target/aarch64/vec-init-9.c | 12 ++++-----
> 9 files changed, 73 insertions(+), 54 deletions(-)
> create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/pr125550.c
>
> diff --git a/gcc/config/aarch64/aarch64-simd.md
> b/gcc/config/aarch64/aarch64-simd.md
> index 843ad6cb076..b2e8fe3f6a9 100644
> --- a/gcc/config/aarch64/aarch64-simd.md
> +++ b/gcc/config/aarch64/aarch64-simd.md
> @@ -4869,7 +4869,7 @@
> && (register_operand (operands[0], <VDBL>mode)
> || register_operand (operands[2], <MODE>mode))"
> {@ [ cons: =0 , 1 , 2 ; attrs: type , arch ]
> - [ w , w , w ; neon_permute<dblq> , simd ]
> uzp1\t%0.2<single_type>, %1.2<single_type>, %2.2<single_type>
> + [ w , w , w ; neon_permute<dblq> , simd ]
> zip1\t%0.2<single_type>, %1.2<single_type>, %2.2<single_type>
> [ w , 0 , ?r ; neon_from_gp<dblq> , simd ]
> ins\t%0.<single_type>[1], %<single_wx>2
> [ w , 0 , ?r ; f_mcr , * ]
> fmov\t%0.d[1], %2
> [ w , 0 , Utv ; neon_load1_one_lane<dblq> , simd ]
> ld1\t{%0.<single_type>}[1], %2
> @@ -4886,7 +4886,7 @@
> "TARGET_FLOAT
> && !BYTES_BIG_ENDIAN"
> {@ [ cons: =0 , 1 , 2 ; attrs: type , arch ]
> - [ w , w , w ; neon_permute , simd ]
> uzp1\t%0.<Vdduptype>,
> %1.<Vdduptype>, %2.<Vdduptype>
> + [ w , w , w ; neon_permute , simd ]
> zip1\t%0.<Vdduptype>,
> %1.<Vdduptype>, %2.<Vdduptype>
> [ w , 0 , w ; neon_move , simd ]
> mov\t%0.<single_type>[1],
> %2.<single_type>[0]
> [ w , 0 , Utv ; neon_load1_one_lane , simd ]
> ld1\t{%0.<single_type>}[1], %2
> [ w , 0 , r ; neon_from_gp , simd ]
> ins\t%0.<single_type>[1],
> %<single_wx>2
> @@ -4916,7 +4916,7 @@
> && (register_operand (operands[0], <VDBL>mode)
> || register_operand (operands[2], <MODE>mode))"
> {@ [ cons: =0 , 1 , 2 ; attrs: type , arch ]
> - [ w , w , w ; neon_permute<dblq> , simd ]
> uzp1\t%0.2<single_type>, %1.2<single_type>, %2.2<single_type>
> + [ w , w , w ; neon_permute<dblq> , simd ]
> zip1\t%0.2<single_type>, %1.2<single_type>, %2.2<single_type>
> [ w , 0 , ?r ; neon_from_gp<dblq> , simd ]
> ins\t%0.<single_type>[1], %<single_wx>2
> [ w , 0 , ?r ; f_mcr , * ]
> fmov\t%0.d[1], %2
> [ w , 0 , Utv ; neon_load1_one_lane<dblq> , simd ]
> ld1\t{%0.<single_type>}[1], %2
> @@ -4933,7 +4933,7 @@
> "TARGET_FLOAT
> && BYTES_BIG_ENDIAN"
> {@ [ cons: =0 , 1 , 2 ; attrs: type , arch ]
> - [ w , w , w ; neon_permute , simd ]
> uzp1\t%0.<Vdduptype>,
> %1.<Vdduptype>, %2.<Vdduptype>
> + [ w , w , w ; neon_permute , simd ]
> zip1\t%0.<Vdduptype>,
> %1.<Vdduptype>, %2.<Vdduptype>
> [ w , 0 , w ; neon_move , simd ]
> mov\t%0.<single_type>[1],
> %2.<single_type>[0]
> [ w , 0 , Utv ; neon_load1_one_lane , simd ]
> ld1\t{%0.<single_type>}[1], %2
> [ w , 0 , r ; neon_from_gp , simd ]
> ins\t%0.<single_type>[1],
> %<single_wx>2
> diff --git a/gcc/testsuite/gcc.target/aarch64/ldp_stp_16.c
> b/gcc/testsuite/gcc.target/aarch64/ldp_stp_16.c
> index a6b4d50f34f..e8c975e900f 100644
> --- a/gcc/testsuite/gcc.target/aarch64/ldp_stp_16.c
> +++ b/gcc/testsuite/gcc.target/aarch64/ldp_stp_16.c
> @@ -80,14 +80,14 @@ CONS2_FN (2, float);
>
> /*
> ** cons2_4_float: { target aarch64_little_endian }
> -** uzp1 v([0-9])\.2s, v0\.2s, v1\.2s
> +** zip1 v([0-9])\.2s, v0\.2s, v1\.2s
> ** stp d\1, d\1, \[x0\]
> ** stp d\1, d\1, \[x0, #?16\]
> ** ret
> */
> /*
> ** cons2_4_float: { target aarch64_big_endian }
> -** uzp1 v([0-9])\.2s, v1\.2s, v0\.2s
> +** zip1 v([0-9])\.2s, v1\.2s, v0\.2s
> ** stp d\1, d\1, \[x0\]
> ** stp d\1, d\1, \[x0, #?16\]
> ** ret
> @@ -96,7 +96,7 @@ CONS2_FN (4, float);
>
> /*
> ** cons2_8_float:
> -** uzp1 v1\.2s, v0\.2s, v1\.2s
> +** zip1 v1\.2s, v0\.2s, v1\.2s
> ** dup v([0-9]+)\.2d, v1\.d\[0\]
> ** stp q\1, q\1, \[x0\]
> ** stp q\1, q\1, \[x0, #?32\]
> @@ -124,8 +124,8 @@ CONS4_FN (2, float);
>
> /*
> ** cons4_4_float:
> -** uzp1 v[0-9]+\.2s[^\n]+
> -** uzp1 v[0-9]+\.2s[^\n]+
> +** zip1 v[0-9]+\.2s[^\n]+
> +** zip1 v[0-9]+\.2s[^\n]+
> ** zip1 v([0-9]+).4s, [^\n]+
> ** stp q\1, q\1, \[x0\]
> ** stp q\1, q\1, \[x0, #?32\]
> diff --git a/gcc/testsuite/gcc.target/aarch64/pr109072_1.c
> b/gcc/testsuite/gcc.target/aarch64/pr109072_1.c
> index 39d80222142..daaccf0b881 100644
> --- a/gcc/testsuite/gcc.target/aarch64/pr109072_1.c
> +++ b/gcc/testsuite/gcc.target/aarch64/pr109072_1.c
> @@ -54,7 +54,7 @@ f32x2_1 (float32_t x)
>
> /*
> ** f32x2_2:
> -** uzp1 v0\.2s, v0\.2s, v1\.2s
> +** zip1 v0\.2s, v0\.2s, v1\.2s
> ** ret
> */
> float32x2_t
> @@ -166,7 +166,7 @@ f64x2_1 (float64_t x)
>
> /*
> ** f64x2_2:
> -** uzp1 v0\.2d, v0\.2d, v1\.2d
> +** zip1 v0\.2d, v0\.2d, v1\.2d
> ** ret
> */
> float64x2_t
> diff --git a/gcc/testsuite/gcc.target/aarch64/simd/mf8_data_1.c
> b/gcc/testsuite/gcc.target/aarch64/simd/mf8_data_1.c
> index 79d1ccf6f7d..e440b899f59 100644
> --- a/gcc/testsuite/gcc.target/aarch64/simd/mf8_data_1.c
> +++ b/gcc/testsuite/gcc.target/aarch64/simd/mf8_data_1.c
> @@ -66,7 +66,7 @@ mfloat8x16_t test_bslq3(mfloat8x16_t a, uint8x16_t b,
> mfloat8x16_t c)
>
> /*
> ** test_combine1:
> -** uzp1 v0.2d, v1.2d, v2.2d
> +** zip1 v0.2d, v1.2d, v2.2d
> ** ret
> */
> mfloat8x16_t test_combine1(mfloat8_t a, mfloat8x8_t b, mfloat8x8_t c)
> @@ -1397,7 +1397,7 @@ mfloat8x8_t test_tbl1(mfloat8x8_t a, uint8x8_t b)
>
> /*
> ** test_tbl2:
> -** uzp1 v([0-9]+).2d, v0.2d, v1.2d
> +** zip1 v([0-9]+).2d, v0.2d, v1.2d
> ** tbl v0.8b, {v\1.16b}, v2.8b
> ** ret
> */
> @@ -1408,7 +1408,7 @@ mfloat8x8_t test_tbl2(mfloat8x8x2_t a, uint8x8_t
> b)
>
> /*
> ** test_tbl3:
> -** uzp1 v([0-9]+).2d, v0.2d, v1.2d
> +** zip1 v([0-9]+).2d, v0.2d, v1.2d
> ** fmov d([0-9]+), d2
> ** tbl v0.8b, {v\1.16b( - |, )v\2.16b}, v3.8b
> ** ret
> @@ -1420,8 +1420,8 @@ mfloat8x8_t test_tbl3(mfloat8x8x3_t a, uint8x8_t
> b)
>
> /*
> ** test_tbl4:
> -** uzp1 v([0-9]+).2d, v0.2d, v1.2d
> -** uzp1 v([0-9]+).2d, v2.2d, v3.2d
> +** zip1 v([0-9]+).2d, v0.2d, v1.2d
> +** zip1 v([0-9]+).2d, v2.2d, v3.2d
> ** tbl v0.8b, {v\1.16b( - |, )v\2.16b}, v4.8b
> ** ret
> */
> @@ -1526,7 +1526,7 @@ mfloat8x8_t test_tbx1(mfloat8x8_t a, mfloat8x8_t
> b, uint8x8_t c)
>
> /*
> ** test_tbx2:
> -** uzp1 v([0-9]+).2d, v1.2d, v2.2d
> +** zip1 v([0-9]+).2d, v1.2d, v2.2d
> ** tbx v[0-9]+.8b, {v\1.16b}, v3.8b
> ** ret
> */
> @@ -1537,7 +1537,7 @@ mfloat8x8_t test_tbx2(mfloat8x8_t a,
> mfloat8x8x2_t b, uint8x8_t c)
>
> /*
> ** test_tbx3:
> -** uzp1 v([0-9]+).2d, v1.2d, v2.2d
> +** zip1 v([0-9]+).2d, v1.2d, v2.2d
> ** fmov d([0-9]+), d3
> ** tbl v[0-9]+.8b, {v\1.16b( - |, )v\2.16b}, v4.8b
> ** ...
> @@ -1552,8 +1552,8 @@ mfloat8x8_t test_tbx3(mfloat8x8_t a,
> mfloat8x8x3_t b, uint8x8_t c)
>
> /*
> ** test_tbx4:
> -** uzp1 v([0-9]+).2d, v1.2d, v2.2d
> -** uzp1 v([0-9]+).2d, v3.2d, v4.2d
> +** zip1 v([0-9]+).2d, v1.2d, v2.2d
> +** zip1 v([0-9]+).2d, v3.2d, v4.2d
> ** tbx v0.8b, {v\1.16b( - |, )v\2.16b}, v5.8b
> ** ret
> */
> diff --git a/gcc/testsuite/gcc.target/aarch64/sve/pr125550.c
> b/gcc/testsuite/gcc.target/aarch64/sve/pr125550.c
> new file mode 100644
> index 00000000000..89186dc07c9
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/aarch64/sve/pr125550.c
> @@ -0,0 +1,19 @@
> +/* { dg-do compile } */
> +/* { dg-options "-O2 -march=armv9.5-a" } */
> +/* { dg-final { check-function-bodies "**" "" "" } } */
> +
> +#include <arm_sve.h>
> +
> +svfloat16_t foo (float x0, float x1)
> +{
> + return svdupq_n_f16 (x0, x1, x0, x1, x0, x1, x0, x1);
> +}
> +
> +/*
> +** foo:
> +** fcvt h([01]), s\1
> +** fcvt h([01]), s\2
> +** zip1 v0\.4h, v0\.4h, v1\.4h
> +** mov z0\.s, s0
> +** ret
> +*/
> diff --git a/gcc/testsuite/gcc.target/aarch64/sve/vec_init_5.c
> b/gcc/testsuite/gcc.target/aarch64/sve/vec_init_5.c
> index 2bc9a3aeba5..0dd085a9423 100644
> --- a/gcc/testsuite/gcc.target/aarch64/sve/vec_init_5.c
> +++ b/gcc/testsuite/gcc.target/aarch64/sve/vec_init_5.c
> @@ -183,15 +183,15 @@
> ** test_float16_2:
> ** fcvt h1, s1
> ** fcvt h0, s0
> -** uzp1 v0\.4h, v0\.4h, v1\.4h
> +** zip1 v0\.4h, v0\.4h, v1\.4h
> ** mov z0\.s, s0
> ** ret
> */
>
> /*
> ** test_float16_3:
> -** uzp1 v2\.2s, v0\.2s, v2\.2s
> -** uzp1 v3\.2s, v1\.2s, v3\.2s
> +** zip1 v2\.2s, v0\.2s, v2\.2s
> +** zip1 v3\.2s, v1\.2s, v3\.2s
> ** zip1 v3\.4s, v2\.4s, v3\.4s
> ** fcvtn v3\.4h, v3\.4s
> ** mov z0\.d, d3
> @@ -210,7 +210,7 @@
> ** test_float16_5:
> ** movi v31\.4h, #0
> ** fcvt h0, s0
> -** uzp1 v0\.4h, v31\.4h, v0\.4h
> +** zip1 v0\.4h, v31\.4h, v0\.4h
> ** mov z0\.s, s0
> ** ret
> */
> @@ -221,7 +221,7 @@
> ** fcvt h1, s1
> ** fmov h31, 1.0e\+0
> ** fmov h2, h2
> -** uzp1 v1\.4h, v1\.4h, v31\.4h
> +** zip1 v1\.4h, v1\.4h, v31\.4h
> ** dup v0\.2s, v2\.s\[0\]
> ** dup v1\.2s, v1\.s\[0\]
> ** zip1 v0\.8h, v0\.8h, v1\.8h
> @@ -235,8 +235,8 @@
> ** fcvt h2, s1
> ** movi v0\.4h, #0
> ** fmov h1, 1.0e\+0
> -** uzp1 v1\.4h, v1\.4h, v2\.4h
> -** uzp1 v0\.4h, v0\.4h, v3\.4h
> +** zip1 v1\.4h, v1\.4h, v2\.4h
> +** zip1 v0\.4h, v0\.4h, v3\.4h
> ** dup v1\.2s, v1\.s\[0\]
> ** dup v0\.2s, v0\.s\[0\]
> ** zip1 v0\.8h, v0\.8h, v1\.8h
> @@ -249,7 +249,7 @@
> ** fcvt h1, s1
> ** fcvt h0, s0
> ** movi v31\.2s, 0x3c, lsl 24
> -** uzp1 v0\.4h, v0\.4h, v1.4h
> +** zip1 v0\.4h, v0\.4h, v1.4h
> ** dup v0\.2s, v0\.s\[0\]
> ** zip1 v0\.8h, v31\.8h, v0\.8h
> ** dup z0\.q, z0\.q\[0\]
> @@ -261,8 +261,8 @@
> ** fcvt h1, s1
> ** fcvt h2, s2
> ** fcvt h0, s0
> -** uzp1 v0\.4h, v0\.4h, v1\.4h
> -** uzp1 v1\.4h, v1\.4h, v2\.4h
> +** zip1 v0\.4h, v0\.4h, v1\.4h
> +** zip1 v1\.4h, v1\.4h, v2\.4h
> ** dup v0\.2s, v0\.s\[0\]
> ** dup v1\.2s, v1\.s\[0\]
> ** zip1 v0\.8h, v0\.8h, v1\.8h
> @@ -275,7 +275,7 @@
> ** fcvt h2, s2
> ** fcvt h0, s0
> ** fcvt h1, s1
> -** uzp1 v0\.4h, v0\.4h, v2\.4h
> +** zip1 v0\.4h, v0\.4h, v2\.4h
> ** dup v1\.4h, v1\.h\[0\]
> ** dup v0\.2s, v0\.s\[0\]
> ** zip1 v0\.8h, v0\.8h, v1\.8h
> @@ -386,7 +386,7 @@
>
> /*
> ** test_float32_2:
> -** uzp1 v0\.2s, v0\.2s, v1\.2s
> +** zip1 v0\.2s, v0\.2s, v1\.2s
> ** mov z0\.d, d0
> ** ret
> */
> @@ -401,7 +401,7 @@
> /*
> ** test_float32_4:
> ** movi v31\.2s, #0
> -** uzp1 v0\.2s, v31\.2s, v0\.2s
> +** zip1 v0\.2s, v31\.2s, v0\.2s
> ** mov z0\.d, d0
> ** ret
> */
> diff --git a/gcc/testsuite/gcc.target/aarch64/vec-init-14.c
> b/gcc/testsuite/gcc.target/aarch64/vec-init-14.c
> index 1a2cc9fbf47..ea719f32e4f 100644
> --- a/gcc/testsuite/gcc.target/aarch64/vec-init-14.c
> +++ b/gcc/testsuite/gcc.target/aarch64/vec-init-14.c
> @@ -67,7 +67,7 @@ int32x2_t s32_6(int32_t a0, int32_t a1) {
>
> /*
> ** f32_1:
> -** uzp1 v0\.2s, v0\.2s, v1\.2s
> +** zip1 v0\.2s, v0\.2s, v1\.2s
> ** ret
> */
> float32x2_t f32_1(float32_t a0, float32_t a1) {
> @@ -90,7 +90,7 @@ float32x2_t f32_2(float32_t a0, float32_t *ptr) {
> /*
> ** f32_3:
> ** ldr s0, \[x0\]
> -** uzp1 v0\.2s, v0\.2s, v1\.2s
> +** zip1 v0\.2s, v0\.2s, v1\.2s
> ** ret
> */
> float32x2_t f32_3(float32_t a0, float32_t a1, float32_t *ptr) {
> diff --git a/gcc/testsuite/gcc.target/aarch64/vec-init-23.c
> b/gcc/testsuite/gcc.target/aarch64/vec-init-23.c
> index 2a209509d1b..9374da8a84d 100644
> --- a/gcc/testsuite/gcc.target/aarch64/vec-init-23.c
> +++ b/gcc/testsuite/gcc.target/aarch64/vec-init-23.c
> @@ -242,15 +242,15 @@ TEST_64(int, int64_t, s)
> ** test_float16_2:
> ** fcvt h1, s1
> ** fcvt h0, s0
> -** uzp1 v0\.4h, v0\.4h, v1\.4h
> +** zip1 v0\.4h, v0\.4h, v1\.4h
> ** dup v0\.4s, v0\.s\[0\]
> ** ret
> */
>
> /*
> ** test_float16_3:
> -** uzp1 v2\.2s, v0\.2s, v2\.2s
> -** uzp1 v3\.2s, v1\.2s, v3\.2s
> +** zip1 v2\.2s, v0\.2s, v2\.2s
> +** zip1 v3\.2s, v1\.2s, v3\.2s
> ** zip1 v3\.4s, v2\.4s, v3\.4s
> ** fcvtn v3\.4h, v3\.4s
> ** dup v0\.2d, v3\.d\[0\]
> @@ -269,7 +269,7 @@ TEST_64(int, int64_t, s)
> ** test_float16_5:
> ** movi v31\.4h, #0
> ** fcvt h0, s0
> -** uzp1 v0\.4h, v31\.4h, v0\.4h
> +** zip1 v0\.4h, v31\.4h, v0\.4h
> ** dup v0\.4s, v0\.s\[0\]
> ** ret
> */
> @@ -280,7 +280,7 @@ TEST_64(int, int64_t, s)
> ** fcvt h1, s1
> ** fmov h31, 1.0e\+0
> ** fmov h0, h0
> -** uzp1 v1\.4h, v1\.4h, v31\.4h
> +** zip1 v1\.4h, v1\.4h, v31\.4h
> ** dup v0\.2s, v0\.s\[0\]
> ** dup v1\.2s, v1\.s\[0\]
> ** zip1 v0\.8h, v0\.8h, v1\.8h
> @@ -292,9 +292,9 @@ TEST_64(int, int64_t, s)
> ** fcvt h0, s0
> ** movi v31\.4h, #0
> ** fcvt h1, s1
> -** uzp1 v31\.4h, v31\.4h, v0\.4h
> +** zip1 v31\.4h, v31\.4h, v0\.4h
> ** fmov h0, 1.0e\+0
> -** uzp1 v0\.4h, v0\.4h, v1\.4h
> +** zip1 v0\.4h, v0\.4h, v1\.4h
> ** dup v31\.2s, v31\.s\[0\]
> ** dup v0\.2s, v0\.s\[0\]
> ** zip1 v0\.8h, v31\.8h, v0\.8h
> @@ -306,7 +306,7 @@ TEST_64(int, int64_t, s)
> ** fcvt h1, s1
> ** fcvt h0, s0
> ** movi v31\.2s, 0x3c, lsl 24
> -** uzp1 v0\.4h, v0\.4h, v1\.4h
> +** zip1 v0\.4h, v0\.4h, v1\.4h
> ** dup v0\.2s, v0\.s\[0\]
> ** zip1 v0\.8h, v31\.8h, v0\.8h
> ** ret
> @@ -317,8 +317,8 @@ TEST_64(int, int64_t, s)
> ** fcvt h1, s1
> ** fcvt h2, s2
> ** fcvt h0, s0
> -** uzp1 v0\.4h, v0\.4h, v1\.4h
> -** uzp1 v1\.4h, v1\.4h, v2\.4h
> +** zip1 v0\.4h, v0\.4h, v1\.4h
> +** zip1 v1\.4h, v1\.4h, v2\.4h
> ** dup v0\.2s, v0\.s\[0\]
> ** dup v1\.2s, v1\.s\[0\]
> ** zip1 v0\.8h, v0\.8h, v1\.8h
> @@ -330,7 +330,7 @@ TEST_64(int, int64_t, s)
> ** fcvt h2, s2
> ** fcvt h0, s0
> ** fcvt h1, s1
> -** uzp1 v0\.4h, v0\.4h, v2\.4h
> +** zip1 v0\.4h, v0\.4h, v2\.4h
> ** dup v1\.4h, v1\.h\[0\]
> ** dup v0\.2s, v0\.s\[0\]
> ** zip1 v0\.8h, v0\.8h, v1\.8h
> @@ -434,7 +434,7 @@ TEST_64(int, int64_t, s)
>
> /*
> ** test_float32_2:
> -** uzp1 v0\.2s, v0\.2s, v1\.2s
> +** zip1 v0\.2s, v0\.2s, v1\.2s
> ** dup v0\.2d, v0\.d\[0\]
> ** ret
> */
> @@ -449,7 +449,7 @@ TEST_64(int, int64_t, s)
> /*
> ** test_float32_4:
> ** movi v31\.2s, #0
> -** uzp1 v0\.2s, v31\.2s, v0\.2s
> +** zip1 v0\.2s, v31\.2s, v0\.2s
> ** dup v0\.2d, v0\.d\[0\]
> ** ret
> */
> diff --git a/gcc/testsuite/gcc.target/aarch64/vec-init-9.c
> b/gcc/testsuite/gcc.target/aarch64/vec-init-9.c
> index 3cf05cf865e..8fccf278d31 100644
> --- a/gcc/testsuite/gcc.target/aarch64/vec-init-9.c
> +++ b/gcc/testsuite/gcc.target/aarch64/vec-init-9.c
> @@ -75,7 +75,7 @@ int64x2_t s64q_6(int64_t a0, int64_t a1) {
>
> /*
> ** f64q_1:
> -** uzp1 v0\.2d, v0\.2d, v1\.2d
> +** zip1 v0\.2d, v0\.2d, v1\.2d
> ** ret
> */
> float64x2_t f64q_1(float64_t a0, float64_t a1) {
> @@ -98,7 +98,7 @@ float64x2_t f64q_2(float64_t a0, float64_t *ptr) {
> /*
> ** f64q_3:
> ** ldr d0, \[x0\]
> -** uzp1 v0\.2d, v0\.2d, v1\.2d
> +** zip1 v0\.2d, v0\.2d, v1\.2d
> ** ret
> */
> float64x2_t f64q_3(float64_t a0, float64_t a1, float64_t *ptr) {
> @@ -140,7 +140,7 @@ float64x2_t f64q_6(float64_t a0, float64_t a1) {
>
> /*
> ** s32q_1:
> -** uzp1 v0\.2d, v0\.2d, v1\.2d
> +** zip1 v0\.2d, v0\.2d, v1\.2d
> ** ret
> */
> int32x4_t s32q_1(int32x2_t a0, int32x2_t a1) {
> @@ -157,7 +157,7 @@ int32x4_t s32q_2(int32x2_t a0, int32x2_t *ptr) {
> /*
> ** s32q_3:
> ** ldr d0, \[x0\]
> -** uzp1 v0\.2d, v0\.2d, v1\.2d
> +** zip1 v0\.2d, v0\.2d, v1\.2d
> ** ret
> */
> int32x4_t s32q_3(int32x2_t a0, int32x2_t a1, int32x2_t *ptr) {
> @@ -204,7 +204,7 @@ int32x4_t s32q_6(int32x2_t a0, int32x2_t a1) {
>
> /*
> ** f32q_1:
> -** uzp1 v0\.2d, v0\.2d, v1\.2d
> +** zip1 v0\.2d, v0\.2d, v1\.2d
> ** ret
> */
> float32x4_t f32q_1(float32x2_t a0, float32x2_t a1) {
> @@ -221,7 +221,7 @@ float32x4_t f32q_2(float32x2_t a0, float32x2_t *ptr)
> {
> /*
> ** f32q_3:
> ** ldr d0, \[x0\]
> -** uzp1 v0\.2d, v0\.2d, v1\.2d
> +** zip1 v0\.2d, v0\.2d, v1\.2d
> ** ret
> */
> float32x4_t f32q_3(float32x2_t a0, float32x2_t a1, float32x2_t *ptr) {
> --
> 2.43.0