This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: [parisc-linux] hppa64-linux gcc bug


On Wed, 25 Oct 2000, Grant Grundler wrote:

> Though this seems like a "generic" hppa bug to me, I doubt it's
> in the currently published hppa2.0-hpux toolchain.
> 
> [ Note : hppa64-linux tool chain isn't fully merged up with the

The bug manifests itself on today's CVS gcc from sourceware.
.../configure --host=i686-linux --target=hppa64-linux

Maybe one of the gcc maintainers can clue me in to where I should be
looking for a problem from the following.

Extract from generic.c.17.sched

[snip, nothing changes reg:DI 29 (ARG_POINTER_REGNUM)]

(insn 4 23 9 (set (reg:DI 66)
        (plus:DI (reg:DI 29 %r29)
            (const_int -64 [0xffffffc0]))) 166 {fixuns_truncdfdi2+2} (nil)
    (nil))

[snip, nothing changes reg:DI 66, but reg:DI 29 gets set before a number
 of function calls, including this one. ]

(insn 199 203 204 (set (reg:DI 26 %r26)
        (mem/f:DI (plus:DI (reg:DI 66)
                (const_int 16 [0x10])) 0)) 123 {movstrsi_internal+11} (insn_list 194 (nil))
    (expr_list:REG_DEAD (reg:DI 66)
        (nil)))

(call_insn 204 199 206 (parallel[ 
            (set (reg:DI 28 %r28)
                (call (mem:SI (symbol_ref/v:DI ("@proc_register")) 0)
                    (const_int 64 [0x40])))
            (clobber (reg:SI 2 %r2))
            (use (const_int 0 [0x0]))
        ] ) 272 {call_value_internal_symref} (insn_list 194 (insn_list 203 (insn_list 199 (insn_list 201 (nil)))))
    (expr_list:REG_DEAD (reg:DI 26 %r26)
        (expr_list:REG_DEAD (reg:DI 25 %r25)
            (expr_list:REG_DEAD (reg:DI 27 %r27)
                (expr_list:REG_DEAD (reg:DI 29 %r29)
                    (expr_list:REG_UNUSED (reg:DI 28 %r28)
                        (expr_list:REG_UNUSED (reg:SI 2 %r2)
                            (expr_list:REG_EH_REGION (const_int 0 [0x0])
                                (nil))))))))
    (expr_list (use (reg:DI 29 %r29))
        (expr_list (use (reg:DI 4 %r4))
            (expr_list (use (reg:DI 27 %r27))
                (expr_list (use (reg:DI 25 %r25))
                    (expr_list (use (reg:DI 26 %r26))
                        (nil)))))))


Now the corresponding rtl from generic.c.18.lreg

[snip a number of places like the following insn where reg:DI 29
 (ARG_POINTER_REGNUM) is set for function calls.  How is it that
 gcc doesn't see this register has been trashed?]

(insn 203 201 239 (set (reg:DI 29 %r29)
        (plus:DI (reg:DI 30 %r30)
            (const_int -16 [0xfffffff0]))) 166 {fixuns_truncdfdi2+2} (nil)
    (nil))

(insn 239 203 199 (set (reg:DI 66)
        (plus:DI (reg:DI 29 %r29)
            (const_int -64 [0xffffffc0]))) 166 {fixuns_truncdfdi2+2} (nil)
    (expr_list:REG_EQUIV (plus:DI (reg:DI 29 %r29)
            (const_int -64 [0xffffffc0]))
        (nil)))

(insn 199 239 204 (set (reg:DI 26 %r26)
        (mem/f:DI (plus:DI (reg:DI 66)
                (const_int 16 [0x10])) 0)) 123 {movstrsi_internal+11} (insn_list 194 (nil))
    (expr_list:REG_DEAD (reg:DI 66)
        (nil)))

(call_insn 204 199 206 (parallel[ 
            (set (reg:DI 28 %r28)
                (call (mem:SI (symbol_ref/v:DI ("@proc_register")) 0)
                    (const_int 64 [0x40])))
            (clobber (reg:SI 2 %r2))
            (use (const_int 0 [0x0]))
        ] ) 272 {call_value_internal_symref} (insn_list 194 (insn_list 203 (insn_list 199 (insn_list 201 (nil)))))
    (expr_list:REG_DEAD (reg:DI 26 %r26)
        (expr_list:REG_DEAD (reg:DI 25 %r25)
            (expr_list:REG_DEAD (reg:DI 27 %r27)
                (expr_list:REG_DEAD (reg:DI 29 %r29)
                    (expr_list:REG_UNUSED (reg:DI 28 %r28)
                        (expr_list:REG_UNUSED (reg:SI 2 %r2)
                            (expr_list:REG_EH_REGION (const_int 0 [0x0])
                                (nil))))))))
    (expr_list (use (reg:DI 29 %r29))
        (expr_list (use (reg:DI 4 %r4))
            (expr_list (use (reg:DI 27 %r27))
                (expr_list (use (reg:DI 25 %r25))
                    (expr_list (use (reg:DI 26 %r26))
                        (nil)))))))


-- 
Linuxcare.  Support for the Revolution.

generic.i.gz


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]