https://gcc.gnu.org/bugzilla/show_bug.cgi?id=122126

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
      Known to work|13.4.1                      |
            Summary|[14/15/16 regression]       |[13/14/15/16 regression]
                   |X86-64 AVX2 and             |X86-64 AVX2 and
                   |PowerPC64LE: crash at -O2/3 |PowerPC64LE: crash at -O2/3

--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
So in forwprop4 we have:
  VIEW_CONVERT_EXPR<unsigned int[4]>(BS_VAR_0)[690501320391798396] = 0;

Which is obvious undefined at this point.
And then isel comes along and changes it to:
  _38 = BS_VAR_0;
  _57 = .VEC_SET (_38, 0, 690501320391798396);
  BS_VAR_0 = _57;

So isel maybe should have a check on the argument before changing.

In GCC 12/13, it is all DCEd.
changing BS_VAR_0 to be volatile causes the ICE to show up in GCC 12/13:
volatile  BS_VEC(uint32, 4) BS_VAR_0;


In GCC 11 there is not a block duplicated it seems:
```
  # iftmp.2_6 = PHI <0(5), 690501320391798396(14)>
  _17 ={v} BS_VAR_0;
  _16 = .VEC_SET (_17, 0, iftmp.2_6);
  BS_VAR_0 ={v} _16;
```

Reply via email to