https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94125
--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Seems it is the ldist pass, which fails to figure out that k[c+3] load in the loop might alias with the k[c+1] = 0; store and moves all the 3 stores into a memset after the loop.