https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99648
--- Comment #11 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Jakub Jelinek from comment #10)
> Created attachment 50566 [details]
> gcc11-pr99648.patch
>
> Updated patch which doesn't ICE anymore. While I think the right thing
> would be to always punt on SUBREGs of constants, I think that is quite risky
> this late and so restricting it to MODE_COMPOSITE_P outermodes will make it
> restricted to
> powerpc IBM double double format and nothing else (well, there is also
> mips_extended_format, but no target seems to use it fortunately).
if (MODE_COMPOSITE_P (outermode)
7347
&& (CONST_SCALAR_INT_P (op)
7348
|| CONST_DOUBLE_AS_FLOAT_P (op)
7349
|| CONST_FIXED_P (op)
7350
|| GET_CODE (op) == CONST_VECTOR))
7351
return NULL_RTX;
it's odd to reject CONST_INT_P but not CONST_DOUBLE-as-int, no? Did you
mean to do
if (MODE_COMPOSITE_P (outermode))
switch (GET_CODE (op))
{
CASE_CONST_ANY:
return NULL_RTX;
default:;
}
? (yeah, CONST_ANY_P is missing it seems)