https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97255

--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
OK, so it's SRA that creates the IL that ultimatively confuses the vectorizer.
SRA transforms the bool accesses into unsigned char ones:

   _32 = in1s_31 != 0;
-  MEM <struct Array> [(bool &)&x].m_arr[1] = _32;
+  _7 = VIEW_CONVERT_EXPR<unsigned char>(_32);
+  x$1_16 = _7;
...
   _5 = out_17(D) + _2;
-  *_5 = x;
+  MEM <unsigned char> [(struct Array *)_5] = x_15;
+  MEM <unsigned char> [(struct Array *)_5 + 1B] = x$1_16;
+  MEM <unsigned char> [(struct Array *)_5 + 2B] = x$2_23;
+  MEM <unsigned char> [(struct Array *)_5 + 3B] = x$3_28;

we do not recognize the VIEW_CONVERT_EXPR as bool pattern.  I have a fix.

Reply via email to