Does anyone recognize this one?

Donn Terry donn@interix.com
Wed Feb 3 10:03:00 GMT 1999


Before I try to understand what went wrong, does this ring a bell
with anyone?  (Any clues appreciated before I try to find it.)
This does not occur on Intel with the same egcs source.

Alpha, bootstrap compile: global.c fails because REGISTER_LIVE_LENGTH
of a pseudo is 0.  Looking at the rtl, that's a valid complaint,
as the register (actually several) are used in only one insn
(uselessly).  (It fails while compiling _muldi3, so it's the
first use of the new compiler, and probably reflects a fairly
basic sort of problem.)

In cse2, the RTL is:


(insn 54 52 55 (set (reg:DI 105)
        (ltu:DI (reg:DI 103)
            (reg:DI 104))) 161 {sqrtdf2+1} (nil)
    (nil))

(jump_insn 55 54 56 (set (pc)
        (if_then_else (eq (reg:DI 105)
                (const_int 0))
            (label_ref 60)
            (pc))) 195 {umindi3+2} (nil)
    (nil))



In flow (bp isn't run):

(note 54 52 55 "" NOTE_INSN_DELETED)

(jump_insn 55 54 56 (set (pc)
        (if_then_else (eq (reg:DI 105)
                (const_int 0))
            (label_ref 60)
            (pc))) 195 {umindi3+2} (nil)
    (expr_list:REG_DEAD (reg:DI 105)
        (nil)))
;; End of basic block 0

Somehow insn 54 got discarded (possibly validly?) but 55 is
still around, now accessing a trash register (105).

(There are several other registers with similar problems.)

Donn

-- 

===================================================
Donn Terry                  mailto:donn@interix.com
Softway Systems, Inc.        http://www.interix.com
2850 McClelland Dr, Ste. 1800   Ft.Collins CO 80525
Tel: +1-970-204-9900           Fax: +1-970-204-9951
===================================================


More information about the Gcc-bugs mailing list