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.

Reply via email to