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]

expand_call emits unnecessary stack adjusts



Greetings,

I'm finding that the patch of 28 Apr to calls.c generates unecessary
stack adjusts for the c4x.

For example, the program

extern int foo(int);

int bar(void)
{
  return foo(5);
}

generates the following RTL (where insns 9 and 20 are unnecessry)


;; Function bar

(note 2 0 3 NOTE_INSN_DELETED)

(note 3 2 9 NOTE_INSN_FUNCTION_BEG)

(insn 9 3 11 (set (reg:QI 20 sp)
        (plus:QI (reg:QI 20 sp)
            (const_int 1 [01h]))) -1 (nil)
    (nil))

(insn 11 9 13 (set (reg:QI 38)
        (reg:QI 35 virtual-outgoing-args)) -1 (nil)
    (nil))

(insn 13 11 14 (set (reg:QI 10 ar2)
        (const_int 5 [05h])) -1 (nil)
    (nil))

(call_insn 14 13 16 (parallel[ 
            (set (reg:QI 0 r0)
                (call (mem:QI (symbol_ref/v:QI ("foo")) 0)
                    (const_int 1 [01h])))
            (clobber (reg:QI 31 r11))
        ] ) -1 (nil)
    (nil)
    (expr_list (use (reg:QI 10 ar2))
        (nil)))

(insn 16 14 18 (set (reg:QI 37)
        (reg:QI 0 r0)) -1 (nil)
    (nil))

(insn 18 16 20 (set (reg/i:QI 0 r0)
        (reg:QI 37)) -1 (nil)
    (nil))

(insn 20 18 21 (set (reg:QI 20 sp)
        (plus:QI (reg:QI 20 sp)
            (const_int -1 [0ffffffffh]))) -1 (nil)
    (nil))

(jump_insn 21 20 22 (set (pc)
        (label_ref 27)) -1 (nil)
    (nil))

(barrier 22 21 24)

(note 24 22 26 NOTE_INSN_FUNCTION_END)

(insn 26 24 27 (clobber (reg/i:QI 0 r0)) -1 (nil)
    (nil))

(code_label 27 26 28 2 "" "" [0 uses])

(insn 28 27 0 (use (reg/i:QI 0 r0)) -1 (nil)
    (nil))

Michael.

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