https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58790
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Ever confirmed|0 |1 Keywords| |missed-optimization Status|UNCONFIRMED |NEW Last reconfirmed| |2021-06-08 Target| |x86_64-*-* i?86-*-* --- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> --- So it's slightly more complex than a BB reduction with plus since SLP sees <bb 2> [local count: 1073741824]: _1 = a_8(D) == b_9(D); _2 = VEC_COND_EXPR <_1, { -1, -1, -1, -1 }, { 0, 0, 0, 0 }>; _3 = BIT_FIELD_REF <_2, 32, 0>; if (_3 != 0) goto <bb 3>; [50.00%] else goto <bb 13>; [50.00%] <bb 13> [local count: 536870912]: <bb 8> [local count: 1006632961]: goto <bb 6>; [100.00%] <bb 3> [local count: 536870913]: _4 = BIT_FIELD_REF <_2, 32, 32>; if (_4 != 0) goto <bb 4>; [50.00%] else goto <bb 14>; [50.00%] ... and thus it requires some if-conversion. Maybe this is even good enough for pattern matching in forwprop, turning it into if (_2 == { -1, -1, -1, -1 })