[Bug target/72717] [5/6/7 Regression] ICE: in emit_move_insn, at expr.c:3693 with vector shift @ powerpc64le
aldyh at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Dec 6 18:45:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=72717
Aldy Hernandez <aldyh at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |aldyh at gcc dot gnu.org,
| |meissner at gcc dot gnu.org
--- Comment #2 from Aldy Hernandez <aldyh at gcc dot gnu.org> ---
FWIW:
emit_move_insn() is trying to emit a move from an SI to a DI and dying:
#1 0x00000000107a4e24 in emit_move_insn (x=0x3fffb58bd8f0, y=0x3fffb58bd8a8)
at /home/aldyh/gcc/gcc/expr.c:3696
(gdb) call debug_rtx(x)
(reg:DI 179)
(gdb) call debug_rtx(y)
(subreg/s/v:SI (reg:DI 156 [ _3 ]) 0)
(gdb)
This comes via rs6000_expand_vector_init():
/* Double word values on VSX can use xxpermdi or lxvdsx. */
if (VECTOR_MEM_VSX_P (mode) && (mode == V2DFmode || mode == V2DImode))
{
rtx op0 = XVECEXP (vals, 0, 0);
rtx op1 = XVECEXP (vals, 0, 1);
if (all_same)
{
if (!MEM_P (op0) && !REG_P (op0))
=> op0 = force_reg (inner_mode, op0);
if (mode == V2DFmode)
emit_insn (gen_vsx_splat_v2df (target, op0));
else
emit_insn (gen_vsx_splat_v2di (target, op0));
...where we have:
(gdb) p inner_mode
$4 = DImode
(gdb) call debug_rtx(vals)
(parallel:V2DI [
(subreg/s/v:SI (reg:DI 156 [ _3 ]) 0)
(subreg/s/v:SI (reg:DI 156 [ _3 ]) 0)
])
(gdb) p inner_mode
$5 = DImode
(gdb) call debug_rtx(op0)
(subreg/s/v:SI (reg:DI 156 [ _3 ]) 0)
More information about the Gcc-bugs
mailing list