diff --git a/gcc/config/arm/mve.md b/gcc/config/arm/mve.md index 369d7a79f6cf7..a0d0e47877f1e 100644 --- a/gcc/config/arm/mve.md +++ b/gcc/config/arm/mve.md @@ -834,8 +834,9 @@ (define_insn "mve_vcmpq_n_" [ (set (match_operand: 0 "vpr_register_operand" "=Up") - (MVE_COMPARISONS: (match_operand:MVE_2 1 "s_register_operand" "w") - (match_operand: 2 "s_register_operand" "r"))) + (MVE_COMPARISONS: + (match_operand:MVE_2 1 "s_register_operand" "w") + (vec_duplicate:MVE_2 (match_operand: 2 "s_register_operand" "r")))) ] "TARGET_HAVE_MVE" "vcmp.%# , %q1, %2" @@ -1924,8 +1925,9 @@ (define_insn "@mve_vcmpq_n_f" [ (set (match_operand: 0 "vpr_register_operand" "=Up") - (MVE_FP_COMPARISONS: (match_operand:MVE_0 1 "s_register_operand" "w") - (match_operand: 2 "s_register_operand" "r"))) + (MVE_FP_COMPARISONS: + (match_operand:MVE_0 1 "s_register_operand" "w") + (vec_duplicate:MVE_0 (match_operand: 2 "s_register_operand" "r")))) ] "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" "vcmp.f%# , %q1, %2" diff --git a/gcc/testsuite/gcc.target/arm/mve/pr107987.c b/gcc/testsuite/gcc.target/arm/mve/pr107987.c new file mode 100644 index 0000000000000..e19a3f2ec51b7 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/mve/pr107987.c @@ -0,0 +1,11 @@ +/* { dg-options "-O2" } */ +/* { dg-require-effective-target arm_v8_1m_mve_ok } */ +/* { dg-add-options arm_v8_1m_mve } */ + +#include + +uint32x4_t foo (uint32x4_t a, uint32x4_t b) +{ + mve_pred16_t p = vcmpneq_n_u32 (vandq_u32 (a, b), 0); + return vaddq_x_u32 (a, b, p); +}