https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103771
--- Comment #19 from Richard Biener <rguenth at gcc dot gnu.org> --- Ah, so the issue is missing -mavx512bw which means we end up with a AVX2 style mask for V32QImode. With -mavx512bw the code vectorizes fine. I guess ix86_get_mask_mode is too restrictive here? And indeed to build a AVX2 style mask vector from a AVX512 style mask vector we'd need to use a ?:, not a simple conversion. Unfortunately we don't support vectorizing that: t.c:10:21: note: ==> examining statement: patt_42 = patt_40 ? -1 : 0; t.c:10:21: note: vect_is_simple_use: operand x.1_14 > 255, type of def: internal t.c:10:21: note: vect_is_simple_use: vectype vector(8) <signed-boolean:1> t.c:10:21: note: vect_is_simple_use: operand -1, type of def: constant t.c:10:21: note: vect_is_simple_use: operand 0, type of def: constant t.c:8:6: missed: not vectorized: relevant stmt not supported: patt_42 = patt_40 ? -1 : 0; or maybe we need to tweak the conversion vectorization for better support of this case as noted in comment#10 ... but the code generated from that AFAIU is to produce a HImode mask, not a V32QImode one which puts the fault on ix86_get_mask_mode again.