This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
expand_call emits unnecessary stack adjusts
- To: rth at cygnus dot com, jh at suze dot cz
- Subject: expand_call emits unnecessary stack adjusts
- From: Michael Hayes <m dot hayes at elec dot canterbury dot ac dot nz>
- Date: Sat, 06 May 2000 14:58:13 +1200 (NZST)
- Cc: gcc-bugs at gcc dot gnu dot org
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.