https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111137
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |ASSIGNED Assignee|unassigned at gcc dot gnu.org |rguenth at gcc dot gnu.org --- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- We BB vectorize as follows <bb 3> [local count: 118111600]: # ivtmp_29 = PHI <ivtmp_23(9), 2(2)> - b[0][3] = 0; _39 = g_21; + vectp.26_37 = &b[_39][0]; + vect__15.27_4 = MEM <vector(2) int> [(int *)vectp.26_37]; + vect__18.28_45 = vect__15.27_4 ^ { 1, 1 }; _15 = b[_39][0]; _18 = _15 ^ 1; - b[_39][0] = _18; - b[0][4] = 0; _48 = b[_39][1]; _49 = _48 ^ 1; - b[_39][1] = _49; - b[0][1] = 0; + vectp.30_46 = &b[_39][0]; + MEM <vector(2) int> [(int *)vectp.30_46] = vect__18.28_45; _5 = _42; + vectp.20_36 = &b[_5][0]; + vect__6.21_24 = MEM <vector(2) int> [(int *)vectp.20_36]; + vect__7.22_35 = vect__6.21_24 ^ { 1, 1 }; _6 = b[_5][0]; _7 = _6 ^ 1; - b[_5][0] = _7; - b[0][2] = 0; + MEM <vector(4) int> [(int *)&b + 4B] = { 0, 0, 0, 0 }; _10 = b[_5][1]; _11 = _10 ^ 1; - b[_5][1] = _11; + vectp.24_31 = &b[_5][0]; + MEM <vector(2) int> [(int *)vectp.24_31] = vect__7.22_35; ivtmp_23 = ivtmp_29 - 1; if (ivtmp_23 != 0) and the issue is that we somehow get data dependence wrong. _39 is 1 and _5 is 0. That means we have b[0][3] = 0; _39 = g_21; _15 = b[_39][0]; _18 = _15 ^ 1; b[1 /*_39*/][0] = _18; b[0][4] = 0; _48 = b[_39][1]; _49 = _48 ^ 1; b[1 /*_39*/][1] = _49; b[0][1] = 0; _5 = _42; _6 = b[0 /*_5*/][0]; _7 = _6 ^ 1; b[0 /*_5*/][0] = _7; b[0][2] = 0; _10 = b[0 /*_5*/][1]; _11 = _10 ^ 1; b[0 /*_5*/][1] = _11; I will have a look.