gccint: Tail Calls
1
1 18.9.13 Permitting tail calls
1 -----------------------------
1
1 -- Target Hook: bool TARGET_FUNCTION_OK_FOR_SIBCALL (tree DECL, tree
1 EXP)
1 True if it is OK to do sibling call optimization for the specified
1 call expression EXP. DECL will be the called function, or 'NULL'
1 if this is an indirect call.
1
1 It is not uncommon for limitations of calling conventions to
1 prevent tail calls to functions outside the current unit of
1 translation, or during PIC compilation. The hook is used to
1 enforce these restrictions, as the 'sibcall' md pattern can not
1 fail, or fall over to a "normal" call. The criteria for successful
1 sibling call optimization may vary greatly between different
1 architectures.
1
1 -- Target Hook: void TARGET_EXTRA_LIVE_ON_ENTRY (bitmap REGS)
1 Add any hard registers to REGS that are live on entry to the
1 function. This hook only needs to be defined to provide registers
1 that cannot be found by examination of FUNCTION_ARG_REGNO_P, the
1 callee saved registers, STATIC_CHAIN_INCOMING_REGNUM,
1 STATIC_CHAIN_REGNUM, TARGET_STRUCT_VALUE_RTX, FRAME_POINTER_REGNUM,
1 EH_USES, FRAME_POINTER_REGNUM, ARG_POINTER_REGNUM, and the
1 PIC_OFFSET_TABLE_REGNUM.
1
1 -- Target Hook: void TARGET_SET_UP_BY_PROLOGUE (struct
1 hard_reg_set_container *)
1 This hook should add additional registers that are computed by the
1 prologue to the hard regset for shrink-wrapping optimization
1 purposes.
1
1 -- Target Hook: bool TARGET_WARN_FUNC_RETURN (tree)
1 True if a function's return statements should be checked for
1 matching the function's return type. This includes checking for
1 falling off the end of a non-void function. Return false if no
1 such check should be made.
1