[Bug target/77833] [7 Regression] ICE: in plus_constant, at explow.c:87 with -O -mavx512f

rguenth at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Oct 4 09:35:00 GMT 2016


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

--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
#1  0x0000000000a5937e in plus_constant (mode=SImode, x=0x7ffff6a35fa0, c=-1, 
    inplace=false) at /space/rguenther/src/svn/trunk/gcc/explow.c:87
87        gcc_assert (GET_MODE (x) == VOIDmode || GET_MODE (x) == mode);
(gdb) p debug_rtx (x)
(const_vector:V2DI [
        (const_int 0 [0])
        (const_int 1 [0x1])
    ])

#3  0x00000000008d737f in init_alias_analysis ()
    at /space/rguenther/src/svn/trunk/gcc/alias.c:3359
3359                                                 INTVAL (XEXP (src, 1)));
(gdb) p debug_rtx (insn)
(insn 26 25 27 2 (parallel [
            (set (reg:SI 115 [ i ])
                (plus:SI (reg:SI 92 [ _6 ])
                    (const_int -1 [0xffffffffffffffff])))
            (clobber (reg:CC 17 flags))
        ]) t.c:9 211 {*addsi_1}
     (expr_list:REG_DEAD (reg:SI 92 [ _6 ])
        (expr_list:REG_UNUSED (reg:CC 17 flags)
            (nil))))
(gdb) p debug_rtx (t)
(mem/u/c:SI (symbol_ref/u:DI ("*.LC0") [flags 0x2]) [1  S4 A128])

so we're running into

    case MEM:
      /* If this is a reference to the constant pool, try replacing it with
         a reference to a new constant.  If the resulting address isn't
         valid, don't return it because we have no way to validize it.  */
      if (GET_CODE (XEXP (x, 0)) == SYMBOL_REF
          && CONSTANT_POOL_ADDRESS_P (XEXP (x, 0)))
        {
          rtx cst = get_pool_constant (XEXP (x, 0));

          if (GET_CODE (cst) == CONST_VECTOR
              && GET_MODE_INNER (GET_MODE (cst)) == mode)
            {
              cst = gen_lowpart (mode, cst);
              gcc_assert (cst);
            }

with mode == SImode and cst == V2DI.  I think the above needs to give up
for CONST_VECTOR != VNmode.


More information about the Gcc-bugs mailing list