------- Additional Comments From steven at gcc dot gnu dot org 2005-06-09
09:20 -------
Here is the initial RTL for the call to foo:
(call_insn 44 20 45 (call_placeholder 40 31 22 27 (cond [
(const_string "normal") (sequence [
(insn 40 0 39 (set (reg:SI 63)
(reg/v:SI 58 [ n ])) -1 (nil)
(nil))
(insn 39 40 41 (parallel [
(set (reg/v:SI 58 [ n ])
(plus:SI (reg/v:SI 58 [ n ])
(const_int 1 [0x1])))
(clobber (reg:CC 17 flags))
]) -1 (nil)
(nil))
(insn 41 39 42 (set (reg:SI 62)
(reg:SI 63)) -1 (nil)
(nil))
(insn 42 41 43 (set (reg:SI 5 di)
(reg:SI 62)) -1 (nil)
(nil))
(call_insn 43 42 0 (call (mem:QI (symbol_ref:DI ("foo") [flags 0x3]
<function_decl 0x2a9592b9c0 foo>) [0 S1 A8])
(const_int 0 [0x0])) -1 (nil)
(nil)
(expr_list (use (reg:SI 5 di))
(nil)))
])
(const_string "tail_call") (sequence [
(note 31 0 32 NOTE_INSN_DELETED)
(note 32 31 34 NOTE_INSN_DELETED)
(insn 34 32 33 (set (reg:SI 61)
(reg/v:SI 58 [ n ])) -1 (nil)
(nil))
(insn 33 34 35 (parallel [
(set (reg/v:SI 58 [ n ])
(plus:SI (reg/v:SI 58 [ n ])
(const_int 1 [0x1])))
(clobber (reg:CC 17 flags))
]) -1 (nil)
(nil))
(insn 35 33 36 (set (reg:SI 60)
(reg:SI 61)) -1 (nil)
(nil))
(insn 36 35 37 (set (reg:SI 5 di)
(reg:SI 60)) -1 (nil)
(nil))
(call_insn/j 37 36 38 (call (mem:QI (symbol_ref:DI ("foo") [flags 0x3]
<function_decl 0x2a9592b9c0 foo>) [0 S1 A8])
(const_int 0 [0x0])) -1 (nil)
(nil)
(expr_list (use (reg:SI 5 di))
(nil)))
(barrier 38 37 0)
])
(const_string "tail_recursion") (sequence [
(note 22 0 23 NOTE_INSN_DELETED)
(note 23 22 25 NOTE_INSN_DELETED)
(insn 25 23 26 (set (reg:SI 59)
(reg/v:SI 58 [ n ])) -1 (nil)
(nil))
(insn 26 25 24 (set (reg/v:SI 58 [ n ])
(reg:SI 59)) -1 (nil)
(nil))
(insn 24 26 28 (parallel [
(set (reg/v:SI 58 [ n ])
(plus:SI (reg/v:SI 58 [ n ])
(const_int 1 [0x1])))
(clobber (reg:CC 17 flags))
]) -1 (nil)
(nil))
(jump_insn 28 24 29 (set (pc)
(label_ref 27)) -1 (nil)
(nil))
(barrier 29 28 30)
(barrier 30 29 0)
])
])) -1 (nil)
(nil)
(nil))
You have to set debug_call_placeholder_verbose = 1 in print-rtl.c to
see what is going on.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21964