https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110280
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Target Milestone|--- |13.2 Known to fail| |13.1.0 --- Comment #5 from Andrew Pinski <pinskia at gcc dot gnu.org> --- First reduced testcase with the same ICE: ``` #include "arm_sve.h" auto l() { svuint32_t ttt; { alignas(16) const unsigned int lanes[4] = {0, 0, 0, 0}; ttt = svld1rq_u32(svptrue_b8(), lanes); } return svunpklo_u64 (ttt); } ``` Another reduced testcase with a related ICE: ``` #include "arm_sve.h" svuint32_t l() { alignas(16) const unsigned int lanes[4] = {0, 0, 0, 0}; return svld1rq_u32(svptrue_b8(), lanes); } ``` For the first one, we have: ``` lanes[0] = 0; lanes[1] = 0; lanes[2] = 0; lanes[3] = 0; _10 = MEM <vector(4) unsigned int> [(unsigned int * {ref-all})&lanes]; ttt_7 = VEC_PERM_EXPR <_10, _10, { 0, 1, 2, 3, ... }>; lanes ={v} {CLOBBER(eol)}; _9 = [vec_unpack_lo_expr] ttt_7; ``` The ICE is on simplifying _9. The second one we have a similar thing except no vec_unpack_lo_expr there. I suspect it is the simplification of the VEC_PERM which is causing the issue rather than vec_unpack_lo_expr directly. And dealing with how _10 is generated inside fre to a vector.