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.

Reply via email to