https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59967
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|ASSIGNED |NEW Assignee|rguenth at gcc dot gnu.org |unassigned at gcc dot gnu.org --- Comment #25 from Richard Biener <rguenth at gcc dot gnu.org> --- There's no easy way to assess the reported performance regression. I can re-confirm that for the for (i = 0; i < 8; i++) { for (j = 0; j < 3; j++) { ck0[j] = c0[j]; if (1<<j & i) ck0[j] += s; if (r->rop[j] < ck0[j] - 1.0*s) break; if (r->rop[j] > ck0[j] + (1.0+1.0)*s) break; } if (j == 3) wsum += sumambient(acol, r, rn, al, at->kid+i, ck0, s); } return(wsum); loop we only unroll the inner loop, not the outer with the recursive call. I'll attach a semi-reduced testcase but I'm not working on re-enabling the unrolling. I suspect the missed optimization opportunity is with the if (1<<j & i) check which can be resolved at compile-time when the outer loop is unrolled.