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

--- Comment #1 from Peter Bergner <bergner at gcc dot gnu.org> ---
Simpler test case???  Anyway, it fails too.

typedef union { _Decimal128 a; } u_t;
extern u_t fn1 (void);
extern void fn2 (u_t);
void
foo (void)
{
  fn2 (fn1 ());
}

Before LRA, we have:

(call_insn 5 2 6 2 (parallel [
            (set (parallel:TI [
                        (expr_list:REG_DEP_TRUE (reg:TD 34 2)
                            (const_int 0 [0]))
                    ])
                (call (mem:SI (symbol_ref:DI ("fn1") [flags 0x41]
<function_decl 0x3fffb568d580 fn1>) [0 fn1 S4 A8])
                    (const_int 0 [0])))
            (clobber (reg:DI 65 lr))
        ]) foo.i:7 636 {*call_value_nonlocal_aixdi}
     (nil)
    (expr_list (use (reg:DI 2 2))
        (nil)))

(insn 6 5 7 2 (set (reg:TD 156)
        (reg:TD 34 2)) foo.i:7 450 {*movtd_64bit_nodm}
     (expr_list:REG_DEAD (reg:TD 34 2)
        (nil)))

(insn 7 6 8 2 (set (reg:TI 155 [ D.2361 ])
        (subreg:TI (reg:TD 156) 0)) foo.i:7 937 {*vsx_movti_64bit}
     (expr_list:REG_DEAD (reg:TD 156)
        (nil)))

(insn 8 7 9 2 (set (reg:TI 157)
        (reg:TI 155 [ D.2361 ])) foo.i:7 937 {*vsx_movti_64bit}
     (expr_list:REG_DEAD (reg:TI 155 [ D.2361 ])
        (nil)))

(insn 9 8 10 2 (set (reg:TD 158)
        (subreg:TD (reg:TI 157) 0)) foo.i:7 450 {*movtd_64bit_nodm}
     (expr_list:REG_DEAD (reg:TI 157)
        (nil)))

(insn 10 9 11 2 (set (reg:TD 34 2)
        (reg:TD 158)) foo.i:7 450 {*movtd_64bit_nodm}
     (expr_list:REG_DEAD (reg:TD 158)
        (nil)))

(call_insn 11 10 14 2 (parallel [
            (call (mem:SI (symbol_ref:DI ("fn2") [flags 0x41] <function_decl
0x3fffb568d660 fn2>) [0 fn2 S4 A8])
                (const_int 0 [0]))
            (clobber (reg:DI 65 lr))
        ]) foo.i:7 635 {*call_nonlocal_aixdi}
     (expr_list:REG_DEAD (reg:DI 2 2)
        (expr_list:REG_DEAD (reg:TD 34 2)
            (nil)))
    (expr_list (use (reg:DI 2 2))
        (expr_list (use (reg:TD 34 2))
            (nil))))

(insn 14 11 0 2 (unspec [
            (const_int 0 [0])
        ] UNSPEC_NOP) foo.i:8 697 {nop}
     (nil))

After the ICE in LRA, we have:

(call_insn 5 2 6 2 (parallel [
            (set (parallel:TI [
                        (expr_list:REG_DEP_TRUE (reg:TD 34 2)
                            (const_int 0 [0]))
                    ])
                (call (mem:SI (symbol_ref:DI ("fn1") [flags 0x41]
<function_decl 0x3fffb568d580 fn1>) [0 fn1 S4 A8])
                    (const_int 0 [0])))
            (clobber (reg:DI 65 lr))
        ]) foo.i:7 636 {*call_value_nonlocal_aixdi}
     (expr_list:REG_UNUSED (reg:DI 65 lr)
        (nil))
    (expr_list (use (reg:DI 2 2))
        (nil)))

(insn 6 5 18 2 (set (mem/c:TD (plus:DI (reg/f:DI 113 sfp)
                (const_int 32 [0x20])) [1 %sfp+32 S16 A128])
        (reg:TD 34 2)) foo.i:7 450 {*movtd_64bit_nodm}
     (expr_list:REG_DEAD (reg:TI 35 3)
        (expr_list:REG_DEAD (reg:TD 34 2)
            (nil))))

(insn 18 6 20 2 (set (reg:DI 162)
        (plus:DI (reg/f:DI 113 sfp)
            (const_int 32 [0x20]))) foo.i:7 81 {*adddi3}
     (nil))

(insn 20 18 19 2 (set (reg:DI 163 [162])
        (reg:DI 162)) foo.i:7 540 {*movdi_internal64}
     (nil))

(insn 19 20 21 2 (set (reg:TD 164 [161])
        (mem/c:TD (reg:DI 163 [162]) [1 %sfp+32 S16 A128])) foo.i:7 450
{*movtd_64bit_nodm}
     (nil))

(insn 21 19 22 2 (set (reg:TD 165 [161])
        (reg:TD 164 [161])) foo.i:7 450 {*movtd_64bit_nodm}
     (nil))

(insn 22 21 23 2 (set (reg:TD 166 [161])
        (reg:TD 165 [161])) foo.i:7 450 {*movtd_64bit_nodm}
     (nil))

(insn 23 22 24 2 (set (reg:TD 167 [161])
        (reg:TD 166 [161])) foo.i:7 450 {*movtd_64bit_nodm}
     (nil))

(insn 24 23 25 2 (set (reg:TD 168 [161])
        (reg:TD 167 [161])) foo.i:7 450 {*movtd_64bit_nodm}
     (nil))
....

Reply via email to