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.

Reply via email to