[Bug middle-end/68595] [6 regression] ice in const_vector_mask_from_tree at expr.c:11455

rguenth at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Mon Nov 30 12:09:00 GMT 2015


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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|ASSIGNED                    |NEW
                 CC|                            |alan.hayward at arm dot com
           Assignee|rguenth at gcc dot gnu.org         |unassigned at gcc dot gnu.org

--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
(gdb) p debug_tree (elt)
 <integer_cst 0x7ffff6a241f8 type <boolean_type 0x7ffff69d0498> constant -2>
(gdb) p debug_generic_expr (exp)
{ 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }

comes from BIT_NOT_EXPR on { -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1 }

from simplifying

mask__25.20_271 = ~{ -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1 };

where the vectorizer generated



  mask__21.18_69 = vect_vec_iv_.17_66 != vect_cst__68;
  _21 = c.2_33 != 0;
  mask__23.19_72 = mask__21.18_69 | vect_cst__71;

and unrolling exposes a lot of constants to go forward.  The vector_cst looks
suspicious:

  _44 = b.3_32 != 0;
  _70 = (<unnamed type>) _44;
  vect_cst__71 = {_70, _70, _70, _70, _70, _70, _70, _70, _70, _70, _70, _70,
_70, _70, _70, _70};

because the vector boolean result is clearly _not_ a scalar comparison
result just casted but it needs to cater for true to become -1.


More information about the Gcc-bugs mailing list