[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