https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104595
--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> --- IR in the bool case: _1 = pb[i_13]; iftmp.0_7 = a[i_13]; iftmp.0_6 = b[i_13]; iftmp.0_3 = _1 ? iftmp.0_7 : iftmp.0_6; c[i_13] = iftmp.0_3; IR in the char case: _1 = pc[i_13]; iftmp.1_7 = a[i_13]; iftmp.1_6 = b[i_13]; iftmp.1_3 = _1 == 0 ? iftmp.1_6 : iftmp.1_7; c[i_13] = iftmp.1_3; details in the bool case: /app/example.cpp:12:21: note: ==> examining statement: iftmp.0_3 = _1 ? iftmp.0_7 : iftmp.0_6; /app/example.cpp:12:21: note: vect_is_simple_use: operand pb[i_13], type of def: internal /app/example.cpp:12:21: note: vect_is_simple_use: vectype vector(32) unsigned char /app/example.cpp:11:6: missed: not vectorized: relevant stmt not supported: iftmp.0_3 = _1 ? iftmp.0_7 : iftmp.0_6; details in the char case: /app/example.cpp:17:21: note: ==> examining statement: iftmp.1_3 = _1 == 0 ? iftmp.1_6 : iftmp.1_7; /app/example.cpp:17:21: note: vect_is_simple_use: operand pc[i_13], type of def: internal /app/example.cpp:17:21: note: vect_is_simple_use: vectype vector(32) char /app/example.cpp:17:21: note: vect_is_simple_use: operand b[i_13], type of def: internal /app/example.cpp:17:21: note: vect_is_simple_use: vectype vector(32) char /app/example.cpp:17:21: note: vect_is_simple_use: operand a[i_13], type of def: internal /app/example.cpp:17:21: note: vect_is_simple_use: vectype vector(32) char /app/example.cpp:17:21: note: vect_model_simple_cost: inside_cost = 4, prologue_cost = 4 . It should not be too hard to if we had _1 ? : to change it to _1 != 0 right?