https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117890
--- Comment #7 from Tamar Christina <tnfchris at gcc dot gnu.org> --- (In reply to Hu Lin from comment #5) > Seems that commit (d2f9159cfe7ea904e6476cabefea0c6ac9532e29) fixed this > issue. The wrong pattern is no longer generated, although I don't understand > why for the moment. That said... given: <bb 23> [local count: 761014530]: _63 = _29 >> 2; _64 = ~_63; _65 = (_Bool) _64; if (_65 != 0) goto <bb 18>; [5.50%] else goto <bb 3>; [94.50%] <bb 18> [local count: 223857727]: # vect_vec_iv_.29_45 = PHI <{ 5, 6 }(3), { 1, 2 }(7), { 3, 4 }(23)> # vect_vec_iv_.31_50 = PHI <{ 3, 2 }(3), { 7, 6 }(7), { 5, 4 }(23)> _51 = BIT_FIELD_REF <vect_vec_iv_.31_50, 32, 0>; _46 = BIT_FIELD_REF <vect_vec_iv_.29_45, 32, 0>; goto <bb 17>; [100.00%] Are you sure it's not g:51291ad0f1f89a81de917110af96e019dcd5690c that fixed it? That would make more sense. The code doesn't have a vector comparison there. so it feels more like PR117140