> On 29 Jul 2025, at 18:41, Richard Sandiford <richard.sandif...@arm.com> wrote:
>
> This patch continues the work of making ACLE intrinsics use VNx16BI
> for svbool_t results. It deals with the svcmp*_wide intrinsics.
>
> Since the only uses of these patterns are for ACLE intrinsics,
> there didn't seem much point adding an "_acle" suffix.
Ok.
Thanks,
Kyrill
>
> gcc/
> * config/aarch64/aarch64.cc (@aarch64_pred_cmp<cmp_op><mode>_wide):
> Split into VNx16QI_ONLY and SVE_FULL_HSI patterns. Use VNx16BI
> results for both.
> (*aarch64_pred_cmp<cmp_op><mode>_wide): New pattern.
> (*aarch64_pred_cmp<cmp_op><mode>_wide_cc): Likewise.
>
> gcc/testsuite/
> * gcc.target/aarch64/sve/acle/general/cmpeq_5.c: New test.
> * gcc.target/aarch64/sve/acle/general/cmpge_7.c: Likewise.
> * gcc.target/aarch64/sve/acle/general/cmpge_8.c: Likewise.
> * gcc.target/aarch64/sve/acle/general/cmpgt_7.c: Likewise.
> * gcc.target/aarch64/sve/acle/general/cmpgt_8.c: Likewise.
> * gcc.target/aarch64/sve/acle/general/cmple_7.c: Likewise.
> * gcc.target/aarch64/sve/acle/general/cmple_8.c: Likewise.
> * gcc.target/aarch64/sve/acle/general/cmplt_7.c: Likewise.
> * gcc.target/aarch64/sve/acle/general/cmplt_8.c: Likewise.
> * gcc.target/aarch64/sve/acle/general/cmpne_4.c: Likewise.
> ---
> gcc/config/aarch64/aarch64-sve.md | 89 ++++++++++++++++++-
> .../aarch64/sve/acle/general/cmpeq_5.c | 52 +++++++++++
> .../aarch64/sve/acle/general/cmpge_7.c | 52 +++++++++++
> .../aarch64/sve/acle/general/cmpge_8.c | 52 +++++++++++
> .../aarch64/sve/acle/general/cmpgt_7.c | 52 +++++++++++
> .../aarch64/sve/acle/general/cmpgt_8.c | 52 +++++++++++
> .../aarch64/sve/acle/general/cmple_7.c | 52 +++++++++++
> .../aarch64/sve/acle/general/cmple_8.c | 52 +++++++++++
> .../aarch64/sve/acle/general/cmplt_7.c | 52 +++++++++++
> .../aarch64/sve/acle/general/cmplt_8.c | 52 +++++++++++
> .../aarch64/sve/acle/general/cmpne_4.c | 52 +++++++++++
> 11 files changed, 608 insertions(+), 1 deletion(-)
> create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpeq_5.c
> create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpge_7.c
> create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpge_8.c
> create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpgt_7.c
> create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpgt_8.c
> create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmple_7.c
> create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmple_8.c
> create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmplt_7.c
> create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmplt_8.c
> create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpne_4.c
>
> diff --git a/gcc/config/aarch64/aarch64-sve.md
> b/gcc/config/aarch64/aarch64-sve.md
> index 1a37ece49ac..f7131bb0d2e 100644
> --- a/gcc/config/aarch64/aarch64-sve.md
> +++ b/gcc/config/aarch64/aarch64-sve.md
> @@ -8612,7 +8612,7 @@ (define_insn "@aarch64_pred_cmp<cmp_op><mode>_wide"
> [(match_operand:<VPRED> 1 "register_operand")
> (match_operand:SI 2 "aarch64_sve_ptrue_flag")
> (unspec:<VPRED>
> - [(match_operand:SVE_FULL_BHSI 3 "register_operand")
> + [(match_operand:VNx16QI_ONLY 3 "register_operand")
> (match_operand:VNx2DI 4 "register_operand")]
> SVE_COND_INT_CMP_WIDE)]
> UNSPEC_PRED_Z))
> @@ -8625,6 +8625,51 @@ (define_insn "@aarch64_pred_cmp<cmp_op><mode>_wide"
> }
> )
>
> +(define_expand "@aarch64_pred_cmp<cmp_op><mode>_wide"
> + [(parallel
> + [(set (match_operand:VNx16BI 0 "register_operand")
> + (and:VNx16BI
> + (subreg:VNx16BI
> + (unspec:<VPRED>
> + [(match_operand:<VPRED> 1 "register_operand")
> + (match_operand:SI 2 "aarch64_sve_ptrue_flag")
> + (unspec:<VPRED>
> + [(match_operand:SVE_FULL_HSI 3 "register_operand")
> + (match_operand:VNx2DI 4 "register_operand")]
> + SVE_COND_INT_CMP_WIDE)]
> + UNSPEC_PRED_Z)
> + 0)
> + (match_dup 5)))
> + (clobber (reg:CC_NZC CC_REGNUM))])]
> + "TARGET_SVE"
> + {
> + operands[5] = aarch64_ptrue_all (GET_MODE_UNIT_SIZE (<MODE>mode));
> + }
> +)
> +
> +(define_insn "*aarch64_pred_cmp<cmp_op><mode>_wide"
> + [(set (match_operand:VNx16BI 0 "register_operand")
> + (and:VNx16BI
> + (subreg:VNx16BI
> + (unspec:<VPRED>
> + [(match_operand:<VPRED> 1 "register_operand")
> + (match_operand:SI 2 "aarch64_sve_ptrue_flag")
> + (unspec:<VPRED>
> + [(match_operand:SVE_FULL_HSI 3 "register_operand")
> + (match_operand:VNx2DI 4 "register_operand")]
> + SVE_COND_INT_CMP_WIDE)]
> + UNSPEC_PRED_Z)
> + 0)
> + (match_operand:<VPRED> 5 "aarch64_ptrue_all_operand")))
> + (clobber (reg:CC_NZC CC_REGNUM))]
> + "TARGET_SVE"
> + {@ [ cons: =0, 1 , 2, 3, 4; attrs: pred_clobber ]
> + [ &Upa , Upl, , w, w; yes ]
> cmp<cmp_op>\t%0.<Vetype>, %1/z, %3.<Vetype>, %4.d
> + [ ?Upl , 0 , , w, w; yes ] ^
> + [ Upa , Upl, , w, w; no ] ^
> + }
> +)
> +
> ;; Predicated integer wide comparisons in which both the flag and
> ;; predicate results are interesting.
> (define_insn_and_rewrite "*aarch64_pred_cmp<cmp_op><mode>_wide_cc"
> @@ -8665,6 +8710,48 @@ (define_insn_and_rewrite
> "*aarch64_pred_cmp<cmp_op><mode>_wide_cc"
> }
> )
>
> +(define_insn_and_rewrite "*aarch64_pred_cmp<cmp_op><mode>_wide_cc"
> + [(set (reg:CC_NZC CC_REGNUM)
> + (unspec:CC_NZC
> + [(match_operand:VNx16BI 1 "register_operand")
> + (match_operand 4)
> + (match_operand:SI 5 "aarch64_sve_ptrue_flag")
> + (unspec:<VPRED>
> + [(match_operand:<VPRED> 6 "register_operand")
> + (match_operand:SI 7 "aarch64_sve_ptrue_flag")
> + (unspec:<VPRED>
> + [(match_operand:SVE_FULL_HSI 2 "register_operand")
> + (match_operand:VNx2DI 3 "register_operand")]
> + SVE_COND_INT_CMP_WIDE)]
> + UNSPEC_PRED_Z)]
> + UNSPEC_PTEST))
> + (set (match_operand:VNx16BI 0 "register_operand")
> + (and:VNx16BI
> + (subreg:VNx16BI
> + (unspec:<VPRED>
> + [(match_dup 6)
> + (match_dup 7)
> + (unspec:<VPRED>
> + [(match_dup 2)
> + (match_dup 3)]
> + SVE_COND_INT_CMP_WIDE)]
> + UNSPEC_PRED_Z)
> + 0)
> + (match_operand:<VPRED> 8 "aarch64_ptrue_all_operand")))]
> + "TARGET_SVE
> + && aarch64_sve_same_pred_for_ptest_p (&operands[4], &operands[6])"
> + {@ [ cons: =0, 1 , 2, 3, 6 ; attrs: pred_clobber ]
> + [ &Upa , Upl, w, w, Upl; yes ]
> cmp<cmp_op>\t%0.<Vetype>, %1/z, %2.<Vetype>, %3.d
> + [ ?Upl , 0 , w, w, Upl; yes ] ^
> + [ Upa , Upl, w, w, Upl; no ] ^
> + }
> + "&& !rtx_equal_p (operands[4], operands[6])"
> + {
> + operands[6] = copy_rtx (operands[4]);
> + operands[7] = operands[5];
> + }
> +)
> +
> ;; Predicated integer wide comparisons in which only the flags result
> ;; is interesting.
> (define_insn_and_rewrite "*aarch64_pred_cmp<cmp_op><mode>_wide_ptest"
> diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpeq_5.c
> b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpeq_5.c
> new file mode 100644
> index 00000000000..2958bc2a10e
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpeq_5.c
> @@ -0,0 +1,52 @@
> +/* { dg-do compile } */
> +/* { dg-options "-O2" } */
> +/* { dg-final { check-function-bodies "**" "" } } */
> +
> +#include <arm_sve.h>
> +
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
> +/*
> +** test1:
> +** cmpeq p0\.h, p0/z, z0\.h, z1\.d
> +** ret
> +*/
> +svbool_t
> +test1 (svbool_t pg, svint16_t x, svint64_t y)
> +{
> + return svand_z (svptrue_b8 (),
> + svcmpeq_wide (pg, x, y),
> + svptrue_b16 ());
> +}
> +
> +/*
> +** test2:
> +** cmpeq p0\.s, p0/z, z0\.s, z1\.d
> +** ret
> +*/
> +svbool_t
> +test2 (svbool_t pg, svint32_t x, svint64_t y)
> +{
> + return svand_z (svptrue_b8 (),
> + svcmpeq_wide (pg, x, y),
> + svptrue_b16 ());
> +}
> +
> +/*
> +** test3:
> +** cmpeq p0\.s, p0/z, z0\.s, z1\.d
> +** ret
> +*/
> +svbool_t
> +test3 (svbool_t pg, svint32_t x, svint64_t y)
> +{
> + return svand_z (svptrue_b8 (),
> + svcmpeq_wide (pg, x, y),
> + svptrue_b32 ());
> +}
> +
> +#ifdef __cplusplus
> +}
> +#endif
> diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpge_7.c
> b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpge_7.c
> new file mode 100644
> index 00000000000..d6abab05d29
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpge_7.c
> @@ -0,0 +1,52 @@
> +/* { dg-do compile } */
> +/* { dg-options "-O2" } */
> +/* { dg-final { check-function-bodies "**" "" } } */
> +
> +#include <arm_sve.h>
> +
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
> +/*
> +** test1:
> +** cmpge p0\.h, p0/z, z0\.h, z1\.d
> +** ret
> +*/
> +svbool_t
> +test1 (svbool_t pg, svint16_t x, svint64_t y)
> +{
> + return svand_z (svptrue_b8 (),
> + svcmpge_wide (pg, x, y),
> + svptrue_b16 ());
> +}
> +
> +/*
> +** test2:
> +** cmpge p0\.s, p0/z, z0\.s, z1\.d
> +** ret
> +*/
> +svbool_t
> +test2 (svbool_t pg, svint32_t x, svint64_t y)
> +{
> + return svand_z (svptrue_b8 (),
> + svcmpge_wide (pg, x, y),
> + svptrue_b16 ());
> +}
> +
> +/*
> +** test3:
> +** cmpge p0\.s, p0/z, z0\.s, z1\.d
> +** ret
> +*/
> +svbool_t
> +test3 (svbool_t pg, svint32_t x, svint64_t y)
> +{
> + return svand_z (svptrue_b8 (),
> + svcmpge_wide (pg, x, y),
> + svptrue_b32 ());
> +}
> +
> +#ifdef __cplusplus
> +}
> +#endif
> diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpge_8.c
> b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpge_8.c
> new file mode 100644
> index 00000000000..70be917ac4c
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpge_8.c
> @@ -0,0 +1,52 @@
> +/* { dg-do compile } */
> +/* { dg-options "-O2" } */
> +/* { dg-final { check-function-bodies "**" "" } } */
> +
> +#include <arm_sve.h>
> +
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
> +/*
> +** test1:
> +** cmphs p0\.h, p0/z, z0\.h, z1\.d
> +** ret
> +*/
> +svbool_t
> +test1 (svbool_t pg, svuint16_t x, svuint64_t y)
> +{
> + return svand_z (svptrue_b8 (),
> + svcmpge_wide (pg, x, y),
> + svptrue_b16 ());
> +}
> +
> +/*
> +** test2:
> +** cmphs p0\.s, p0/z, z0\.s, z1\.d
> +** ret
> +*/
> +svbool_t
> +test2 (svbool_t pg, svuint32_t x, svuint64_t y)
> +{
> + return svand_z (svptrue_b8 (),
> + svcmpge_wide (pg, x, y),
> + svptrue_b16 ());
> +}
> +
> +/*
> +** test3:
> +** cmphs p0\.s, p0/z, z0\.s, z1\.d
> +** ret
> +*/
> +svbool_t
> +test3 (svbool_t pg, svuint32_t x, svuint64_t y)
> +{
> + return svand_z (svptrue_b8 (),
> + svcmpge_wide (pg, x, y),
> + svptrue_b32 ());
> +}
> +
> +#ifdef __cplusplus
> +}
> +#endif
> diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpgt_7.c
> b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpgt_7.c
> new file mode 100644
> index 00000000000..0656b2931fa
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpgt_7.c
> @@ -0,0 +1,52 @@
> +/* { dg-do compile } */
> +/* { dg-options "-O2" } */
> +/* { dg-final { check-function-bodies "**" "" } } */
> +
> +#include <arm_sve.h>
> +
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
> +/*
> +** test1:
> +** cmpgt p0\.h, p0/z, z0\.h, z1\.d
> +** ret
> +*/
> +svbool_t
> +test1 (svbool_t pg, svint16_t x, svint64_t y)
> +{
> + return svand_z (svptrue_b8 (),
> + svcmpgt_wide (pg, x, y),
> + svptrue_b16 ());
> +}
> +
> +/*
> +** test2:
> +** cmpgt p0\.s, p0/z, z0\.s, z1\.d
> +** ret
> +*/
> +svbool_t
> +test2 (svbool_t pg, svint32_t x, svint64_t y)
> +{
> + return svand_z (svptrue_b8 (),
> + svcmpgt_wide (pg, x, y),
> + svptrue_b16 ());
> +}
> +
> +/*
> +** test3:
> +** cmpgt p0\.s, p0/z, z0\.s, z1\.d
> +** ret
> +*/
> +svbool_t
> +test3 (svbool_t pg, svint32_t x, svint64_t y)
> +{
> + return svand_z (svptrue_b8 (),
> + svcmpgt_wide (pg, x, y),
> + svptrue_b32 ());
> +}
> +
> +#ifdef __cplusplus
> +}
> +#endif
> diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpgt_8.c
> b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpgt_8.c
> new file mode 100644
> index 00000000000..b0a9ac87fb9
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpgt_8.c
> @@ -0,0 +1,52 @@
> +/* { dg-do compile } */
> +/* { dg-options "-O2" } */
> +/* { dg-final { check-function-bodies "**" "" } } */
> +
> +#include <arm_sve.h>
> +
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
> +/*
> +** test1:
> +** cmphi p0\.h, p0/z, z0\.h, z1\.d
> +** ret
> +*/
> +svbool_t
> +test1 (svbool_t pg, svuint16_t x, svuint64_t y)
> +{
> + return svand_z (svptrue_b8 (),
> + svcmpgt_wide (pg, x, y),
> + svptrue_b16 ());
> +}
> +
> +/*
> +** test2:
> +** cmphi p0\.s, p0/z, z0\.s, z1\.d
> +** ret
> +*/
> +svbool_t
> +test2 (svbool_t pg, svuint32_t x, svuint64_t y)
> +{
> + return svand_z (svptrue_b8 (),
> + svcmpgt_wide (pg, x, y),
> + svptrue_b16 ());
> +}
> +
> +/*
> +** test3:
> +** cmphi p0\.s, p0/z, z0\.s, z1\.d
> +** ret
> +*/
> +svbool_t
> +test3 (svbool_t pg, svuint32_t x, svuint64_t y)
> +{
> + return svand_z (svptrue_b8 (),
> + svcmpgt_wide (pg, x, y),
> + svptrue_b32 ());
> +}
> +
> +#ifdef __cplusplus
> +}
> +#endif
> diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmple_7.c
> b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmple_7.c
> new file mode 100644
> index 00000000000..3f3ea538b0a
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmple_7.c
> @@ -0,0 +1,52 @@
> +/* { dg-do compile } */
> +/* { dg-options "-O2" } */
> +/* { dg-final { check-function-bodies "**" "" } } */
> +
> +#include <arm_sve.h>
> +
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
> +/*
> +** test1:
> +** cmple p0\.h, p0/z, z0\.h, z1\.d
> +** ret
> +*/
> +svbool_t
> +test1 (svbool_t pg, svint16_t x, svint64_t y)
> +{
> + return svand_z (svptrue_b8 (),
> + svcmple_wide (pg, x, y),
> + svptrue_b16 ());
> +}
> +
> +/*
> +** test2:
> +** cmple p0\.s, p0/z, z0\.s, z1\.d
> +** ret
> +*/
> +svbool_t
> +test2 (svbool_t pg, svint32_t x, svint64_t y)
> +{
> + return svand_z (svptrue_b8 (),
> + svcmple_wide (pg, x, y),
> + svptrue_b16 ());
> +}
> +
> +/*
> +** test3:
> +** cmple p0\.s, p0/z, z0\.s, z1\.d
> +** ret
> +*/
> +svbool_t
> +test3 (svbool_t pg, svint32_t x, svint64_t y)
> +{
> + return svand_z (svptrue_b8 (),
> + svcmple_wide (pg, x, y),
> + svptrue_b32 ());
> +}
> +
> +#ifdef __cplusplus
> +}
> +#endif
> diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmple_8.c
> b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmple_8.c
> new file mode 100644
> index 00000000000..01281cab9fd
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmple_8.c
> @@ -0,0 +1,52 @@
> +/* { dg-do compile } */
> +/* { dg-options "-O2" } */
> +/* { dg-final { check-function-bodies "**" "" } } */
> +
> +#include <arm_sve.h>
> +
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
> +/*
> +** test1:
> +** cmpls p0\.h, p0/z, z0\.h, z1\.d
> +** ret
> +*/
> +svbool_t
> +test1 (svbool_t pg, svuint16_t x, svuint64_t y)
> +{
> + return svand_z (svptrue_b8 (),
> + svcmple_wide (pg, x, y),
> + svptrue_b16 ());
> +}
> +
> +/*
> +** test2:
> +** cmpls p0\.s, p0/z, z0\.s, z1\.d
> +** ret
> +*/
> +svbool_t
> +test2 (svbool_t pg, svuint32_t x, svuint64_t y)
> +{
> + return svand_z (svptrue_b8 (),
> + svcmple_wide (pg, x, y),
> + svptrue_b16 ());
> +}
> +
> +/*
> +** test3:
> +** cmpls p0\.s, p0/z, z0\.s, z1\.d
> +** ret
> +*/
> +svbool_t
> +test3 (svbool_t pg, svuint32_t x, svuint64_t y)
> +{
> + return svand_z (svptrue_b8 (),
> + svcmple_wide (pg, x, y),
> + svptrue_b32 ());
> +}
> +
> +#ifdef __cplusplus
> +}
> +#endif
> diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmplt_7.c
> b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmplt_7.c
> new file mode 100644
> index 00000000000..a4de6abb67d
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmplt_7.c
> @@ -0,0 +1,52 @@
> +/* { dg-do compile } */
> +/* { dg-options "-O2" } */
> +/* { dg-final { check-function-bodies "**" "" } } */
> +
> +#include <arm_sve.h>
> +
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
> +/*
> +** test1:
> +** cmplt p0\.h, p0/z, z0\.h, z1\.d
> +** ret
> +*/
> +svbool_t
> +test1 (svbool_t pg, svint16_t x, svint64_t y)
> +{
> + return svand_z (svptrue_b8 (),
> + svcmplt_wide (pg, x, y),
> + svptrue_b16 ());
> +}
> +
> +/*
> +** test2:
> +** cmplt p0\.s, p0/z, z0\.s, z1\.d
> +** ret
> +*/
> +svbool_t
> +test2 (svbool_t pg, svint32_t x, svint64_t y)
> +{
> + return svand_z (svptrue_b8 (),
> + svcmplt_wide (pg, x, y),
> + svptrue_b16 ());
> +}
> +
> +/*
> +** test3:
> +** cmplt p0\.s, p0/z, z0\.s, z1\.d
> +** ret
> +*/
> +svbool_t
> +test3 (svbool_t pg, svint32_t x, svint64_t y)
> +{
> + return svand_z (svptrue_b8 (),
> + svcmplt_wide (pg, x, y),
> + svptrue_b32 ());
> +}
> +
> +#ifdef __cplusplus
> +}
> +#endif
> diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmplt_8.c
> b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmplt_8.c
> new file mode 100644
> index 00000000000..0a095ebd651
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmplt_8.c
> @@ -0,0 +1,52 @@
> +/* { dg-do compile } */
> +/* { dg-options "-O2" } */
> +/* { dg-final { check-function-bodies "**" "" } } */
> +
> +#include <arm_sve.h>
> +
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
> +/*
> +** test1:
> +** cmplo p0\.h, p0/z, z0\.h, z1\.d
> +** ret
> +*/
> +svbool_t
> +test1 (svbool_t pg, svuint16_t x, svuint64_t y)
> +{
> + return svand_z (svptrue_b8 (),
> + svcmplt_wide (pg, x, y),
> + svptrue_b16 ());
> +}
> +
> +/*
> +** test2:
> +** cmplo p0\.s, p0/z, z0\.s, z1\.d
> +** ret
> +*/
> +svbool_t
> +test2 (svbool_t pg, svuint32_t x, svuint64_t y)
> +{
> + return svand_z (svptrue_b8 (),
> + svcmplt_wide (pg, x, y),
> + svptrue_b16 ());
> +}
> +
> +/*
> +** test3:
> +** cmplo p0\.s, p0/z, z0\.s, z1\.d
> +** ret
> +*/
> +svbool_t
> +test3 (svbool_t pg, svuint32_t x, svuint64_t y)
> +{
> + return svand_z (svptrue_b8 (),
> + svcmplt_wide (pg, x, y),
> + svptrue_b32 ());
> +}
> +
> +#ifdef __cplusplus
> +}
> +#endif
> diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpne_4.c
> b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpne_4.c
> new file mode 100644
> index 00000000000..595e02461ae
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpne_4.c
> @@ -0,0 +1,52 @@
> +/* { dg-do compile } */
> +/* { dg-options "-O2" } */
> +/* { dg-final { check-function-bodies "**" "" } } */
> +
> +#include <arm_sve.h>
> +
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
> +/*
> +** test1:
> +** cmpne p0\.h, p0/z, z0\.h, z1\.d
> +** ret
> +*/
> +svbool_t
> +test1 (svbool_t pg, svint16_t x, svint64_t y)
> +{
> + return svand_z (svptrue_b8 (),
> + svcmpne_wide (pg, x, y),
> + svptrue_b16 ());
> +}
> +
> +/*
> +** test2:
> +** cmpne p0\.s, p0/z, z0\.s, z1\.d
> +** ret
> +*/
> +svbool_t
> +test2 (svbool_t pg, svint32_t x, svint64_t y)
> +{
> + return svand_z (svptrue_b8 (),
> + svcmpne_wide (pg, x, y),
> + svptrue_b16 ());
> +}
> +
> +/*
> +** test3:
> +** cmpne p0\.s, p0/z, z0\.s, z1\.d
> +** ret
> +*/
> +svbool_t
> +test3 (svbool_t pg, svint32_t x, svint64_t y)
> +{
> + return svand_z (svptrue_b8 (),
> + svcmpne_wide (pg, x, y),
> + svptrue_b32 ());
> +}
> +
> +#ifdef __cplusplus
> +}
> +#endif
> --
> 2.43.0
>