This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
Re: bb-reorder fix
- To: Jeffrey A Law <law at redhat dot com>
- Subject: Re: bb-reorder fix
- From: Alan Modra <alan at linuxcare dot com dot au>
- Date: Wed, 24 Jan 2001 20:35:24 +1100 (EST)
- cc: gcc-bugs at gcc dot gnu dot org
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.