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.