http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52028
--- Comment #4 from Richard Guenther <rguenth at gcc dot gnu.org> 2012-01-30 13:57:30 UTC --- loop distribution splits the for (;;) { ... if (K != k) break; K += 16; } loop into three portions, the first writing to K[0..13], the next writing to K[14] and the last writing to K[15]. All of which is reasonable at a first glance. But then the first loop is discarded completely CDDCE2, so something is wrong.