https://gcc.gnu.org/bugzilla/show_bug.cgi?id=122656

Robin Dapp <rdapp at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Assignee|law at gcc dot gnu.org             |rdapp at gcc dot gnu.org

--- Comment #5 from Robin Dapp <rdapp at gcc dot gnu.org> ---
A regular ff load without destination  

void d() { __riscv_vlseg2e32ff_v_i32mf2(&a, &c, b); }

gives:

fof.c:4:32: error: invalid argument to built-in function

and I suppose that's as intended?

For the segmented case we indeed go off into the weeds by adding a rounding
mode.

A proper call like
void d() { vint32mf2x2_t v = __riscv_vlseg2e32ff_v_i32mf2x2(&a, &c, b); }
works, though.

Therefore the question is how to deal with the "wrong" arguments.

A regular ff load uses contiguous_load_insn which does not work for the
segmented case:  the mode of the memory source operand differs.

Maybe we can just change that mode and use "use_contiguous_load" for the
segmented load as well.  I'm testing a patch.

Reply via email to