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.