https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97239

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
     Ever confirmed|0                           |1
   Last reconfirmed|                            |2020-09-29
             Status|UNCONFIRMED                 |NEW
   Target Milestone|---                         |11.0

--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
Confirmed.  Yet another VEC_COND_EXPR producing masks from masks.  This time:

201       gcc_assert (known_eq (GET_MODE_SIZE (mode), GET_MODE_SIZE
(cmp_op_mode))
202                   && known_eq (GET_MODE_NUNITS (mode),
203                                GET_MODE_NUNITS (cmp_op_mode)));
(gdb) p mode
$1 = E_HImode
(gdb) p cmp_op_mode
$2 = E_V16SImode

(gdb) p debug_gimple_stmt (stmt)
mask__29.155_75 = VEC_COND_EXPR <mask__2.147_61, { -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1 }, mask__5.150_67>;

  vector(16) <signed-boolean:1> mask__2.147;
  vector(16) <signed-boolean:1> mask__5.150;
  vector(16) <signed-boolean:1> mask__29.155;

  mask__2.147_61 = simd.38_17(D) != { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0 };
  mask__5.150_67 = simd.38_17(D) == { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0 };
  mask__29.155_75 = VEC_COND_EXPR <mask__2.147_61, { -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, mask__5.150_67>;

so this is simd != 0 ? true : simd == 0 which is just 'true'?

That said, it's probably an uphill battle to try to combat all such
cases with more foldings ...

Rather we need to synthesize mask from mask VEC_COND via bit ops?

  mask__29.155_75 = mask__2.147_61 | (~mask__2.147_61 & mask__5.150_67);

in this case.

Reply via email to