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

--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
The IL seems to be still correct in *.csa dump, where we have:
(code_label/s 1755 2240 1758 246 1802 (nil) [1 uses])
(note 1758 1755 1756 246 [bb 246] NOTE_INSN_BASIC_BLOCK)
(insn 1756 1758 1757 246 (set (reg:DI 41 r12 [469])
        (reg:DI 0 ax)) 85 {*movdi_internal}
     (expr_list:REG_DEAD (reg:DI 0 ax)
        (nil)))
(insn 1757 1756 2081 246 (set (reg:DI 43 r14 [471])
        (reg:DI 1 dx)) 85 {*movdi_internal}
     (expr_list:REG_DEAD (reg:DI 1 dx)
        (nil)))
(jump_insn/j 2081 1757 2082 246 (set (pc)
        (label_ref 1284)) 683 {jump}
     (nil)
...
(code_label 1284 2082 1285 247 1737 (nil) [1 uses])
(note 1285 1284 1286 247 [bb 247] NOTE_INSN_BASIC_BLOCK)
(insn 1286 1285 1287 247 (set (reg:DI 4 si)
        (const_int 48 [0x30])) "pr86108.C":1553 85 {*movdi_internal}
     (nil))
(insn 1287 1286 1288 247 (set (reg:DI 5 di)
        (reg/f:DI 3 bx [orig:94 rLoad ] [94])) "pr86108.C":1553 85
{*movdi_internal}
     (expr_list:REG_DEAD (reg/f:DI 3 bx [orig:94 rLoad ] [94])
        (nil)))
(call_insn 1288 1287 1289 247 (call (mem:QI (symbol_ref:DI ("_ZdlPvm") [flags
0x41]  <function_decl 0x7ff737519100 operator delete>) [0 operator de
        (const_int 0 [0])) "pr86108.C":1553 689 {*call}
     (expr_list:REG_DEAD (reg:DI 5 di)
        (expr_list:REG_DEAD (reg:DI 4 si)
            (expr_list:REG_CALL_DECL (symbol_ref:DI ("_ZdlPvm") [flags 0x41] 
<function_decl 0x7ff737519100 operator delete>)
                (expr_list:REG_EH_REGION (const_int 0 [0])
                    (nil)))))
    (expr_list:DI (use (reg:DI 5 di))
        (expr_list:DI (use (reg:DI 4 si))
            (nil))))
(insn 1289 1288 1290 247 (set (reg:DI 0 ax [468])
        (reg:DI 41 r12 [469])) 85 {*movdi_internal}
     (expr_list:REG_DEAD (reg:DI 41 r12 [469])
        (nil)))
(insn 1290 1289 2241 247 (set (reg:DI 1 dx [470])
        (reg:DI 43 r14 [471])) 85 {*movdi_internal}
     (expr_list:REG_DEAD (reg:DI 43 r14 [471])
        (nil)))
(jump_insn 2241 1290 2242 247 (set (pc)
        (label_ref 1443)) 683 {jump}
     (nil)
 -> 1443)

But *.jump2 breaks it by throwing away the saving/restoring of rax/rdx to/from
r12/r14, apparently during RTL fast DCE during that pass.

Reply via email to