https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103253
--- Comment #5 from Tamar Christina <tnfchris at gcc dot gnu.org> --- Looks like the RPO pass is causing match.pd to simply vect_iftmp.10_41 = vect__1.9_38 * vect_cst__40; vect_iftmp.10_42 = vect__1.9_39 * vect_cst__40; iftmp.0_8 = _1 * 2.0e+0; mask_patt_19.11_44 = vect_vec_iv_.8_36 != vect_cst__43; mask_patt_20.12_45 = [vec_unpack_lo_expr] mask_patt_19.11_44; mask_patt_20.12_46 = [vec_unpack_hi_expr] mask_patt_19.11_44; vect_patt_21.13_48 = VEC_COND_EXPR <mask_patt_20.12_45, vect_iftmp.10_41, vect_cst__47>; vect_patt_21.13_49 = VEC_COND_EXPR <mask_patt_20.12_46, vect_iftmp.10_42, vect_cst__47>; into _54 = .COND_MUL (mask_patt_20.12_45, vect__1.9_38, { 2.0e+0, 2.0e+0, 2.0e+0, 2.0e+0, 2.0e+0, 2.0e+0, 2.0e+0, 2.0e+0 }, { 1.0e+0, 1.0e+0, 1.0e+0, 1.0e+0, 1.0e+0, 1.0e+0, 1.0e+0, 1.0e+0 }); vect_patt_21.13_48 = _54; _55 = .COND_MUL (mask_patt_20.12_46, vect__1.9_39, { 2.0e+0, 2.0e+0, 2.0e+0, 2.0e+0, 2.0e+0, 2.0e+0, 2.0e+0, 2.0e+0 }, { 1.0e+0, 1.0e+0, 1.0e+0, 1.0e+0, 1.0e+0, 1.0e+0, 1.0e+0, 1.0e+0 }); vect_patt_21.13_49 = _55; iftmp.0_3 = i_10 != 0 ? iftmp.0_8 : 1.0e+0; which is perfectly valid and much simpler, so need to see why DCE6 mangles this.