https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95830
--- Comment #6 from Martin Liška <marxin at gcc dot gnu.org> --- Thanks for reduction, I can confirm that. What happens: mips-ps-5.c.171t.loopdone: _34 = vect__1.7_28 == vect__3.11_33; vect_iftmp.12_35 = VEC_COND_EXPR <_34, vect__1.7_28, vect__2.10_31>; which is fine. But then during veclower21 we lower the first comparison to: _24 = (void *) ivtmp.17_4; vect__1.7_28 = MEM[base: _24, offset: 0B]; _23 = (void *) ivtmp.20_1; vect__2.10_31 = MEM[base: _23, offset: 0B]; vect__3.11_33 = vect__2.10_31 + vect_cst__32; _26 = BIT_FIELD_REF <vect__1.7_28, 32, 0>; _27 = BIT_FIELD_REF <vect__3.11_33, 32, 0>; _29 = _26 == _27 ? -1 : 0; _30 = BIT_FIELD_REF <vect__1.7_28, 32, 32>; _36 = BIT_FIELD_REF <vect__3.11_33, 32, 32>; _37 = _30 == _36 ? -1 : 0; _34 = {_29, _37}; vect_iftmp.12_35 = VEC_COND_EXPR <_34, vect__1.7_28, vect__2.10_31>; which is undesired. So similarly to isel we need to mark all SSA_NAMEs that are first args of a VEC_COND_EXPR and ignore these from vect lowering. Richi?