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.