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.