https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68955
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org --- Comment #7 from Jakub Jelinek <jakub at gcc dot gnu.org> --- I believe this goes wrong during DSE2, at least before that pass we have always 6 sets of statements corresponding to i[1][e][h] = i[h][k][e] >= l; and then one corresponding to i[e + 2][h + 3][e] = 6 & l; and then one corresponding to i[2][1][2] = a; and all this 6 times. But, after DSE2 all the i[e + 2][h + 3][e] = 6 & l; stores are removed, except the last one that is kept. Sure, all the i[e + 2][h + 3][e] stores (in the same loop, i.e. same e and h) are to the same address, and they don't alias with any other stores in the loop (i[1][e][h] necessarily has smaller first index than any e + 2, and i[2][1][2] has the second index smaller than any h + 3), but they might alias with the i[h][k][e] loads.