https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110986
--- Comment #6 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Oh and: vect_patt_10.16_58 = .VCOND (vect__4.10_47, { 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 1, 1, 1, 1, 1, 1, 1 }, { 0, 0, 0, 0, 0, 0, 0, 0 }, 114); vect_patt_10.16_59 = .VCOND (vect__4.11_49, { 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 1, 1, 1, 1, 1, 1, 1 }, { 0, 0, 0, 0, 0, 0, 0, 0 }, 114); vect_patt_42.17_60 = VEC_PACK_TRUNC_EXPR <vect_patt_10.16_58, vect_patt_10.16_59>; vect__40.18_61 = -vect_patt_42.17_60; needs to change just into: mask__9.16_54 = vect__4.10_46 != { 0, 0, 0, 0, 0, 0, 0, 0 }; mask__9.16_55 = vect__4.11_48 != { 0, 0, 0, 0, 0, 0, 0, 0 }; mask_patt_40.17_56 = VEC_PACK_TRUNC_EXPR <mask__9.16_54, mask__9.16_55>; That is push the negative back if it is a VCOND I think ... --- Comment #7 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Oh and: vect_patt_12.16_57 = .VCOND (vect__3.10_47, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 114); vect_patt_42.17_58 = [vec_unpack_lo_expr] vect_patt_12.16_57; vect_patt_42.17_59 = [vec_unpack_hi_expr] vect_patt_12.16_57; vect__40.18_60 = -vect_patt_42.17_58; vect__40.18_61 = -vect_patt_42.17_59;