https://gcc.gnu.org/bugzilla/show_bug.cgi?id=122656
Jeffrey A. Law <law at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |kito at gcc dot gnu.org,
| |rdapp at gcc dot gnu.org
--- Comment #2 from Jeffrey A. Law <law at gcc dot gnu.org> ---
So it appears we're adding too many arguments to the insn when generating the
vlseg2e32ff_v_i32mf2x2 intrinsic in use_exact_insn.
With one too many args added early in that function we get here:
/* The RVV floating-point only support dynamic rounding mode in the
FRM register. */
if (opno != insn_data[icode].n_generator_args)
add_input_operand (Pmode, gen_int_mode (riscv_vector::FRM_DYN, Pmode));
return generate_insn (icode);
Since we added one too many args, we add *another*, resulting in two too many
arguments. Then we eventually fault in generate_insn or one of its children.
I didn't see any of the fault-on-first vlseg insns getting tested by the
testsuite. So I guess it's possible this has simply been broken all along.