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;
```