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