{
poly_int64 nunits = GET_MODE_NUNITS (<MODE>mode);
machine_mode mode = riscv_vector::get_vector_mode (QImode, nunits).require ();
- rtx dup = expand_vector_broadcast (mode, operands[1]);
+
+ /* The 1-bit mask is in a QImode register, make sure we only use the last
+ bit. See also PR119114 and the respective vec_init expander. */
+ rtx tmp = gen_reg_rtx (Xmode);
+ emit_insn
+ (gen_rtx_SET (tmp, gen_rtx_AND (Xmode, gen_lowpart (Xmode, operands[1]),
+ CONST1_RTX (Xmode))));
+
+ rtx dup = expand_vector_broadcast (mode, gen_lowpart (QImode, tmp));
riscv_vector::expand_vec_cmp (operands[0], NE, dup, CONST0_RTX (mode));
DONE;
}