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

--- Comment #12 from Christophe Lyon <clyon at gcc dot gnu.org> ---
(In reply to Jakub Jelinek from comment #11)
> So, tried this under the debugger.  All VALID_MVE_PRED_MODE modes have the
> same size, 2 bytes, so I'd go with
>   else if (VALID_MVE_PRED_MODE (mode))
>     {
>       /* unsigned short arguments to functions get promoted to int, undo
> that.  */
>       if (GET_MODE_SIZE (x) != GET_MODE_SIZE (HImode))
>         x = gen_lowpart (HImode, x);
>       if (GET_MODE (x) != mode)
>         {
>           /* Nested SUBREGs are invalid.  */
>           if (SUBREG_P (x))
>             x = force_reg (GET_MODE (x), x);
>           x = lowpart_subreg (mode, x,
>                               GET_MODE (x) == VOIDmode ? HImode : GET_MODE
> (x));

This still crashes with mode == V*BI, because we reach
rtx_vector_builder::find_cached_value() where elt is not a supported constant.

Reply via email to