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)) ....