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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
     Ever confirmed|0                           |1
   Last reconfirmed|                            |2023-11-09

--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
I don't see anything wrong with that patch but just exposing a latent bug in
SCCVN/FRE:

```
Value numbering stmt = vect_iftmp.22_46 = VEC_COND_EXPR <mask__23.21_44, { 1,
1, 1, 1, 1, 1, 1, 1 }, { 1, 2, 3, 4, 5, 6, 7, 8 }>;
Applying pattern match.pd:5029, generic-match-7.cc:9560
Match-and-simplified VEC_COND_EXPR <mask__23.21_44, { 1, 1, 1, 1, 1, 1, 1, 1 },
{ 1, 2, 3, 4, 5, 6, 7, 8 }> to { 1, 2, 3, 4, 5, 6, 7, 8 }
RHS VEC_COND_EXPR <mask__23.21_44, { 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 2, 3, 4, 5,
6, 7, 8 }> simplified to { 1, 2, 3, 4, 5, 6, 7, 8 }
Setting value number of vect_iftmp.22_46 to { 1, 2, 3, 4, 5, 6, 7, 8 }
(changed)
Replaced VEC_COND_EXPR <mask__23.21_44, { 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 2, 3,
4, 5, 6, 7, 8 }> with { 1, 2, 3, 4, 5, 6, 7, 8 } in all uses of
vect_iftmp.22_46 = VEC_COND_EXPR <mask__23.21_44, { 1, 1, 1, 1, 1, 1, 1, 1 }, {
1, 2, 3, 4, 5, 6, 7, 8 }>;
Value numbering stmt = _55 = { -1, -1, -1, -1, -1, -1, -1, -1 };
RHS { -1, -1, -1, -1, -1, -1, -1, -1 } simplified to { -1, -1, -1, -1, -1, -1,
-1, -1 }
Setting value number of _55 to { -1, -1, -1, -1, -1, -1, -1, -1 } (changed)
Value numbering stmt = vect_prephitmp_11.23_50 = .COND_NEG (_55,
vect__29.18_40, { -1, -1, -1, -1, -1, -1, -1, -1 });
Applying pattern match.pd:5027, generic-match-7.cc:9542
Match-and-simplified .COND_NEG (_55, vect__29.18_40, { -1, -1, -1, -1, -1, -1,
-1, -1 }) to { 4294967295, 4294967294, 4294967293, 4294967292, 4294967291,
4294967290, 4294967289, 4294967288 }
call .COND_NEG (_55, vect__29.18_40, { -1, -1, -1, -1, -1, -1, -1, -1 })
simplified to { 4294967295, 4294967294, 4294967293, 4294967292, 4294967291,
4294967290, 4294967289, 4294967288 }
Setting value number of vect_prephitmp_11.23_50 to { 4294967295, 4294967294,
4294967293, 4294967292, 4294967291, 4294967290, 4294967289, 4294967288 }
(changed)
Replaced .COND_NEG (_55, vect__29.18_40, { -1, -1, -1, -1, -1, -1, -1, -1 })
with { 4294967295, 4294967294, 4294967293, 4294967292, 4294967291, 4294967290,
4294967289, 4294967288 } in vect_prephitmp_11.23_50 = .COND_NEG (_55,
vect__29.18_40, { -1, -1, -1, -1, -1, -1, -1, -1 });


```

Then crash.

What we had before FRE4:
```
  _39 = { 9, 10, 11, 12, 13, 14, 15, 16 };
  vect__29.18_40 = { 1, 2, 3, 4, 5, 6, 7, 8 };
  mask__23.21_44 = { 0, 0, 0, 0, 0, 0, 0, 0 };
  vect_iftmp.22_46 = VEC_COND_EXPR <mask__23.21_44, { 1, 1, 1, 1, 1, 1, 1, 1 },
{ 1, 2, 3, 4, 5, 6, 7, 8 }>;
  _55 = { -1, -1, -1, -1, -1, -1, -1, -1 };
  vect_prephitmp_11.23_50 = .COND_NEG (_55, vect__29.18_40, { -1, -1, -1, -1,
-1, -1, -1, -1 });
  ivtmp_54 = 1;
  _52 = BIT_FIELD_REF <vect_prephitmp_11.23_50, 32, 224>;
  prephitmp_32 = _52;
  _48 = BIT_FIELD_REF <vect_iftmp.22_46, 32, 224>;
  iftmp.0_31 = _48;
  b = iftmp.0_31;
  c = prephitmp_32;
  a = 9;
```

Confirmed.

Reply via email to