bb-reorder fix
Alan Modra
alan@linuxcare.com.au
Wed Jan 24 01:35:00 GMT 2001
On Tue, 23 Jan 2001, Jeffrey A Law wrote:
> GCC with the patch on the PA and verified that libstc++-v3 builds again
> (with some other patches which I haven't submitted yet).
Do your patces address the following sort of problem?
>From exception_support.cc.18.lreg
==========
(insn 277 282 279 (set (reg:SI 134)
(plus:SI (reg:SI 19 %r19)
(high:SI (symbol_ref:SI ("_ZTISt13bad_exception"))))) 80 {*pa.md:2326} (nil)
(nil))
(insn 279 277 281 (set (reg/v/f:SI 133)
(mem/u:SI (lo_sum:SI (reg:SI 134)
(unspec:SI[
(symbol_ref:SI ("_ZTISt13bad_exception"))
] 0)) 0)) 82 {*pa.md:2352} (insn_list 277 (nil))
(expr_list:REG_EQUIV (mem/u:SI (lo_sum:SI (reg:SI 134)
(unspec:SI[
(symbol_ref:SI ("_ZTISt13bad_exception"))
] 0)) 0)
(expr_list:REG_DEAD (reg:SI 134)
(nil))))
[snip at least one basic block, and a bit more]
(insn 311 307 309 (set (reg:SI 25 %r25)
(reg/v/f:SI 133)) 69 {*pa.md:2099} (nil)
(nil))
==========
gets turned into the following in .greg
==========
(note 277 282 279 NOTE_INSN_DELETED 0)
(note 279 277 281 NOTE_INSN_DELETED 2137548624)
[snip]
(insn 311 307 2729 (set (reg:SI 25 %r25)
(mem/u:SI (lo_sum:SI (reg:SI 1 %r1 [134])
(unspec:SI[
(symbol_ref:SI ("_ZTISt13bad_exception"))
] 0)) 0)) 69 {*pa.md:2099} (nil)
(nil))
==========
%r1 doesn't get set to the right value anywhere, and in any case is used
in the intervening instructions. Seems to me like there's some confusion
resulting from the REG_DEAD and REG_EQUIV notes on insn 279 - If the
compiler is going to make use of REG_EQUIV it ought to ignore REG_DEAD and
vice versa.
Alan Modra
--
Linuxcare. Support for the Revolution.
More information about the Gcc-bugs
mailing list