------- Additional Comments From danglin at gcc dot gnu dot org  2004-12-20 
04:36 -------
Hmmm, why "-mportable-runtime"?  This was intended I believe for PA 1.0
chips in embedded applications and isn't used or tested much any more.

I can only duplicate on linux.  At the moment, I don't know how this
can happen.  We have the following insn when the ICE occurs:

(insn 36 16 37 0 (set (reg:SI 2 %r2)
        (mem:SI (plus:SI (reg/f:SI 30 %r30)
                (const_int -20 [0xffffffec])) [0 S4 A32])) -1 (nil)
    (nil))

(insn 37 36 17 0 (unspec_volatile [
            (const_int 2 [0x2])
        ] 0) -1 (nil)
    (nil))

(call_insn/j 17 37 18 0 (parallel [
            (set (reg:SI 28 %r28)
                (call (mem:SI (reg:SI 22 %r22) [0 S4 A32])
                    (const_int 16 [0x10])))
            (clobber (reg:SI 1 %r1))
            (clobber (reg:SI 2 %r2))
            (use (const_int 1 [0x1]))
        ]) 207 {call_val_reg} (insn_list:REG_DEP_ANTI 13 
(insn_list:REG_DEP_TRUE 
16 (nil)))
    (expr_list:REG_DEAD (reg:SI 26 %r26 [ size ])
        (expr_list:REG_DEAD (reg:SI 22 %r22)
            (expr_list:REG_UNUSED (reg:SI 2 %r2)
                (expr_list:REG_UNUSED (reg:SI 1 %r1)
                    (nil)))))
    (expr_list:REG_DEP_TRUE (use (reg:SI 26 %r26 [ size ]))
        (nil)))

(barrier 18 17 20)

(note 20 18 33 NOTE_INSN_FUNCTION_END)

(note 33 20 0 NOTE_INSN_DELETED)

$5 = void

Somehow, it looks as if the epilogue has been emitted in the wrong place
(i.e., before insn 17 which is in the body of the function.  It looks
to me like this is caused by thread_prologue_and_epilogue_insns treating
insn 17 as a sibling call.  The hpux port doesn't allow sibcalls in
the portable runtime.

I think I see how to fix this but I'm still wonder why you would want
to use -mportable-runtime on linux.  The call sequences are much less
efficient.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=17643

Reply via email to