alpha combine/schedule conflict

Richard Henderson rth@cygnus.com
Tue Oct 28 15:42:00 GMT 1997


On Mon, Oct 27, 1997 at 09:27:50PM -0800, Jim Wilson wrote:
> This is a known problem.  Combine is emitting a lot of USE insns that it
> should not be.  I tried coming up with a patch, but it is known to be
> incomplete/incorrect.

It looks to me that it solved the USE problem in the test case, but
exposed a new bug also related to REG_DEAD notes.  For the test case
I posted at the beginning of this thread I get

(insn 201 199 202 (set (reg/v:DI 71)
        (const_int -1)) 252 {movdi-1} (nil)
    (nil))

(insn 202 201 205 (set (reg/v:DI 71)
        (plus:DI (reg/v:DI 71)
            (const_int 536870912))) 7 {adddi3} (insn_list 201 (nil))
    (expr_list:REG_DEAD (reg/v:DI 71)
        (expr_list:REG_EQUAL (const_int 536870911)
            (nil))))

[...]

(insn 209 207 210 (set (reg:DI 137)
        (leu:DI (reg:DI 135)
            (reg/v:DI 71))) 131 {subdf3+4} (insn_list 202 (insn_list 207 (nil)))
    (expr_list:REG_DEAD (reg/v:DI 71)
        (nil)))

It appears to be simply due to incomplete checking for elim_i1.  The
attached patch (combined with yours because I'm lazy) solves the problem
for the test case.  A sanity three-stage is still going, but I'll let
you know.


r~


More information about the Gcc mailing list