https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109955
--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> --- FAIL: gcc.dg/vect/pr109011-3.c -flto -ffat-lto-objects scan-tree-dump-times optimized " = .POPCOUNT \\\\(vect" 3 show that when pattern recognition detects t.c:5:21: note: vec_recog_ctz_ffs_pattern: detected: _6 = __builtin_ffs (_4); t.c:5:21: note: created pattern stmt: patt_7 = _4 != 0 ? patt_8 : 0; t.c:5:21: note: ctz_ffs pattern recognized: patt_7 = _4 != 0 ? patt_8 : 0; t.c:5:21: note: extra pattern stmt: patt_18 = -_4; t.c:5:21: note: extra pattern stmt: patt_15 = _4 | patt_18; t.c:5:21: note: extra pattern stmt: patt_14 = .POPCOUNT (patt_15); t.c:5:21: note: extra pattern stmt: patt_8 = 33 - patt_14; we fail: t.c:5:21: note: ==> examining pattern statement: patt_7 = _4 != 0 ? patt_8 : 0; t.c:5:21: note: vect_is_simple_use: operand *_3, type of def: internal t.c:5:21: note: vect_is_simple_use: vectype vector(16) int t.c:5:21: note: vect_is_simple_use: operand 33 - patt_14, type of def: internal t.c:5:21: note: vect_is_simple_use: vectype vector(16) int t.c:5:21: note: vect_is_simple_use: operand 0, type of def: constant t.c:2:1: missed: not vectorized: relevant stmt not supported: patt_7 = _4 != 0 ? patt_8 : 0; t.c:5:21: missed: bad operation or unsupported loop bound. note there's "unconverted" code in pattern recog that creates those "bad" GIMPLE COND_EXPRs with GENERIC compares. I've chickened out "fixing" those because exactly of a similar issue that we're not perfect in supporting vcond vs vcond_mask 1:1. Having only one of them would simplify things. I have a patch for that.