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.

Reply via email to