diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2025-08-04 11:45:31 +0100 |
---|---|---|
committer | Richard Sandiford <richard.sandiford@arm.com> | 2025-08-04 11:45:31 +0100 |
commit | c17b47b9c0a3bbd39723596a647bd9a856fc445f (patch) | |
tree | c08fa0248f25be4d437a261b507c51ded929dc0a | |
parent | 2b419b709123194d3124a57c57556b0185fd2684 (diff) | |
download | gcc-c17b47b9c0a3bbd39723596a647bd9a856fc445f.zip gcc-c17b47b9c0a3bbd39723596a647bd9a856fc445f.tar.gz gcc-c17b47b9c0a3bbd39723596a647bd9a856fc445f.tar.bz2 |
aarch64: Use VNx16BI for non-widening integer svcmp*
This patch continues the work of making ACLE intrinsics use VNx16BI
for svbool_t results. It deals with the non-widening integer forms
of svcmp*. The handling of the PTEST patterns is similar to that
for the earlier svwhile* patch.
Unfortunately, on its own, this triggers a failure in the
pred_clobber_*.c tests. The problem is that, after the patch,
we have a comparison instruction followed by a move into p0.
Combine combines the instructions together, so that the destination
of the comparison is the hard register p0 rather than a pseudo.
This defeats IRA's make_early_clobber_and_input_conflicts, which
requires the source and destination to be pseudo registers.
Before the patch, there was a subreg move between the comparison
and the move into p0, so it was that subreg move that ended up
with a hard register destination.
Arguably the fix for PR87600 should be extended to destination
registers as well as source registers, but in the meantime,
the patch just disables combine for these tests. The tests are
really testing the constraints and register allocation.
gcc/
* config/aarch64/aarch64-sve.md (@aarch64_pred_cmp<cmp_op><mode>_acle)
(*aarch64_pred_cmp<cmp_op><mode>_acle, *cmp<cmp_op><mode>_acle_cc)
(*cmp<cmp_op><mode>_acle_and): New patterns that yield VNx16BI
results for all element types.
* config/aarch64/aarch64-sve-builtins-base.cc
(svcmp_impl::expand): Use them.
(svcmp_wide_impl::expand): Likewise when implementing an svcmp_wide
against an in-range constant.
gcc/testsuite/
* gcc.target/aarch64/sve/pred_clobber_1.c: Disable combine.
* gcc.target/aarch64/sve/pred_clobber_2.c: Likewise.
* gcc.target/aarch64/sve/pred_clobber_3.c: Likewise.
* gcc.target/aarch64/sve/acle/general/cmpeq_2.c: Add more cases.
* gcc.target/aarch64/sve/acle/general/cmpeq_4.c: New test.
* gcc.target/aarch64/sve/acle/general/cmpge_1.c: Likewise.
* gcc.target/aarch64/sve/acle/general/cmpge_2.c: Likewise.
* gcc.target/aarch64/sve/acle/general/cmpge_3.c: Likewise.
* gcc.target/aarch64/sve/acle/general/cmpge_4.c: Likewise.
* gcc.target/aarch64/sve/acle/general/cmpgt_1.c: Likewise.
* gcc.target/aarch64/sve/acle/general/cmpgt_2.c: Likewise.
* gcc.target/aarch64/sve/acle/general/cmpgt_3.c: Likewise.
* gcc.target/aarch64/sve/acle/general/cmpgt_4.c: Likewise.
* gcc.target/aarch64/sve/acle/general/cmple_1.c: Likewise.
* gcc.target/aarch64/sve/acle/general/cmple_2.c: Likewise.
* gcc.target/aarch64/sve/acle/general/cmple_3.c: Likewise.
* gcc.target/aarch64/sve/acle/general/cmple_4.c: Likewise.
* gcc.target/aarch64/sve/acle/general/cmplt_1.c: Likewise.
* gcc.target/aarch64/sve/acle/general/cmplt_2.c: Likewise.
* gcc.target/aarch64/sve/acle/general/cmplt_3.c: Likewise.
* gcc.target/aarch64/sve/acle/general/cmplt_4.c: Likewise.
* gcc.target/aarch64/sve/acle/general/cmpne_1.c: Likewise.
* gcc.target/aarch64/sve/acle/general/cmpne_2.c: Likewise.
25 files changed, 3133 insertions, 7 deletions
diff --git a/gcc/config/aarch64/aarch64-sve-builtins-base.cc b/gcc/config/aarch64/aarch64-sve-builtins-base.cc index d484bb2..ddb25ac 100644 --- a/gcc/config/aarch64/aarch64-sve-builtins-base.cc +++ b/gcc/config/aarch64/aarch64-sve-builtins-base.cc @@ -497,7 +497,7 @@ public: { bool unsigned_p = e.type_suffix (0).unsigned_p; rtx_code code = get_rtx_code (m_code, unsigned_p); - return e.use_exact_insn (code_for_aarch64_pred_cmp (code, mode)); + return e.use_exact_insn (code_for_aarch64_pred_cmp_acle (code, mode)); } insn_code icode = code_for_aarch64_pred_fcm (m_unspec_for_fp, mode); @@ -542,7 +542,7 @@ public: /* If the argument is a constant that the unwidened comparisons can handle directly, use them instead. */ - insn_code icode = code_for_aarch64_pred_cmp (code, mode); + insn_code icode = code_for_aarch64_pred_cmp_acle (code, mode); rtx op2 = unwrap_const_vec_duplicate (e.args[3]); if (CONSTANT_P (op2) && insn_data[icode].operand[4].predicate (op2, DImode)) diff --git a/gcc/config/aarch64/aarch64-sve.md b/gcc/config/aarch64/aarch64-sve.md index a3f9b9a..bb4a85d 100644 --- a/gcc/config/aarch64/aarch64-sve.md +++ b/gcc/config/aarch64/aarch64-sve.md @@ -8361,6 +8361,71 @@ } ) +;; Likewise, but yield a VNx16BI result regardless of the element width. +;; The .b case is equivalent to the above. +(define_expand "@aarch64_pred_cmp<cmp_op><mode>_acle" + [(parallel + [(set (match_operand:<VPRED> 0 "register_operand") + (unspec:<VPRED> + [(match_operand:<VPRED> 1 "register_operand") + (match_operand:SI 2 "aarch64_sve_ptrue_flag") + (SVE_INT_CMP:<VPRED> + (match_operand:VNx16QI_ONLY 3 "register_operand") + (match_operand:VNx16QI_ONLY 4 "aarch64_sve_cmp_<sve_imm_con>_operand"))] + UNSPEC_PRED_Z)) + (clobber (reg:CC_NZC CC_REGNUM))])] + "TARGET_SVE" +) + +;; For wider elements, bitcast the predicate result to a VNx16BI and use +;; an (and ...) to indicate that only every second, fourth, or eighth bit +;; is set. +(define_expand "@aarch64_pred_cmp<cmp_op><mode>_acle" + [(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") + (SVE_INT_CMP:<VPRED> + (match_operand:SVE_FULL_HSDI 3 "register_operand") + (match_operand:SVE_FULL_HSDI 4 "aarch64_sve_cmp_<sve_imm_con>_operand"))] + 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>_acle" + [(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") + (SVE_INT_CMP:<VPRED> + (match_operand:SVE_FULL_HSDI 3 "register_operand") + (match_operand:SVE_FULL_HSDI 4 "aarch64_sve_cmp_<sve_imm_con>_operand"))] + UNSPEC_PRED_Z) + 0) + (match_operand:<VPRED> 5 "aarch64_ptrue_all_operand"))) + (clobber (reg:CC_NZC CC_REGNUM))] + "TARGET_SVE" + {@ [ cons: =0 , 1 , 3 , 4 ; attrs: pred_clobber ] + [ &Upa , Upl, w , <sve_imm_con>; yes ] cmp<cmp_op>\t%0.<Vetype>, %1/z, %3.<Vetype>, #%4 + [ ?Upl , 0 , w , <sve_imm_con>; yes ] ^ + [ Upa , Upl, w , <sve_imm_con>; no ] ^ + [ &Upa , Upl, w , w ; yes ] cmp<cmp_op>\t%0.<Vetype>, %1/z, %3.<Vetype>, %4.<Vetype> + [ ?Upl , 0 , w , w ; yes ] ^ + [ Upa , Upl, w , w ; no ] ^ + } +) + ;; Predicated integer comparisons in which both the flag and predicate ;; results are interesting. (define_insn_and_rewrite "*cmp<cmp_op><mode>_cc" @@ -8402,6 +8467,49 @@ } ) +(define_insn_and_rewrite "*cmp<cmp_op><mode>_acle_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 6) + (match_operand:SI 7 "aarch64_sve_ptrue_flag") + (SVE_INT_CMP:<VPRED> + (match_operand:SVE_FULL_HSDI 2 "register_operand") + (match_operand:SVE_FULL_HSDI 3 "aarch64_sve_cmp_<sve_imm_con>_operand"))] + UNSPEC_PRED_Z)] + UNSPEC_PTEST)) + (set (match_operand:VNx16BI 0 "register_operand") + (and:VNx16BI + (subreg:VNx16BI + (unspec:<VPRED> + [(match_dup 6) + (match_dup 7) + (SVE_INT_CMP:<VPRED> + (match_dup 2) + (match_dup 3))] + 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 ; attrs: pred_clobber ] + [ &Upa , Upl, w , <sve_imm_con>; yes ] cmp<cmp_op>\t%0.<Vetype>, %1/z, %2.<Vetype>, #%3 + [ ?Upl , 0 , w , <sve_imm_con>; yes ] ^ + [ Upa , Upl, w , <sve_imm_con>; no ] ^ + [ &Upa , Upl, w , w ; yes ] cmp<cmp_op>\t%0.<Vetype>, %1/z, %2.<Vetype>, %3.<Vetype> + [ ?Upl , 0 , w , w ; yes ] ^ + [ Upa , Upl, w , w ; no ] ^ + } + "&& !rtx_equal_p (operands[4], operands[6])" + { + operands[6] = copy_rtx (operands[4]); + operands[7] = operands[5]; + } +) + ;; Predicated integer comparisons in which only the flags result is ;; interesting. (define_insn_and_rewrite "*cmp<cmp_op><mode>_ptest" @@ -8467,6 +8575,44 @@ (clobber (reg:CC_NZC CC_REGNUM))])] ) +(define_insn_and_split "*cmp<cmp_op><mode>_acle_and" + [(set (match_operand:VNx16BI 0 "register_operand" "=Upa, Upa") + (and:VNx16BI + (and:VNx16BI + (subreg:VNx16BI + (unspec:<VPRED> + [(match_operand 4) + (const_int SVE_KNOWN_PTRUE) + (SVE_INT_CMP:<VPRED> + (match_operand:SVE_FULL_HSDI 2 "register_operand" "w, w") + (match_operand:SVE_FULL_HSDI 3 "aarch64_sve_cmp_<sve_imm_con>_operand" "<sve_imm_con>, w"))] + UNSPEC_PRED_Z) + 0) + (match_operand:VNx16BI 1 "register_operand" "Upl, Upl")) + (match_operand:<VPRED> 5 "aarch64_ptrue_all_operand"))) + (clobber (reg:CC_NZC CC_REGNUM))] + "TARGET_SVE" + "#" + "&& 1" + [(parallel + [(set (match_dup 0) + (and:VNx16BI + (subreg:VNx16BI + (unspec:<VPRED> + [(match_dup 1) + (const_int SVE_MAYBE_NOT_PTRUE) + (SVE_INT_CMP:<VPRED> + (match_dup 2) + (match_dup 3))] + UNSPEC_PRED_Z) + 0) + (match_dup 5))) + (clobber (reg:CC_NZC CC_REGNUM))])] + { + operands[1] = gen_lowpart (<VPRED>mode, operands[1]); + } +) + ;; Predicated integer wide comparisons. (define_insn "@aarch64_pred_cmp<cmp_op><mode>_wide" [(set (match_operand:<VPRED> 0 "register_operand") diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpeq_2.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpeq_2.c index 028d375..df98d27 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpeq_2.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpeq_2.c @@ -33,6 +33,108 @@ test4 (svbool_t pg, svint8_t x, int *any) return svptest_any (pg, res); } -/* { dg-final { scan-assembler-times {\tcmpeq\t} 4 } } */ -/* { dg-final { scan-assembler-times {\tcmpeq\t[^\n]*, #10} 2 } } */ +void +test5 (svint16_t x, svint16_t y, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b16 (); + svbool_t res = svcmpeq (pg, x, y); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test6 (svint16_t x, svint16_t y) +{ + svbool_t pg = svptrue_b16 (); + svbool_t res = svcmpeq (pg, x, y); + return svptest_any (pg, res); +} + +void +test7 (svint16_t x, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b16 (); + svbool_t res = svcmpeq (pg, x, 10); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test8 (svint16_t x) +{ + svbool_t pg = svptrue_b16 (); + svbool_t res = svcmpeq (pg, x, 10); + return svptest_any (pg, res); +} + +void +test9 (svint32_t x, svint32_t y, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b32 (); + svbool_t res = svcmpeq (pg, x, y); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test10 (svint32_t x, svint32_t y) +{ + svbool_t pg = svptrue_b32 (); + svbool_t res = svcmpeq (pg, x, y); + return svptest_any (pg, res); +} + +void +test11 (svint32_t x, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b32 (); + svbool_t res = svcmpeq (pg, x, 10); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test12 (svint32_t x) +{ + svbool_t pg = svptrue_b32 (); + svbool_t res = svcmpeq (pg, x, 10); + return svptest_any (pg, res); +} + +void +test13 (svint64_t x, svint64_t y, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b64 (); + svbool_t res = svcmpeq (pg, x, y); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test14 (svint64_t x, svint64_t y) +{ + svbool_t pg = svptrue_b64 (); + svbool_t res = svcmpeq (pg, x, y); + return svptest_any (pg, res); +} + +void +test15 (svint64_t x, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b64 (); + svbool_t res = svcmpeq (pg, x, 10); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test16 (svint64_t x) +{ + svbool_t pg = svptrue_b64 (); + svbool_t res = svcmpeq (pg, x, 10); + return svptest_any (pg, res); +} + +/* { dg-final { scan-assembler-times {\tcmpeq\t} 16 } } */ +/* { dg-final { scan-assembler-times {\tcmpeq\t[^\n]*, #10} 8 } } */ /* { dg-final { scan-assembler-not {\tptest\t} } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpeq_4.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpeq_4.c new file mode 100644 index 0000000..8e4b931 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpeq_4.c @@ -0,0 +1,157 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ +/* { dg-final { check-function-bodies "**" "" } } */ + +#include <arm_sve.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/* +** test1: +** cmpeq p0\.b, p0/z, z0\.b, z1\.b +** ret +*/ +svbool_t +test1 (svbool_t p0, svint8_t x, svint8_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmpeq (pg, x, y), p0); +} + +/* +** test2: +** cmpeq p0\.b, p0/z, z0\.b, z1\.b +** ret +*/ +svbool_t +test2 (svbool_t p0, svint8_t x, svint8_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (p0, svcmpeq (pg, x, y), p0); +} + +/* +** test3: +** cmpeq p0\.b, p0/z, z0\.b, z1\.b +** ret +*/ +svbool_t +test3 (svbool_t p0, svint8_t x, svint8_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (p0, svcmpeq (pg, x, y), pg); +} + +/* +** test4: +** cmpeq p0\.b, p0/z, z0\.b, #10 +** ret +*/ +svbool_t +test4 (svbool_t p0, svint8_t x) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmpeq (pg, x, 10), p0); +} + +/* +** test5: +** cmpeq p0\.b, p0/z, z0\.b, #10 +** ret +*/ +svbool_t +test5 (svbool_t p0, svint8_t x) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (p0, svcmpeq (pg, x, 10), p0); +} + +/* +** test6: +** cmpeq p0\.b, p0/z, z0\.b, #10 +** ret +*/ +svbool_t +test6 (svbool_t p0, svint8_t x) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (p0, svcmpeq (pg, x, 10), pg); +} + +/* +** test7: +** cmpeq p0\.h, p0/z, z0\.h, z1\.h +** ret +*/ +svbool_t +test7 (svbool_t p0, svint16_t x, svint16_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmpeq (pg, x, y), p0); +} + +/* +** test8: +** cmpeq p0\.h, p0/z, z0\.h, #10 +** ret +*/ +svbool_t +test8 (svbool_t p0, svint16_t x) +{ + svbool_t pg = svptrue_b16 (); + return svand_z (pg, svcmpeq (pg, x, 10), p0); +} + +/* +** test9: +** cmpeq p0\.s, p0/z, z0\.s, z1\.s +** ret +*/ +svbool_t +test9 (svbool_t p0, svint32_t x, svint32_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmpeq (pg, x, y), p0); +} + +/* +** test10: +** cmpeq p0\.s, p0/z, z0\.s, #10 +** ret +*/ +svbool_t +test10 (svbool_t p0, svint32_t x) +{ + svbool_t pg = svptrue_b16 (); + return svand_z (pg, svcmpeq (pg, x, 10), p0); +} + +/* +** test11: +** cmpeq p0\.d, p0/z, z0\.d, z1\.d +** ret +*/ +svbool_t +test11 (svbool_t p0, svint64_t x, svint64_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmpeq (pg, x, y), p0); +} + +/* +** test12: +** cmpeq p0\.d, p0/z, z0\.d, #10 +** ret +*/ +svbool_t +test12 (svbool_t p0, svint64_t x) +{ + svbool_t pg = svptrue_b16 (); + return svand_z (pg, svcmpeq (pg, x, 10), p0); +} + +#ifdef __cplusplus +} +#endif diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpge_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpge_1.c new file mode 100644 index 0000000..f6bb3c8 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpge_1.c @@ -0,0 +1,140 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +#include <arm_sve.h> + +void +test1 (svbool_t pg, svint8_t x, svint8_t y, int *any, svbool_t *ptr) +{ + svbool_t res = svcmpge (pg, x, y); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test2 (svbool_t pg, svint8_t x, svint8_t y, int *any) +{ + svbool_t res = svcmpge (pg, x, y); + return svptest_any (pg, res); +} + +void +test3 (svbool_t pg, svint8_t x, int *any, svbool_t *ptr) +{ + svbool_t res = svcmpge (pg, x, 10); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test4 (svbool_t pg, svint8_t x, int *any) +{ + svbool_t res = svcmpge (pg, x, 10); + return svptest_any (pg, res); +} + +void +test5 (svint16_t x, svint16_t y, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b16 (); + svbool_t res = svcmpge (pg, x, y); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test6 (svint16_t x, svint16_t y) +{ + svbool_t pg = svptrue_b16 (); + svbool_t res = svcmpge (pg, x, y); + return svptest_any (pg, res); +} + +void +test7 (svint16_t x, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b16 (); + svbool_t res = svcmpge (pg, x, 10); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test8 (svint16_t x) +{ + svbool_t pg = svptrue_b16 (); + svbool_t res = svcmpge (pg, x, 10); + return svptest_any (pg, res); +} + +void +test9 (svint32_t x, svint32_t y, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b32 (); + svbool_t res = svcmpge (pg, x, y); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test10 (svint32_t x, svint32_t y) +{ + svbool_t pg = svptrue_b32 (); + svbool_t res = svcmpge (pg, x, y); + return svptest_any (pg, res); +} + +void +test11 (svint32_t x, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b32 (); + svbool_t res = svcmpge (pg, x, 10); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test12 (svint32_t x) +{ + svbool_t pg = svptrue_b32 (); + svbool_t res = svcmpge (pg, x, 10); + return svptest_any (pg, res); +} + +void +test13 (svint64_t x, svint64_t y, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b64 (); + svbool_t res = svcmpge (pg, x, y); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test14 (svint64_t x, svint64_t y) +{ + svbool_t pg = svptrue_b64 (); + svbool_t res = svcmpge (pg, x, y); + return svptest_any (pg, res); +} + +void +test15 (svint64_t x, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b64 (); + svbool_t res = svcmpge (pg, x, 10); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test16 (svint64_t x) +{ + svbool_t pg = svptrue_b64 (); + svbool_t res = svcmpge (pg, x, 10); + return svptest_any (pg, res); +} + +/* { dg-final { scan-assembler-times {\tcmpge\t} 16 } } */ +/* { dg-final { scan-assembler-times {\tcmpge\t[^\n]*, #10} 8 } } */ +/* { dg-final { scan-assembler-not {\tptest\t} } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpge_2.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpge_2.c new file mode 100644 index 0000000..fc92291 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpge_2.c @@ -0,0 +1,140 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +#include <arm_sve.h> + +void +test1 (svbool_t pg, svuint8_t x, svuint8_t y, int *any, svbool_t *ptr) +{ + svbool_t res = svcmpge (pg, x, y); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test2 (svbool_t pg, svuint8_t x, svuint8_t y, int *any) +{ + svbool_t res = svcmpge (pg, x, y); + return svptest_any (pg, res); +} + +void +test3 (svbool_t pg, svuint8_t x, int *any, svbool_t *ptr) +{ + svbool_t res = svcmpge (pg, x, 10); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test4 (svbool_t pg, svuint8_t x, int *any) +{ + svbool_t res = svcmpge (pg, x, 10); + return svptest_any (pg, res); +} + +void +test5 (svuint16_t x, svuint16_t y, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b16 (); + svbool_t res = svcmpge (pg, x, y); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test6 (svuint16_t x, svuint16_t y) +{ + svbool_t pg = svptrue_b16 (); + svbool_t res = svcmpge (pg, x, y); + return svptest_any (pg, res); +} + +void +test7 (svuint16_t x, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b16 (); + svbool_t res = svcmpge (pg, x, 10); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test8 (svuint16_t x) +{ + svbool_t pg = svptrue_b16 (); + svbool_t res = svcmpge (pg, x, 10); + return svptest_any (pg, res); +} + +void +test9 (svuint32_t x, svuint32_t y, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b32 (); + svbool_t res = svcmpge (pg, x, y); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test10 (svuint32_t x, svuint32_t y) +{ + svbool_t pg = svptrue_b32 (); + svbool_t res = svcmpge (pg, x, y); + return svptest_any (pg, res); +} + +void +test11 (svuint32_t x, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b32 (); + svbool_t res = svcmpge (pg, x, 10); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test12 (svuint32_t x) +{ + svbool_t pg = svptrue_b32 (); + svbool_t res = svcmpge (pg, x, 10); + return svptest_any (pg, res); +} + +void +test13 (svuint64_t x, svuint64_t y, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b64 (); + svbool_t res = svcmpge (pg, x, y); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test14 (svuint64_t x, svuint64_t y) +{ + svbool_t pg = svptrue_b64 (); + svbool_t res = svcmpge (pg, x, y); + return svptest_any (pg, res); +} + +void +test15 (svuint64_t x, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b64 (); + svbool_t res = svcmpge (pg, x, 10); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test16 (svuint64_t x) +{ + svbool_t pg = svptrue_b64 (); + svbool_t res = svcmpge (pg, x, 10); + return svptest_any (pg, res); +} + +/* { dg-final { scan-assembler-times {\tcmphs\t} 16 } } */ +/* { dg-final { scan-assembler-times {\tcmphs\t[^\n]*, #10} 8 } } */ +/* { dg-final { scan-assembler-not {\tptest\t} } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpge_3.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpge_3.c new file mode 100644 index 0000000..6d50df5 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpge_3.c @@ -0,0 +1,169 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ +/* { dg-final { check-function-bodies "**" "" } } */ + +#include <arm_sve.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/* +** test1: +** cmpge p0\.b, p0/z, z0\.b, z1\.b +** ret +*/ +svbool_t +test1 (svbool_t p0, svint8_t x, svint8_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmpge (pg, x, y), p0); +} + +/* +** test2: +** cmpge p0\.b, p0/z, z0\.b, z1\.b +** ret +*/ +svbool_t +test2 (svbool_t p0, svint8_t x, svint8_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (p0, svcmpge (pg, x, y), p0); +} + +/* +** test3: +** cmpge p0\.b, p0/z, z0\.b, z1\.b +** ret +*/ +svbool_t +test3 (svbool_t p0, svint8_t x, svint8_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (p0, svcmpge (pg, x, y), pg); +} + +/* +** test4: +** ( +** cmpge p0\.b, p0/z, z0\.b, #10 +** | +** cmpgt p0\.b, p0/z, z0\.b, #9 +** ) +** ret +*/ +svbool_t +test4 (svbool_t p0, svint8_t x) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmpge (pg, x, 10), p0); +} + +/* +** test5: +** ( +** cmpge p0\.b, p0/z, z0\.b, #10 +** | +** cmpgt p0\.b, p0/z, z0\.b, #9 +** ) +** ret +*/ +svbool_t +test5 (svbool_t p0, svint8_t x) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (p0, svcmpge (pg, x, 10), p0); +} + +/* +** test6: +** ( +** cmpge p0\.b, p0/z, z0\.b, #10 +** | +** cmpgt p0\.b, p0/z, z0\.b, #9 +** ) +** ret +*/ +svbool_t +test6 (svbool_t p0, svint8_t x) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (p0, svcmpge (pg, x, 10), pg); +} + +/* +** test7: +** cmpge p0\.h, p0/z, z0\.h, z1\.h +** ret +*/ +svbool_t +test7 (svbool_t p0, svint16_t x, svint16_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmpge (pg, x, y), p0); +} + +/* +** test8: +** cmpge p0\.h, p0/z, z0\.h, #10 +** ret +*/ +svbool_t +test8 (svbool_t p0, svint16_t x) +{ + svbool_t pg = svptrue_b16 (); + return svand_z (pg, svcmpge (pg, x, 10), p0); +} + +/* +** test9: +** cmpge p0\.s, p0/z, z0\.s, z1\.s +** ret +*/ +svbool_t +test9 (svbool_t p0, svint32_t x, svint32_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmpge (pg, x, y), p0); +} + +/* +** test10: +** cmpge p0\.s, p0/z, z0\.s, #10 +** ret +*/ +svbool_t +test10 (svbool_t p0, svint32_t x) +{ + svbool_t pg = svptrue_b16 (); + return svand_z (pg, svcmpge (pg, x, 10), p0); +} + +/* +** test11: +** cmpge p0\.d, p0/z, z0\.d, z1\.d +** ret +*/ +svbool_t +test11 (svbool_t p0, svint64_t x, svint64_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmpge (pg, x, y), p0); +} + +/* +** test12: +** cmpge p0\.d, p0/z, z0\.d, #10 +** ret +*/ +svbool_t +test12 (svbool_t p0, svint64_t x) +{ + svbool_t pg = svptrue_b16 (); + return svand_z (pg, svcmpge (pg, x, 10), p0); +} + +#ifdef __cplusplus +} +#endif diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpge_4.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpge_4.c new file mode 100644 index 0000000..2430e80 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpge_4.c @@ -0,0 +1,169 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ +/* { dg-final { check-function-bodies "**" "" } } */ + +#include <arm_sve.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/* +** test1: +** cmphs p0\.b, p0/z, z0\.b, z1\.b +** ret +*/ +svbool_t +test1 (svbool_t p0, svuint8_t x, svuint8_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmpge (pg, x, y), p0); +} + +/* +** test2: +** cmphs p0\.b, p0/z, z0\.b, z1\.b +** ret +*/ +svbool_t +test2 (svbool_t p0, svuint8_t x, svuint8_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (p0, svcmpge (pg, x, y), p0); +} + +/* +** test3: +** cmphs p0\.b, p0/z, z0\.b, z1\.b +** ret +*/ +svbool_t +test3 (svbool_t p0, svuint8_t x, svuint8_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (p0, svcmpge (pg, x, y), pg); +} + +/* +** test4: +** ( +** cmphs p0\.b, p0/z, z0\.b, #10 +** | +** cmphi p0\.b, p0/z, z0\.b, #9 +** ) +** ret +*/ +svbool_t +test4 (svbool_t p0, svuint8_t x) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmpge (pg, x, 10), p0); +} + +/* +** test5: +** ( +** cmphs p0\.b, p0/z, z0\.b, #10 +** | +** cmphi p0\.b, p0/z, z0\.b, #9 +** ) +** ret +*/ +svbool_t +test5 (svbool_t p0, svuint8_t x) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (p0, svcmpge (pg, x, 10), p0); +} + +/* +** test6: +** ( +** cmphs p0\.b, p0/z, z0\.b, #10 +** | +** cmphi p0\.b, p0/z, z0\.b, #9 +** ) +** ret +*/ +svbool_t +test6 (svbool_t p0, svuint8_t x) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (p0, svcmpge (pg, x, 10), pg); +} + +/* +** test7: +** cmphs p0\.h, p0/z, z0\.h, z1\.h +** ret +*/ +svbool_t +test7 (svbool_t p0, svuint16_t x, svuint16_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmpge (pg, x, y), p0); +} + +/* +** test8: +** cmphs p0\.h, p0/z, z0\.h, #10 +** ret +*/ +svbool_t +test8 (svbool_t p0, svuint16_t x) +{ + svbool_t pg = svptrue_b16 (); + return svand_z (pg, svcmpge (pg, x, 10), p0); +} + +/* +** test9: +** cmphs p0\.s, p0/z, z0\.s, z1\.s +** ret +*/ +svbool_t +test9 (svbool_t p0, svuint32_t x, svuint32_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmpge (pg, x, y), p0); +} + +/* +** test10: +** cmphs p0\.s, p0/z, z0\.s, #10 +** ret +*/ +svbool_t +test10 (svbool_t p0, svuint32_t x) +{ + svbool_t pg = svptrue_b16 (); + return svand_z (pg, svcmpge (pg, x, 10), p0); +} + +/* +** test11: +** cmphs p0\.d, p0/z, z0\.d, z1\.d +** ret +*/ +svbool_t +test11 (svbool_t p0, svuint64_t x, svuint64_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmpge (pg, x, y), p0); +} + +/* +** test12: +** cmphs p0\.d, p0/z, z0\.d, #10 +** ret +*/ +svbool_t +test12 (svbool_t p0, svuint64_t x) +{ + svbool_t pg = svptrue_b16 (); + return svand_z (pg, svcmpge (pg, x, 10), p0); +} + +#ifdef __cplusplus +} +#endif diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpgt_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpgt_1.c new file mode 100644 index 0000000..6c28d6f --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpgt_1.c @@ -0,0 +1,140 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +#include <arm_sve.h> + +void +test1 (svbool_t pg, svint8_t x, svint8_t y, int *any, svbool_t *ptr) +{ + svbool_t res = svcmpgt (pg, x, y); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test2 (svbool_t pg, svint8_t x, svint8_t y, int *any) +{ + svbool_t res = svcmpgt (pg, x, y); + return svptest_any (pg, res); +} + +void +test3 (svbool_t pg, svint8_t x, int *any, svbool_t *ptr) +{ + svbool_t res = svcmpgt (pg, x, 10); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test4 (svbool_t pg, svint8_t x, int *any) +{ + svbool_t res = svcmpgt (pg, x, 10); + return svptest_any (pg, res); +} + +void +test5 (svint16_t x, svint16_t y, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b16 (); + svbool_t res = svcmpgt (pg, x, y); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test6 (svint16_t x, svint16_t y) +{ + svbool_t pg = svptrue_b16 (); + svbool_t res = svcmpgt (pg, x, y); + return svptest_any (pg, res); +} + +void +test7 (svint16_t x, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b16 (); + svbool_t res = svcmpgt (pg, x, 10); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test8 (svint16_t x) +{ + svbool_t pg = svptrue_b16 (); + svbool_t res = svcmpgt (pg, x, 10); + return svptest_any (pg, res); +} + +void +test9 (svint32_t x, svint32_t y, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b32 (); + svbool_t res = svcmpgt (pg, x, y); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test10 (svint32_t x, svint32_t y) +{ + svbool_t pg = svptrue_b32 (); + svbool_t res = svcmpgt (pg, x, y); + return svptest_any (pg, res); +} + +void +test11 (svint32_t x, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b32 (); + svbool_t res = svcmpgt (pg, x, 10); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test12 (svint32_t x) +{ + svbool_t pg = svptrue_b32 (); + svbool_t res = svcmpgt (pg, x, 10); + return svptest_any (pg, res); +} + +void +test13 (svint64_t x, svint64_t y, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b64 (); + svbool_t res = svcmpgt (pg, x, y); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test14 (svint64_t x, svint64_t y) +{ + svbool_t pg = svptrue_b64 (); + svbool_t res = svcmpgt (pg, x, y); + return svptest_any (pg, res); +} + +void +test15 (svint64_t x, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b64 (); + svbool_t res = svcmpgt (pg, x, 10); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test16 (svint64_t x) +{ + svbool_t pg = svptrue_b64 (); + svbool_t res = svcmpgt (pg, x, 10); + return svptest_any (pg, res); +} + +/* { dg-final { scan-assembler-times {\tcmpgt\t} 16 } } */ +/* { dg-final { scan-assembler-times {\tcmpgt\t[^\n]*, #10} 8 } } */ +/* { dg-final { scan-assembler-not {\tptest\t} } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpgt_2.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpgt_2.c new file mode 100644 index 0000000..2160484 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpgt_2.c @@ -0,0 +1,140 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +#include <arm_sve.h> + +void +test1 (svbool_t pg, svuint8_t x, svuint8_t y, int *any, svbool_t *ptr) +{ + svbool_t res = svcmpgt (pg, x, y); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test2 (svbool_t pg, svuint8_t x, svuint8_t y, int *any) +{ + svbool_t res = svcmpgt (pg, x, y); + return svptest_any (pg, res); +} + +void +test3 (svbool_t pg, svuint8_t x, int *any, svbool_t *ptr) +{ + svbool_t res = svcmpgt (pg, x, 10); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test4 (svbool_t pg, svuint8_t x, int *any) +{ + svbool_t res = svcmpgt (pg, x, 10); + return svptest_any (pg, res); +} + +void +test5 (svuint16_t x, svuint16_t y, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b16 (); + svbool_t res = svcmpgt (pg, x, y); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test6 (svuint16_t x, svuint16_t y) +{ + svbool_t pg = svptrue_b16 (); + svbool_t res = svcmpgt (pg, x, y); + return svptest_any (pg, res); +} + +void +test7 (svuint16_t x, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b16 (); + svbool_t res = svcmpgt (pg, x, 10); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test8 (svuint16_t x) +{ + svbool_t pg = svptrue_b16 (); + svbool_t res = svcmpgt (pg, x, 10); + return svptest_any (pg, res); +} + +void +test9 (svuint32_t x, svuint32_t y, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b32 (); + svbool_t res = svcmpgt (pg, x, y); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test10 (svuint32_t x, svuint32_t y) +{ + svbool_t pg = svptrue_b32 (); + svbool_t res = svcmpgt (pg, x, y); + return svptest_any (pg, res); +} + +void +test11 (svuint32_t x, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b32 (); + svbool_t res = svcmpgt (pg, x, 10); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test12 (svuint32_t x) +{ + svbool_t pg = svptrue_b32 (); + svbool_t res = svcmpgt (pg, x, 10); + return svptest_any (pg, res); +} + +void +test13 (svuint64_t x, svuint64_t y, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b64 (); + svbool_t res = svcmpgt (pg, x, y); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test14 (svuint64_t x, svuint64_t y) +{ + svbool_t pg = svptrue_b64 (); + svbool_t res = svcmpgt (pg, x, y); + return svptest_any (pg, res); +} + +void +test15 (svuint64_t x, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b64 (); + svbool_t res = svcmpgt (pg, x, 10); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test16 (svuint64_t x) +{ + svbool_t pg = svptrue_b64 (); + svbool_t res = svcmpgt (pg, x, 10); + return svptest_any (pg, res); +} + +/* { dg-final { scan-assembler-times {\tcmphi\t} 16 } } */ +/* { dg-final { scan-assembler-times {\tcmphi\t[^\n]*, #10} 8 } } */ +/* { dg-final { scan-assembler-not {\tptest\t} } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpgt_3.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpgt_3.c new file mode 100644 index 0000000..cc48b7e --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpgt_3.c @@ -0,0 +1,157 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ +/* { dg-final { check-function-bodies "**" "" } } */ + +#include <arm_sve.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/* +** test1: +** cmpgt p0\.b, p0/z, z0\.b, z1\.b +** ret +*/ +svbool_t +test1 (svbool_t p0, svint8_t x, svint8_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmpgt (pg, x, y), p0); +} + +/* +** test2: +** cmpgt p0\.b, p0/z, z0\.b, z1\.b +** ret +*/ +svbool_t +test2 (svbool_t p0, svint8_t x, svint8_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (p0, svcmpgt (pg, x, y), p0); +} + +/* +** test3: +** cmpgt p0\.b, p0/z, z0\.b, z1\.b +** ret +*/ +svbool_t +test3 (svbool_t p0, svint8_t x, svint8_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (p0, svcmpgt (pg, x, y), pg); +} + +/* +** test4: +** cmpgt p0\.b, p0/z, z0\.b, #10 +** ret +*/ +svbool_t +test4 (svbool_t p0, svint8_t x) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmpgt (pg, x, 10), p0); +} + +/* +** test5: +** cmpgt p0\.b, p0/z, z0\.b, #10 +** ret +*/ +svbool_t +test5 (svbool_t p0, svint8_t x) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (p0, svcmpgt (pg, x, 10), p0); +} + +/* +** test6: +** cmpgt p0\.b, p0/z, z0\.b, #10 +** ret +*/ +svbool_t +test6 (svbool_t p0, svint8_t x) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (p0, svcmpgt (pg, x, 10), pg); +} + +/* +** test7: +** cmpgt p0\.h, p0/z, z0\.h, z1\.h +** ret +*/ +svbool_t +test7 (svbool_t p0, svint16_t x, svint16_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmpgt (pg, x, y), p0); +} + +/* +** test8: +** cmpgt p0\.h, p0/z, z0\.h, #10 +** ret +*/ +svbool_t +test8 (svbool_t p0, svint16_t x) +{ + svbool_t pg = svptrue_b16 (); + return svand_z (pg, svcmpgt (pg, x, 10), p0); +} + +/* +** test9: +** cmpgt p0\.s, p0/z, z0\.s, z1\.s +** ret +*/ +svbool_t +test9 (svbool_t p0, svint32_t x, svint32_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmpgt (pg, x, y), p0); +} + +/* +** test10: +** cmpgt p0\.s, p0/z, z0\.s, #10 +** ret +*/ +svbool_t +test10 (svbool_t p0, svint32_t x) +{ + svbool_t pg = svptrue_b16 (); + return svand_z (pg, svcmpgt (pg, x, 10), p0); +} + +/* +** test11: +** cmpgt p0\.d, p0/z, z0\.d, z1\.d +** ret +*/ +svbool_t +test11 (svbool_t p0, svint64_t x, svint64_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmpgt (pg, x, y), p0); +} + +/* +** test12: +** cmpgt p0\.d, p0/z, z0\.d, #10 +** ret +*/ +svbool_t +test12 (svbool_t p0, svint64_t x) +{ + svbool_t pg = svptrue_b16 (); + return svand_z (pg, svcmpgt (pg, x, 10), p0); +} + +#ifdef __cplusplus +} +#endif diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpgt_4.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpgt_4.c new file mode 100644 index 0000000..bd49fe8 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpgt_4.c @@ -0,0 +1,157 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ +/* { dg-final { check-function-bodies "**" "" } } */ + +#include <arm_sve.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/* +** test1: +** cmphi p0\.b, p0/z, z0\.b, z1\.b +** ret +*/ +svbool_t +test1 (svbool_t p0, svuint8_t x, svuint8_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmpgt (pg, x, y), p0); +} + +/* +** test2: +** cmphi p0\.b, p0/z, z0\.b, z1\.b +** ret +*/ +svbool_t +test2 (svbool_t p0, svuint8_t x, svuint8_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (p0, svcmpgt (pg, x, y), p0); +} + +/* +** test3: +** cmphi p0\.b, p0/z, z0\.b, z1\.b +** ret +*/ +svbool_t +test3 (svbool_t p0, svuint8_t x, svuint8_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (p0, svcmpgt (pg, x, y), pg); +} + +/* +** test4: +** cmphi p0\.b, p0/z, z0\.b, #10 +** ret +*/ +svbool_t +test4 (svbool_t p0, svuint8_t x) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmpgt (pg, x, 10), p0); +} + +/* +** test5: +** cmphi p0\.b, p0/z, z0\.b, #10 +** ret +*/ +svbool_t +test5 (svbool_t p0, svuint8_t x) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (p0, svcmpgt (pg, x, 10), p0); +} + +/* +** test6: +** cmphi p0\.b, p0/z, z0\.b, #10 +** ret +*/ +svbool_t +test6 (svbool_t p0, svuint8_t x) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (p0, svcmpgt (pg, x, 10), pg); +} + +/* +** test7: +** cmphi p0\.h, p0/z, z0\.h, z1\.h +** ret +*/ +svbool_t +test7 (svbool_t p0, svuint16_t x, svuint16_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmpgt (pg, x, y), p0); +} + +/* +** test8: +** cmphi p0\.h, p0/z, z0\.h, #10 +** ret +*/ +svbool_t +test8 (svbool_t p0, svuint16_t x) +{ + svbool_t pg = svptrue_b16 (); + return svand_z (pg, svcmpgt (pg, x, 10), p0); +} + +/* +** test9: +** cmphi p0\.s, p0/z, z0\.s, z1\.s +** ret +*/ +svbool_t +test9 (svbool_t p0, svuint32_t x, svuint32_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmpgt (pg, x, y), p0); +} + +/* +** test10: +** cmphi p0\.s, p0/z, z0\.s, #10 +** ret +*/ +svbool_t +test10 (svbool_t p0, svuint32_t x) +{ + svbool_t pg = svptrue_b16 (); + return svand_z (pg, svcmpgt (pg, x, 10), p0); +} + +/* +** test11: +** cmphi p0\.d, p0/z, z0\.d, z1\.d +** ret +*/ +svbool_t +test11 (svbool_t p0, svuint64_t x, svuint64_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmpgt (pg, x, y), p0); +} + +/* +** test12: +** cmphi p0\.d, p0/z, z0\.d, #10 +** ret +*/ +svbool_t +test12 (svbool_t p0, svuint64_t x) +{ + svbool_t pg = svptrue_b16 (); + return svand_z (pg, svcmpgt (pg, x, 10), p0); +} + +#ifdef __cplusplus +} +#endif diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmple_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmple_1.c new file mode 100644 index 0000000..f2d7d2b --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmple_1.c @@ -0,0 +1,140 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +#include <arm_sve.h> + +void +test1 (svbool_t pg, svint8_t x, svint8_t y, int *any, svbool_t *ptr) +{ + svbool_t res = svcmple (pg, x, y); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test2 (svbool_t pg, svint8_t x, svint8_t y, int *any) +{ + svbool_t res = svcmple (pg, x, y); + return svptest_any (pg, res); +} + +void +test3 (svbool_t pg, svint8_t x, int *any, svbool_t *ptr) +{ + svbool_t res = svcmple (pg, x, 10); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test4 (svbool_t pg, svint8_t x, int *any) +{ + svbool_t res = svcmple (pg, x, 10); + return svptest_any (pg, res); +} + +void +test5 (svint16_t x, svint16_t y, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b16 (); + svbool_t res = svcmple (pg, x, y); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test6 (svint16_t x, svint16_t y) +{ + svbool_t pg = svptrue_b16 (); + svbool_t res = svcmple (pg, x, y); + return svptest_any (pg, res); +} + +void +test7 (svint16_t x, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b16 (); + svbool_t res = svcmple (pg, x, 10); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test8 (svint16_t x) +{ + svbool_t pg = svptrue_b16 (); + svbool_t res = svcmple (pg, x, 10); + return svptest_any (pg, res); +} + +void +test9 (svint32_t x, svint32_t y, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b32 (); + svbool_t res = svcmple (pg, x, y); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test10 (svint32_t x, svint32_t y) +{ + svbool_t pg = svptrue_b32 (); + svbool_t res = svcmple (pg, x, y); + return svptest_any (pg, res); +} + +void +test11 (svint32_t x, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b32 (); + svbool_t res = svcmple (pg, x, 10); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test12 (svint32_t x) +{ + svbool_t pg = svptrue_b32 (); + svbool_t res = svcmple (pg, x, 10); + return svptest_any (pg, res); +} + +void +test13 (svint64_t x, svint64_t y, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b64 (); + svbool_t res = svcmple (pg, x, y); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test14 (svint64_t x, svint64_t y) +{ + svbool_t pg = svptrue_b64 (); + svbool_t res = svcmple (pg, x, y); + return svptest_any (pg, res); +} + +void +test15 (svint64_t x, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b64 (); + svbool_t res = svcmple (pg, x, 10); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test16 (svint64_t x) +{ + svbool_t pg = svptrue_b64 (); + svbool_t res = svcmple (pg, x, 10); + return svptest_any (pg, res); +} + +/* { dg-final { scan-assembler-times {\tcmple\t} 16 } } */ +/* { dg-final { scan-assembler-times {\tcmple\t[^\n]*, #10} 8 } } */ +/* { dg-final { scan-assembler-not {\tptest\t} } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmple_2.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmple_2.c new file mode 100644 index 0000000..9d13d7a --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmple_2.c @@ -0,0 +1,140 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +#include <arm_sve.h> + +void +test1 (svbool_t pg, svuint8_t x, svuint8_t y, int *any, svbool_t *ptr) +{ + svbool_t res = svcmple (pg, x, y); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test2 (svbool_t pg, svuint8_t x, svuint8_t y, int *any) +{ + svbool_t res = svcmple (pg, x, y); + return svptest_any (pg, res); +} + +void +test3 (svbool_t pg, svuint8_t x, int *any, svbool_t *ptr) +{ + svbool_t res = svcmple (pg, x, 10); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test4 (svbool_t pg, svuint8_t x, int *any) +{ + svbool_t res = svcmple (pg, x, 10); + return svptest_any (pg, res); +} + +void +test5 (svuint16_t x, svuint16_t y, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b16 (); + svbool_t res = svcmple (pg, x, y); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test6 (svuint16_t x, svuint16_t y) +{ + svbool_t pg = svptrue_b16 (); + svbool_t res = svcmple (pg, x, y); + return svptest_any (pg, res); +} + +void +test7 (svuint16_t x, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b16 (); + svbool_t res = svcmple (pg, x, 10); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test8 (svuint16_t x) +{ + svbool_t pg = svptrue_b16 (); + svbool_t res = svcmple (pg, x, 10); + return svptest_any (pg, res); +} + +void +test9 (svuint32_t x, svuint32_t y, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b32 (); + svbool_t res = svcmple (pg, x, y); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test10 (svuint32_t x, svuint32_t y) +{ + svbool_t pg = svptrue_b32 (); + svbool_t res = svcmple (pg, x, y); + return svptest_any (pg, res); +} + +void +test11 (svuint32_t x, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b32 (); + svbool_t res = svcmple (pg, x, 10); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test12 (svuint32_t x) +{ + svbool_t pg = svptrue_b32 (); + svbool_t res = svcmple (pg, x, 10); + return svptest_any (pg, res); +} + +void +test13 (svuint64_t x, svuint64_t y, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b64 (); + svbool_t res = svcmple (pg, x, y); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test14 (svuint64_t x, svuint64_t y) +{ + svbool_t pg = svptrue_b64 (); + svbool_t res = svcmple (pg, x, y); + return svptest_any (pg, res); +} + +void +test15 (svuint64_t x, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b64 (); + svbool_t res = svcmple (pg, x, 10); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test16 (svuint64_t x) +{ + svbool_t pg = svptrue_b64 (); + svbool_t res = svcmple (pg, x, 10); + return svptest_any (pg, res); +} + +/* { dg-final { scan-assembler-times {\tcmpls\t} 16 } } */ +/* { dg-final { scan-assembler-times {\tcmpls\t[^\n]*, #10} 8 } } */ +/* { dg-final { scan-assembler-not {\tptest\t} } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmple_3.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmple_3.c new file mode 100644 index 0000000..7a9326c --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmple_3.c @@ -0,0 +1,157 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ +/* { dg-final { check-function-bodies "**" "" } } */ + +#include <arm_sve.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/* +** test1: +** cmple p0\.b, p0/z, z0\.b, z1\.b +** ret +*/ +svbool_t +test1 (svbool_t p0, svint8_t x, svint8_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmple (pg, x, y), p0); +} + +/* +** test2: +** cmple p0\.b, p0/z, z0\.b, z1\.b +** ret +*/ +svbool_t +test2 (svbool_t p0, svint8_t x, svint8_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (p0, svcmple (pg, x, y), p0); +} + +/* +** test3: +** cmple p0\.b, p0/z, z0\.b, z1\.b +** ret +*/ +svbool_t +test3 (svbool_t p0, svint8_t x, svint8_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (p0, svcmple (pg, x, y), pg); +} + +/* +** test4: +** cmple p0\.b, p0/z, z0\.b, #10 +** ret +*/ +svbool_t +test4 (svbool_t p0, svint8_t x) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmple (pg, x, 10), p0); +} + +/* +** test5: +** cmple p0\.b, p0/z, z0\.b, #10 +** ret +*/ +svbool_t +test5 (svbool_t p0, svint8_t x) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (p0, svcmple (pg, x, 10), p0); +} + +/* +** test6: +** cmple p0\.b, p0/z, z0\.b, #10 +** ret +*/ +svbool_t +test6 (svbool_t p0, svint8_t x) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (p0, svcmple (pg, x, 10), pg); +} + +/* +** test7: +** cmple p0\.h, p0/z, z0\.h, z1\.h +** ret +*/ +svbool_t +test7 (svbool_t p0, svint16_t x, svint16_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmple (pg, x, y), p0); +} + +/* +** test8: +** cmple p0\.h, p0/z, z0\.h, #10 +** ret +*/ +svbool_t +test8 (svbool_t p0, svint16_t x) +{ + svbool_t pg = svptrue_b16 (); + return svand_z (pg, svcmple (pg, x, 10), p0); +} + +/* +** test9: +** cmple p0\.s, p0/z, z0\.s, z1\.s +** ret +*/ +svbool_t +test9 (svbool_t p0, svint32_t x, svint32_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmple (pg, x, y), p0); +} + +/* +** test10: +** cmple p0\.s, p0/z, z0\.s, #10 +** ret +*/ +svbool_t +test10 (svbool_t p0, svint32_t x) +{ + svbool_t pg = svptrue_b16 (); + return svand_z (pg, svcmple (pg, x, 10), p0); +} + +/* +** test11: +** cmple p0\.d, p0/z, z0\.d, z1\.d +** ret +*/ +svbool_t +test11 (svbool_t p0, svint64_t x, svint64_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmple (pg, x, y), p0); +} + +/* +** test12: +** cmple p0\.d, p0/z, z0\.d, #10 +** ret +*/ +svbool_t +test12 (svbool_t p0, svint64_t x) +{ + svbool_t pg = svptrue_b16 (); + return svand_z (pg, svcmple (pg, x, 10), p0); +} + +#ifdef __cplusplus +} +#endif diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmple_4.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmple_4.c new file mode 100644 index 0000000..aca4385 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmple_4.c @@ -0,0 +1,157 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ +/* { dg-final { check-function-bodies "**" "" } } */ + +#include <arm_sve.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/* +** test1: +** cmpls p0\.b, p0/z, z0\.b, z1\.b +** ret +*/ +svbool_t +test1 (svbool_t p0, svuint8_t x, svuint8_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmple (pg, x, y), p0); +} + +/* +** test2: +** cmpls p0\.b, p0/z, z0\.b, z1\.b +** ret +*/ +svbool_t +test2 (svbool_t p0, svuint8_t x, svuint8_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (p0, svcmple (pg, x, y), p0); +} + +/* +** test3: +** cmpls p0\.b, p0/z, z0\.b, z1\.b +** ret +*/ +svbool_t +test3 (svbool_t p0, svuint8_t x, svuint8_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (p0, svcmple (pg, x, y), pg); +} + +/* +** test4: +** cmpls p0\.b, p0/z, z0\.b, #10 +** ret +*/ +svbool_t +test4 (svbool_t p0, svuint8_t x) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmple (pg, x, 10), p0); +} + +/* +** test5: +** cmpls p0\.b, p0/z, z0\.b, #10 +** ret +*/ +svbool_t +test5 (svbool_t p0, svuint8_t x) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (p0, svcmple (pg, x, 10), p0); +} + +/* +** test6: +** cmpls p0\.b, p0/z, z0\.b, #10 +** ret +*/ +svbool_t +test6 (svbool_t p0, svuint8_t x) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (p0, svcmple (pg, x, 10), pg); +} + +/* +** test7: +** cmpls p0\.h, p0/z, z0\.h, z1\.h +** ret +*/ +svbool_t +test7 (svbool_t p0, svuint16_t x, svuint16_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmple (pg, x, y), p0); +} + +/* +** test8: +** cmpls p0\.h, p0/z, z0\.h, #10 +** ret +*/ +svbool_t +test8 (svbool_t p0, svuint16_t x) +{ + svbool_t pg = svptrue_b16 (); + return svand_z (pg, svcmple (pg, x, 10), p0); +} + +/* +** test9: +** cmpls p0\.s, p0/z, z0\.s, z1\.s +** ret +*/ +svbool_t +test9 (svbool_t p0, svuint32_t x, svuint32_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmple (pg, x, y), p0); +} + +/* +** test10: +** cmpls p0\.s, p0/z, z0\.s, #10 +** ret +*/ +svbool_t +test10 (svbool_t p0, svuint32_t x) +{ + svbool_t pg = svptrue_b16 (); + return svand_z (pg, svcmple (pg, x, 10), p0); +} + +/* +** test11: +** cmpls p0\.d, p0/z, z0\.d, z1\.d +** ret +*/ +svbool_t +test11 (svbool_t p0, svuint64_t x, svuint64_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmple (pg, x, y), p0); +} + +/* +** test12: +** cmpls p0\.d, p0/z, z0\.d, #10 +** ret +*/ +svbool_t +test12 (svbool_t p0, svuint64_t x) +{ + svbool_t pg = svptrue_b16 (); + return svand_z (pg, svcmple (pg, x, 10), p0); +} + +#ifdef __cplusplus +} +#endif diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmplt_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmplt_1.c new file mode 100644 index 0000000..a15bb4a --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmplt_1.c @@ -0,0 +1,140 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +#include <arm_sve.h> + +void +test1 (svbool_t pg, svint8_t x, svint8_t y, int *any, svbool_t *ptr) +{ + svbool_t res = svcmplt (pg, x, y); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test2 (svbool_t pg, svint8_t x, svint8_t y, int *any) +{ + svbool_t res = svcmplt (pg, x, y); + return svptest_any (pg, res); +} + +void +test3 (svbool_t pg, svint8_t x, int *any, svbool_t *ptr) +{ + svbool_t res = svcmplt (pg, x, 10); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test4 (svbool_t pg, svint8_t x, int *any) +{ + svbool_t res = svcmplt (pg, x, 10); + return svptest_any (pg, res); +} + +void +test5 (svint16_t x, svint16_t y, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b16 (); + svbool_t res = svcmplt (pg, x, y); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test6 (svint16_t x, svint16_t y) +{ + svbool_t pg = svptrue_b16 (); + svbool_t res = svcmplt (pg, x, y); + return svptest_any (pg, res); +} + +void +test7 (svint16_t x, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b16 (); + svbool_t res = svcmplt (pg, x, 10); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test8 (svint16_t x) +{ + svbool_t pg = svptrue_b16 (); + svbool_t res = svcmplt (pg, x, 10); + return svptest_any (pg, res); +} + +void +test9 (svint32_t x, svint32_t y, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b32 (); + svbool_t res = svcmplt (pg, x, y); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test10 (svint32_t x, svint32_t y) +{ + svbool_t pg = svptrue_b32 (); + svbool_t res = svcmplt (pg, x, y); + return svptest_any (pg, res); +} + +void +test11 (svint32_t x, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b32 (); + svbool_t res = svcmplt (pg, x, 10); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test12 (svint32_t x) +{ + svbool_t pg = svptrue_b32 (); + svbool_t res = svcmplt (pg, x, 10); + return svptest_any (pg, res); +} + +void +test13 (svint64_t x, svint64_t y, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b64 (); + svbool_t res = svcmplt (pg, x, y); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test14 (svint64_t x, svint64_t y) +{ + svbool_t pg = svptrue_b64 (); + svbool_t res = svcmplt (pg, x, y); + return svptest_any (pg, res); +} + +void +test15 (svint64_t x, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b64 (); + svbool_t res = svcmplt (pg, x, 10); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test16 (svint64_t x) +{ + svbool_t pg = svptrue_b64 (); + svbool_t res = svcmplt (pg, x, 10); + return svptest_any (pg, res); +} + +/* { dg-final { scan-assembler-times {\tcmplt\t} 16 } } */ +/* { dg-final { scan-assembler-times {\tcmplt\t[^\n]*, #10} 8 } } */ +/* { dg-final { scan-assembler-not {\tptest\t} } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmplt_2.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmplt_2.c new file mode 100644 index 0000000..43c53a1 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmplt_2.c @@ -0,0 +1,140 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +#include <arm_sve.h> + +void +test1 (svbool_t pg, svuint8_t x, svuint8_t y, int *any, svbool_t *ptr) +{ + svbool_t res = svcmplt (pg, x, y); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test2 (svbool_t pg, svuint8_t x, svuint8_t y, int *any) +{ + svbool_t res = svcmplt (pg, x, y); + return svptest_any (pg, res); +} + +void +test3 (svbool_t pg, svuint8_t x, int *any, svbool_t *ptr) +{ + svbool_t res = svcmplt (pg, x, 10); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test4 (svbool_t pg, svuint8_t x, int *any) +{ + svbool_t res = svcmplt (pg, x, 10); + return svptest_any (pg, res); +} + +void +test5 (svuint16_t x, svuint16_t y, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b16 (); + svbool_t res = svcmplt (pg, x, y); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test6 (svuint16_t x, svuint16_t y) +{ + svbool_t pg = svptrue_b16 (); + svbool_t res = svcmplt (pg, x, y); + return svptest_any (pg, res); +} + +void +test7 (svuint16_t x, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b16 (); + svbool_t res = svcmplt (pg, x, 10); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test8 (svuint16_t x) +{ + svbool_t pg = svptrue_b16 (); + svbool_t res = svcmplt (pg, x, 10); + return svptest_any (pg, res); +} + +void +test9 (svuint32_t x, svuint32_t y, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b32 (); + svbool_t res = svcmplt (pg, x, y); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test10 (svuint32_t x, svuint32_t y) +{ + svbool_t pg = svptrue_b32 (); + svbool_t res = svcmplt (pg, x, y); + return svptest_any (pg, res); +} + +void +test11 (svuint32_t x, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b32 (); + svbool_t res = svcmplt (pg, x, 10); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test12 (svuint32_t x) +{ + svbool_t pg = svptrue_b32 (); + svbool_t res = svcmplt (pg, x, 10); + return svptest_any (pg, res); +} + +void +test13 (svuint64_t x, svuint64_t y, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b64 (); + svbool_t res = svcmplt (pg, x, y); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test14 (svuint64_t x, svuint64_t y) +{ + svbool_t pg = svptrue_b64 (); + svbool_t res = svcmplt (pg, x, y); + return svptest_any (pg, res); +} + +void +test15 (svuint64_t x, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b64 (); + svbool_t res = svcmplt (pg, x, 10); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test16 (svuint64_t x) +{ + svbool_t pg = svptrue_b64 (); + svbool_t res = svcmplt (pg, x, 10); + return svptest_any (pg, res); +} + +/* { dg-final { scan-assembler-times {\tcmplo\t} 16 } } */ +/* { dg-final { scan-assembler-times {\tcmplo\t[^\n]*, #10} 8 } } */ +/* { dg-final { scan-assembler-not {\tptest\t} } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmplt_3.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmplt_3.c new file mode 100644 index 0000000..bddbbeb --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmplt_3.c @@ -0,0 +1,169 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ +/* { dg-final { check-function-bodies "**" "" } } */ + +#include <arm_sve.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/* +** test1: +** cmplt p0\.b, p0/z, z0\.b, z1\.b +** ret +*/ +svbool_t +test1 (svbool_t p0, svint8_t x, svint8_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmplt (pg, x, y), p0); +} + +/* +** test2: +** cmplt p0\.b, p0/z, z0\.b, z1\.b +** ret +*/ +svbool_t +test2 (svbool_t p0, svint8_t x, svint8_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (p0, svcmplt (pg, x, y), p0); +} + +/* +** test3: +** cmplt p0\.b, p0/z, z0\.b, z1\.b +** ret +*/ +svbool_t +test3 (svbool_t p0, svint8_t x, svint8_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (p0, svcmplt (pg, x, y), pg); +} + +/* +** test4: +** ( +** cmplt p0\.b, p0/z, z0\.b, #10 +** | +** cmple p0\.b, p0/z, z0\.b, #9 +** ) +** ret +*/ +svbool_t +test4 (svbool_t p0, svint8_t x) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmplt (pg, x, 10), p0); +} + +/* +** test5: +** ( +** cmplt p0\.b, p0/z, z0\.b, #10 +** | +** cmple p0\.b, p0/z, z0\.b, #9 +** ) +** ret +*/ +svbool_t +test5 (svbool_t p0, svint8_t x) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (p0, svcmplt (pg, x, 10), p0); +} + +/* +** test6: +** ( +** cmplt p0\.b, p0/z, z0\.b, #10 +** | +** cmple p0\.b, p0/z, z0\.b, #9 +** ) +** ret +*/ +svbool_t +test6 (svbool_t p0, svint8_t x) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (p0, svcmplt (pg, x, 10), pg); +} + +/* +** test7: +** cmplt p0\.h, p0/z, z0\.h, z1\.h +** ret +*/ +svbool_t +test7 (svbool_t p0, svint16_t x, svint16_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmplt (pg, x, y), p0); +} + +/* +** test8: +** cmplt p0\.h, p0/z, z0\.h, #10 +** ret +*/ +svbool_t +test8 (svbool_t p0, svint16_t x) +{ + svbool_t pg = svptrue_b16 (); + return svand_z (pg, svcmplt (pg, x, 10), p0); +} + +/* +** test9: +** cmplt p0\.s, p0/z, z0\.s, z1\.s +** ret +*/ +svbool_t +test9 (svbool_t p0, svint32_t x, svint32_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmplt (pg, x, y), p0); +} + +/* +** test10: +** cmplt p0\.s, p0/z, z0\.s, #10 +** ret +*/ +svbool_t +test10 (svbool_t p0, svint32_t x) +{ + svbool_t pg = svptrue_b16 (); + return svand_z (pg, svcmplt (pg, x, 10), p0); +} + +/* +** test11: +** cmplt p0\.d, p0/z, z0\.d, z1\.d +** ret +*/ +svbool_t +test11 (svbool_t p0, svint64_t x, svint64_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmplt (pg, x, y), p0); +} + +/* +** test12: +** cmplt p0\.d, p0/z, z0\.d, #10 +** ret +*/ +svbool_t +test12 (svbool_t p0, svint64_t x) +{ + svbool_t pg = svptrue_b16 (); + return svand_z (pg, svcmplt (pg, x, 10), p0); +} + +#ifdef __cplusplus +} +#endif diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmplt_4.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmplt_4.c new file mode 100644 index 0000000..b71c8e9 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmplt_4.c @@ -0,0 +1,169 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ +/* { dg-final { check-function-bodies "**" "" } } */ + +#include <arm_sve.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/* +** test1: +** cmplo p0\.b, p0/z, z0\.b, z1\.b +** ret +*/ +svbool_t +test1 (svbool_t p0, svuint8_t x, svuint8_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmplt (pg, x, y), p0); +} + +/* +** test2: +** cmplo p0\.b, p0/z, z0\.b, z1\.b +** ret +*/ +svbool_t +test2 (svbool_t p0, svuint8_t x, svuint8_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (p0, svcmplt (pg, x, y), p0); +} + +/* +** test3: +** cmplo p0\.b, p0/z, z0\.b, z1\.b +** ret +*/ +svbool_t +test3 (svbool_t p0, svuint8_t x, svuint8_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (p0, svcmplt (pg, x, y), pg); +} + +/* +** test4: +** ( +** cmplo p0\.b, p0/z, z0\.b, #10 +** | +** cmpls p0\.b, p0/z, z0\.b, #9 +** ) +** ret +*/ +svbool_t +test4 (svbool_t p0, svuint8_t x) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmplt (pg, x, 10), p0); +} + +/* +** test5: +** ( +** cmplo p0\.b, p0/z, z0\.b, #10 +** | +** cmpls p0\.b, p0/z, z0\.b, #9 +** ) +** ret +*/ +svbool_t +test5 (svbool_t p0, svuint8_t x) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (p0, svcmplt (pg, x, 10), p0); +} + +/* +** test6: +** ( +** cmplo p0\.b, p0/z, z0\.b, #10 +** | +** cmpls p0\.b, p0/z, z0\.b, #9 +** ) +** ret +*/ +svbool_t +test6 (svbool_t p0, svuint8_t x) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (p0, svcmplt (pg, x, 10), pg); +} + +/* +** test7: +** cmplo p0\.h, p0/z, z0\.h, z1\.h +** ret +*/ +svbool_t +test7 (svbool_t p0, svuint16_t x, svuint16_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmplt (pg, x, y), p0); +} + +/* +** test8: +** cmplo p0\.h, p0/z, z0\.h, #10 +** ret +*/ +svbool_t +test8 (svbool_t p0, svuint16_t x) +{ + svbool_t pg = svptrue_b16 (); + return svand_z (pg, svcmplt (pg, x, 10), p0); +} + +/* +** test9: +** cmplo p0\.s, p0/z, z0\.s, z1\.s +** ret +*/ +svbool_t +test9 (svbool_t p0, svuint32_t x, svuint32_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmplt (pg, x, y), p0); +} + +/* +** test10: +** cmplo p0\.s, p0/z, z0\.s, #10 +** ret +*/ +svbool_t +test10 (svbool_t p0, svuint32_t x) +{ + svbool_t pg = svptrue_b16 (); + return svand_z (pg, svcmplt (pg, x, 10), p0); +} + +/* +** test11: +** cmplo p0\.d, p0/z, z0\.d, z1\.d +** ret +*/ +svbool_t +test11 (svbool_t p0, svuint64_t x, svuint64_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmplt (pg, x, y), p0); +} + +/* +** test12: +** cmplo p0\.d, p0/z, z0\.d, #10 +** ret +*/ +svbool_t +test12 (svbool_t p0, svuint64_t x) +{ + svbool_t pg = svptrue_b16 (); + return svand_z (pg, svcmplt (pg, x, 10), p0); +} + +#ifdef __cplusplus +} +#endif diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpne_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpne_1.c new file mode 100644 index 0000000..61f7718 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpne_1.c @@ -0,0 +1,140 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +#include <arm_sve.h> + +void +test1 (svbool_t pg, svint8_t x, svint8_t y, int *any, svbool_t *ptr) +{ + svbool_t res = svcmpne (pg, x, y); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test2 (svbool_t pg, svint8_t x, svint8_t y, int *any) +{ + svbool_t res = svcmpne (pg, x, y); + return svptest_any (pg, res); +} + +void +test3 (svbool_t pg, svint8_t x, int *any, svbool_t *ptr) +{ + svbool_t res = svcmpne (pg, x, 10); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test4 (svbool_t pg, svint8_t x, int *any) +{ + svbool_t res = svcmpne (pg, x, 10); + return svptest_any (pg, res); +} + +void +test5 (svint16_t x, svint16_t y, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b16 (); + svbool_t res = svcmpne (pg, x, y); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test6 (svint16_t x, svint16_t y) +{ + svbool_t pg = svptrue_b16 (); + svbool_t res = svcmpne (pg, x, y); + return svptest_any (pg, res); +} + +void +test7 (svint16_t x, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b16 (); + svbool_t res = svcmpne (pg, x, 10); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test8 (svint16_t x) +{ + svbool_t pg = svptrue_b16 (); + svbool_t res = svcmpne (pg, x, 10); + return svptest_any (pg, res); +} + +void +test9 (svint32_t x, svint32_t y, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b32 (); + svbool_t res = svcmpne (pg, x, y); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test10 (svint32_t x, svint32_t y) +{ + svbool_t pg = svptrue_b32 (); + svbool_t res = svcmpne (pg, x, y); + return svptest_any (pg, res); +} + +void +test11 (svint32_t x, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b32 (); + svbool_t res = svcmpne (pg, x, 10); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test12 (svint32_t x) +{ + svbool_t pg = svptrue_b32 (); + svbool_t res = svcmpne (pg, x, 10); + return svptest_any (pg, res); +} + +void +test13 (svint64_t x, svint64_t y, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b64 (); + svbool_t res = svcmpne (pg, x, y); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test14 (svint64_t x, svint64_t y) +{ + svbool_t pg = svptrue_b64 (); + svbool_t res = svcmpne (pg, x, y); + return svptest_any (pg, res); +} + +void +test15 (svint64_t x, int *any, svbool_t *ptr) +{ + svbool_t pg = svptrue_b64 (); + svbool_t res = svcmpne (pg, x, 10); + *any = svptest_any (pg, res); + *ptr = res; +} + +int +test16 (svint64_t x) +{ + svbool_t pg = svptrue_b64 (); + svbool_t res = svcmpne (pg, x, 10); + return svptest_any (pg, res); +} + +/* { dg-final { scan-assembler-times {\tcmpne\t} 16 } } */ +/* { dg-final { scan-assembler-times {\tcmpne\t[^\n]*, #10} 8 } } */ +/* { dg-final { scan-assembler-not {\tptest\t} } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpne_2.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpne_2.c new file mode 100644 index 0000000..53cedb3 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpne_2.c @@ -0,0 +1,157 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ +/* { dg-final { check-function-bodies "**" "" } } */ + +#include <arm_sve.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/* +** test1: +** cmpne p0\.b, p0/z, z0\.b, z1\.b +** ret +*/ +svbool_t +test1 (svbool_t p0, svint8_t x, svint8_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmpne (pg, x, y), p0); +} + +/* +** test2: +** cmpne p0\.b, p0/z, z0\.b, z1\.b +** ret +*/ +svbool_t +test2 (svbool_t p0, svint8_t x, svint8_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (p0, svcmpne (pg, x, y), p0); +} + +/* +** test3: +** cmpne p0\.b, p0/z, z0\.b, z1\.b +** ret +*/ +svbool_t +test3 (svbool_t p0, svint8_t x, svint8_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (p0, svcmpne (pg, x, y), pg); +} + +/* +** test4: +** cmpne p0\.b, p0/z, z0\.b, #10 +** ret +*/ +svbool_t +test4 (svbool_t p0, svint8_t x) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmpne (pg, x, 10), p0); +} + +/* +** test5: +** cmpne p0\.b, p0/z, z0\.b, #10 +** ret +*/ +svbool_t +test5 (svbool_t p0, svint8_t x) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (p0, svcmpne (pg, x, 10), p0); +} + +/* +** test6: +** cmpne p0\.b, p0/z, z0\.b, #10 +** ret +*/ +svbool_t +test6 (svbool_t p0, svint8_t x) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (p0, svcmpne (pg, x, 10), pg); +} + +/* +** test7: +** cmpne p0\.h, p0/z, z0\.h, z1\.h +** ret +*/ +svbool_t +test7 (svbool_t p0, svint16_t x, svint16_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmpne (pg, x, y), p0); +} + +/* +** test8: +** cmpne p0\.h, p0/z, z0\.h, #10 +** ret +*/ +svbool_t +test8 (svbool_t p0, svint16_t x) +{ + svbool_t pg = svptrue_b16 (); + return svand_z (pg, svcmpne (pg, x, 10), p0); +} + +/* +** test9: +** cmpne p0\.s, p0/z, z0\.s, z1\.s +** ret +*/ +svbool_t +test9 (svbool_t p0, svint32_t x, svint32_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmpne (pg, x, y), p0); +} + +/* +** test10: +** cmpne p0\.s, p0/z, z0\.s, #10 +** ret +*/ +svbool_t +test10 (svbool_t p0, svint32_t x) +{ + svbool_t pg = svptrue_b16 (); + return svand_z (pg, svcmpne (pg, x, 10), p0); +} + +/* +** test11: +** cmpne p0\.d, p0/z, z0\.d, z1\.d +** ret +*/ +svbool_t +test11 (svbool_t p0, svint64_t x, svint64_t y) +{ + svbool_t pg = svptrue_b8 (); + return svand_z (pg, svcmpne (pg, x, y), p0); +} + +/* +** test12: +** cmpne p0\.d, p0/z, z0\.d, #10 +** ret +*/ +svbool_t +test12 (svbool_t p0, svint64_t x) +{ + svbool_t pg = svptrue_b16 (); + return svand_z (pg, svcmpne (pg, x, 10), p0); +} + +#ifdef __cplusplus +} +#endif diff --git a/gcc/testsuite/gcc.target/aarch64/sve/pred_clobber_1.c b/gcc/testsuite/gcc.target/aarch64/sve/pred_clobber_1.c index 38dfdd4..e777f03 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/pred_clobber_1.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/pred_clobber_1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -mcpu=neoverse-n2" } */ +/* { dg-options "-O2 -mcpu=neoverse-n2 -fdisable-rtl-combine" } */ /* { dg-final { check-function-bodies "**" "" } } */ #pragma GCC target "+sve" diff --git a/gcc/testsuite/gcc.target/aarch64/sve/pred_clobber_2.c b/gcc/testsuite/gcc.target/aarch64/sve/pred_clobber_2.c index 45363cc..41182e1 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/pred_clobber_2.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/pred_clobber_2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -mcpu=neoverse-v2" } */ +/* { dg-options "-O2 -mcpu=neoverse-v2 -fdisable-rtl-combine" } */ /* { dg-final { check-function-bodies "**" "" } } */ #pragma GCC target "+sve" diff --git a/gcc/testsuite/gcc.target/aarch64/sve/pred_clobber_3.c b/gcc/testsuite/gcc.target/aarch64/sve/pred_clobber_3.c index c50a581..04a9023 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/pred_clobber_3.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/pred_clobber_3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -mcpu=neoverse-v1" } */ +/* { dg-options "-O2 -mcpu=neoverse-v1 -fdisable-rtl-combine" } */ /* { dg-final { check-function-bodies "**" "" } } */ #pragma GCC target "+sve" |