https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69166
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Priority|P1 |P2 Known to work|5.3.1 |4.6.4 Target Milestone|6.0 |4.9.4 Summary|[6 Regression] ICE in |[4.9/5/6 Regression] ICE in |get_initial_def_for_reducti |get_initial_def_for_reducti |on, at |on, at |tree-vect-loop.c:4188 |tree-vect-loop.c:4188 --- Comment #6 from Richard Biener <rguenth at gcc dot gnu.org> --- Ok, so we end up with a reduction with a RDIV_EXPR which is because we never actually call vectorizable_reduction with check_reduction == true because we are in a nested cycle. Testcase that also fails on the GCC 5 and 4.9 branches (and 4.8 and 4.7 but not 4.6): void fn2(double *e, double a) { int b = 0; for (; b < 256; b++) { int c = 0; double x = e[b]; for (; c < 256; ++c) x /= a; e[b] = x; } } Never verifying the actual operation for nested cycles is certainly not what was intended. Not that I know much about "nested cycles" vs. "double reduction"...