https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69489
--- Comment #19 from amker at gcc dot gnu.org --- <bb 4>: # i_27 = PHI <0(3), i_21(5)> # n1_29 = PHI <0(3), n1_20(5)> # n2_28 = PHI <0(3), n2_34(5)> i.1_7 = (sizetype) i_27; _9 = u_8(D) + i.1_7; _11 = *_9; _13 = v_12(D) + i.1_7; _14 = *_13; _17 = v_12(D) + i.1_7; _18 = *_17; _31 = _18 != 0; _36 = (int) _31; _48 = (long int) _36; _45 = _11 != 0; _44 = _14 == 0; _43 = _44 & _45; _ifc__40 = _43 ? 1 : 0; n2_34 = n2_28 + _ifc__40; prephitmp_49 = _11 != 0 ? 0 : _48; n1_20 = n1_29 + prephitmp_49; i_21 = i_27 + 1; if (n_6(D) > i_21) goto <bb 5>; else goto <bb 6>; <bb 5>: goto <bb 4>; The difficult part is "prephitmp_49 = _11 != 0 ? 0 : _48;", which cannot be simplified into: _a = 18 != 0; _b = _11 == 0; _c = _a && _b; prephitmp_49 = (long int)_c; I don't know if there is easy fix to ifcvt so that this case can be vectorized without vcond_mask...