This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Problem with GP on IA64
- From: kenner at vlsi1 dot ultra dot nyu dot edu (Richard Kenner)
- To: rth at redhat dot com
- Cc: gcc at gcc dot gnu dot org
- Date: Fri, 17 May 02 09:00:53 EDT
- Subject: Re: Problem with GP on IA64
> Later, it gets a REG_EQUIV note for the MEM and is scheduled before 2697
> since there is no reason to do otherwise.
Boom. Yes there is:
> How is this supposed to work?
deps->in_post_call_group_p is supposed to keep all post-call
hard-register manipulation adjacent to the call insn by making
the whole clump SCHED_GROUP_P.
But that doesn't work because when EH is in effect, the CALL_INSN ends
a basic block so the CALL_INSN and that move are in different basic
blocks so in_post_call_group_p doesn't see the move.
Here's the relevant portion of the .combine:
(call_insn 2695 2694 4413 (parallel[
(set (reg:TI 8 r8)
(call (mem:DI (symbol_ref/v:DI ("osint__read_library_info")) [0 S8 A64])
(const_int 2 [0x2])))
(use (unspec[
(reg:DI 1 r1)
] 9))
(clobber (reg:DI 320 b0))
] ) 216 {call_value_pic} (insn_list 2690 (insn_list 2692 (nil)))
(expr_list:REG_UNUSED (reg:DI 320 b0)
(expr_list:REG_DEAD (reg:SI 120 out0)
(expr_list:REG_DEAD (reg:QI 121 out1)
(expr_list:REG_DEAD (reg:DI 1 r1)
(expr_list:REG_UNUSED (reg:DI 320 b0)
(nil))))))
(expr_list (use (reg:QI 121 out1))
(expr_list (use (reg:SI 120 out0))
(nil))))
;; End of basic block 125, registers live:
0 [r0] 1 [r1] 8 [r8] 9 [r9] 12 [r12] 111 [loc79] 328 [sfp] 341 343 347 350 353 356 414 458 790 1104 1133 1134 1625 1691 1692 1693
;; Start of basic block 126, registers live: 0 [r0] 8 [r8] 9 [r9] 12 [r12] 111 [loc79] 328 [sfp] 341 343 347 350 353 356 414 458 790 1104 1133 1134 1625 1691 1692 1693
(note 4413 2695 2697 [bb 126] NOTE_INSN_BASIC_BLOCK)
(insn 2697 4413 2699 (set (reg:DI 1 r1)
(reg:DI 458)) 6 {*movdi_internal} (nil)
(expr_list:REG_DEAD (reg:DI 458)
(nil)))