This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Question on fixup_abnormal_edges
Jan Hubicka wrote:
> The caller save use chain->live_throughout that should contain
> proper values. Unforutnately the code is somewhat messy as reload still
> use it's own liveness updating code instead of relying on what live.c
> have and there well may be some bug. Can I see the relevant block in
> the .lreg dump?
Sure. We see 347 live at the beginning and at the end. This is the one
assigned the hard reg 22, which save_call_clobbered_regs inserts a restore
insn for:
;; Start of basic block 50,
;; registers live: 26 [$26] 29 [$29] 30 [$30] 31 [AP] 63 [FP] 155 347
(note 1464 437 2045 [bb 50] NOTE_INSN_BASIC_BLOCK)
(note 2045 1464 441 0x4054fc00 NOTE_INSN_BLOCK_END)
(insn 441 2045 443 (set (reg:DI 16 $16)
(reg:DI 155)) 244 {*movdi_nofix} (nil)
(expr_list:REG_DEAD (reg:DI 155)
(nil)))
(insn 443 441 444 (set (reg:DI 25 $25)
(const_int 1 [0x1])) 244 {*movdi_nofix}
(insn_list:REG_DEP_ANTI 441 (nil))
(expr_list:REG_EQUAL (const_int 1 [0x1])
(nil)))
(call_insn 444 443 445 (parallel[
(call (mem:DI (symbol_ref:DI
("ada__exceptions__reraise_occurrence_no_defer")) [0 S8 A64])
(const_int 1 [0x1]))
(use (const_int 0 [0x0]))
(use (reg:DI 25 $25))
(use (reg:DI 26 $26))
(clobber (reg:DI 27 $27))
] ) 211 {*call_vms_1} (insn_list 443 (insn_list 441 (nil)))
(expr_list:REG_DEAD (reg:DI 16 $16)
(expr_list:REG_DEAD (reg:DI 26 $26)
(expr_list:REG_DEAD (reg:DI 25 $25)
(expr_list:REG_UNUSED (reg:DI 27 $27)
(expr_list:REG_EH_REGION (const_int 16 [0x10])
(expr_list:REG_NORETURN (const_int 0 [0x0])
(nil)))))))
(expr_list (use (reg:DI 16 $16))
(nil)))
;; End of basic block 50, registers live:
29 [$29] 30 [$30] 31 [AP] 63 [FP] 347