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

Uroš Bizjak <ubizjak at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
          Component|target                      |middle-end

--- Comment #4 from Uroš Bizjak <ubizjak at gmail dot com> ---
(In reply to Uroš Bizjak from comment #3)
> (In reply to Gerhard Steinmetz from comment #0)
> > (insn 10 9 11 2 (set (mem:XF (pre_modify:DI (reg/f:DI 7 sp)
> >                 (plus:DI (reg/f:DI 7 sp)
> >                     (const_int -16 [0xfffffffffffffff0]))) [2  S12 A32])
> >         (reg:XF 87 [ _1 ])) "pr46251.c":3 118 {*pushxf}
> >      (expr_list:REG_DEAD (reg:XF 87 [ _1 ])
> >         (expr_list:REG_ARGS_SIZE (const_int 16 [0x10])
> >             (nil))))
> 
> This doesn't look like a valid RTL to me.

A bit of debugging shows:

Breakpoint 1, gen_movxf (operand0=0x2aaaae8f3318, operand1=0x2aaaae8daf90) at
../../git/gcc/gcc/config/i386/i386.md:3185
3185          return standard_sse_constant_opcode (insn, operands[1]);
(gdb) p debug_rtx (operand1)
(reg:XF 87 [ _1 ])
$3 = void
(gdb) p debug_rtx (operand0)
(mem:XF (pre_modify:DI (reg/f:DI 7 sp)
        (plus:DI (reg/f:DI 7 sp)
            (const_int -16 [0xfffffffffffffff0]))) [2  S12 A32])
$4 = void
(gdb) bt
#0  gen_movxf (operand0=0x2aaaae8f3318, operand1=0x2aaaae8daf90) at
../../git/gcc/gcc/config/i386/i386.md:3185
#1  0x00000000007e23ef in operator() (a1=0x2aaaae8daf90, a0=0x2aaaae8f3318,
this=<optimized out>) at ../../git/gcc/gcc/recog.h:301
#2  emit_move_insn_1 (x=0x2aaaae8f3318, y=0x2aaaae8daf90) at
../../git/gcc/gcc/expr.c:3643
#3  0x00000000007e2745 in emit_move_insn (x=x@entry=0x2aaaae8f3318,
y=y@entry=0x2aaaae8daf90) at ../../git/gcc/gcc/expr.c:3738
#4  0x00000000007e4433 in emit_single_push_insn_1 (type=0x2aaaae7c8498,
x=0x2aaaae8daf90, mode=<optimized out>) at ../../git/gcc/gcc/expr.c:4185
#5  emit_single_push_insn (mode=<optimized out>, x=0x2aaaae8daf90,
type=0x2aaaae7c8498) at ../../git/gcc/gcc/expr.c:4197
#6  0x00000000007e817b in emit_push_insn (x=0x2aaaae8daf90, mode=XFmode,
type=0x2aaaae7c8498, size=0x0, align=64, partial=0, reg=0x0, extra=0, 
    args_addr=0x0, args_so_far=0x2aaaae7b0480, reg_parm_stack_space=0,
alignment_pad=0x2aaaae7b0480, sibcall_p=true)
    at ../../git/gcc/gcc/expr.c:4536
...
(gdb) f 4
#4  0x00000000007e4433 in emit_single_push_insn_1 (type=0x2aaaae7c8498,
x=0x2aaaae8daf90, mode=<optimized out>) at ../../git/gcc/gcc/expr.c:4185
4185      emit_move_insn (dest, x);
(gdb) p debug_rtx (dest)
(mem:XF (pre_modify:DI (reg/f:DI 7 sp)
        (plus:DI (reg/f:DI 7 sp)
            (const_int -16 [0xfffffffffffffff0]))) [2  S12 A32])
$12 = void
(gdb) list
4180               outgoing arguments and we cannot allow reordering of reads
4181               from function arguments with stores to outgoing arguments
4182               of sibling calls.  */
4183            set_mem_alias_set (dest, 0);
4184        }
4185      emit_move_insn (dest, x);
4186    }
4187
4188    /* Emit and annotate a single push insn.  */
4189

So, it is middle end that generates invalid RTX.

Reply via email to