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