https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103253
Tamar Christina <tnfchris at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |ASSIGNED Assignee|unassigned at gcc dot gnu.org |tnfchris at gcc dot gnu.org --- Comment #4 from Tamar Christina <tnfchris at gcc dot gnu.org> --- Strange... I'll take a look. It looks like the vectorizer has generated correct code even after this change _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; # RANGE [1, 17] NONZERO 31 i_9 = i_10 + 1; ivtmp_2 = ivtmp_4 - 1; ivtmp_53 = ivtmp_52 + 1; if (ivtmp_53 < 1) but DCE6 mangles this to invalid gimple: .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 }); .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 }); ivtmp_53 = ivtmp_52 + 1; if (ivtmp_53 < 1) it removes the dead statements but removes the SSA var _55 without removing it's definition.