[Bug tree-optimization/97239] [11 Regression] ICE in gimple_expand_vec_cond_expr, at gimple-isel.cc:201

rguenth at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Sep 29 11:46:52 GMT 2020


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.


More information about the Gcc-bugs mailing list