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

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2019-11-26
                 CC|                            |jakub at gcc dot gnu.org
     Ever confirmed|0                           |1

--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Started with r275959.  Slightly cleaned up testcase:
/* { dg-options "-O1 -ftree-loop-vectorize -fno-forward-propagate
-fno-tree-scev-cprop" } */

int v;

long int
foo (long int x)
{
  signed char i;

  for (i = 0; i < 8; ++i)
    x |= !!v;

  return x + i;
}

The ICE happens during combine of
(insn 14 13 15 2 (set (subreg:DI (reg:V1DI 96 [ vect_x_12.7 ]) 0)
        (ne:DI (reg:CCZ 17 flags)
            (const_int 0 [0]))) "pr92510.c":9:7 701 {*setcc_di_1}
     (expr_list:REG_DEAD (reg:CCZ 17 flags)
        (nil)))
into
(insn 15 14 16 2 (parallel [
            (set (reg:DI 99)
                (ior:DI (reg:DI 100)
                    (subreg:DI (reg:V1DI 96 [ vect_x_12.7 ]) 0)))
            (clobber (reg:CC 17 flags))
        ]) "pr92510.c":11:12 454 {*iordi_1}
     (expr_list:REG_DEAD (reg:DI 100)
        (expr_list:REG_UNUSED (reg:CC 17 flags)
            (expr_list:REG_DEAD (reg:V1DI 96 [ vect_x_12.7 ])
                (nil)))))
subst creates there:
(ior:DI (subreg:DI (ne:V1DI (reg:CCZ 17 flags)
            (const_int 0 [0])) 0)
    (reg:DI 100))
if_then_else_cond then uses (const_int 1) as true and native_encode_rtx is
unhappy about trying to interpret a VOIDmode CONST_INT as something with
non-scalar mode (V1DImode).

Reply via email to