http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59967
--- Comment #3 from Christoph Breitkopf <chbreitkopf at gmail dot com> --- It's this conditional in the inner loop. The expression becomes constant only if both loops are unrolled (i and j are the loop counters): if (1<<j & i) ck0[j] += s; This condition is probably not perfectly predictable even by modern branch predictors, so I assume this is the main reason for the regression. Chris