https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112469
--- Comment #2 from JuzheZhong <juzhe.zhong at rivai dot ai> --- (In reply to Andrew Pinski from comment #1) > 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. Yes. I am agree with Andrew. It's not the RISC-V backend issue. CCing Richard to see whether we should fix on middle-end or find a way in RISC-V backend to walk around this issue.