[Bug tree-optimization/111137] [11/12/13/14 Regression] Wrong code at -O2/3
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Fri Aug 25 07:02:51 GMT 2023
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.
More information about the Gcc-bugs
mailing list