https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115383
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |rsandifo at gcc dot gnu.org --- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> --- So we're now doing a EXTRACT_LAST_REDUCTION with multiple stmt copies which is disallowed for non-SLP (by accident?). It shows it of course doesn't work since we end up removing the scalar reduction stmt multiple times. <bb 3> [local count: 860067202]: # j_12 = PHI <j_2(8), j_5(D)(28)> # i_14 = PHI <i_9(8), i_6(D)(28)> # vect_vec_iv_.9_45 = PHI <_46(8), _47(28)> _46 = vect_vec_iv_.9_45 + { 16, 16, 16, 16 }; _48 = vect_vec_iv_.9_45 + { 4, 4, 4, 4 }; _49 = _48 + { 4, 4, 4, 4 }; _50 = _49 + { 4, 4, 4, 4 }; vect__1.10_51 = (vector(4) float) vect_vec_iv_.9_45; vect__1.10_52 = (vector(4) float) _48; vect__1.10_53 = (vector(4) float) _49; vect__1.10_54 = (vector(4) float) _50; mask__3.11_55 = vect__1.10_51 < { 0.0, 0.0, 0.0, 0.0 }; mask__3.11_56 = vect__1.10_52 < { 0.0, 0.0, 0.0, 0.0 }; mask__3.11_57 = vect__1.10_53 < { 0.0, 0.0, 0.0, 0.0 }; mask__3.11_58 = vect__1.10_54 < { 0.0, 0.0, 0.0, 0.0 }; j_2 = .FOLD_EXTRACT_LAST (j_12, mask__3.11_55, vect_vec_iv_.9_45); and we removed the old j_2 = _3 ? i_14 : j_12; we are about to insert j_2 = .FOLD_EXTRACT_LAST (j_12, mask__3.11_56, _48); I think correct would be j_59 = .FOLD_EXTRACT_LAST (j_12, mask__3.11_55, vect_vec_iv_.9_45); j_60 = .FOLD_EXTRACT_LAST (j_59, mask__3.11_56, _48); j_61 = .FOLD_EXTRACT_LAST (j_60, mask__3.11_57, _49); j_2 = .FOLD_EXTRACT_LAST (j_61, mask__3.11_58, _50); I'm testing a patch.