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.

Reply via email to