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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |rguenth at gcc dot gnu.org
           Priority|P3                          |P2

--- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> ---
#1  0x000000000180dcb8 in prepare_cmp_insn (x=0x7ffff6649330, 
    y=0x7ffff6809c60, mask=0x0, comparison=LT, size=0x0, unsignedp=0, 
    methods=OPTAB_LIB_WIDEN, ptest=0x7fffffffab28, pmode=0x7fffffffaa88, 
    optab=cbranch_optab) at ../../src/gcc/gcc/optabs.cc:4589
4589          gcc_assert (libfunc);
(gdb) p debug_rtx (x)
(reg/v:V16HI 100 [ BS_TEMP_206 ])
$1 = void
(gdb) p debug_rtx (y)
(const_vector:V16HI [
        (const_int 0 [0]) repeated x16
    ])

expanded from

_36 = BS_TEMP_206_34(D) < { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

We start having vector operations in FRE5 which transforms

  _40 = .REDUC_IOR (_39);
  _32 = _40;
  _36 = _32 != 0;

into

  _1 = BS_TEMP_206_34(D) >> 15;
  _36 = _1 != { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

with some match.pd pattern.  Later forwprop4 turns this into

  _36 = BS_TEMP_206_34(D) < { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

but not with a match.pd pattern.  Disabling forwprop4 fixes this so this
simplification is invalid as not supported by the target.

Reply via email to