https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115484
--- Comment #5 from Andrew Pinski <pinskia at gcc dot gnu.org> --- (In reply to Sam James from comment #2) > GCC 8 vectorises it: https://godbolt.org/z/Y8Pvxsh5c. The if-to-switch was not until GCC 11: r11-5605-g03eb09292ef228. What made GCC 9 fail was the conversion from bool to int though: /app/example.c:2:5: missed: not vectorized: relevant stmt not supported: patt_29 = (int) patt_30; But that worked in GCC 8. Though that was fixed in GCC 11. If you replace `c|=` with: ``` c |= (*s == ',' | *s == '|' | *s == '!' | *s == '*'); ``` GCC 11+ is able to vectorize it again. But the original testcase fails now due to if-to-switch .