https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119395

            Bug ID: 119395
           Summary: target hook function_ok_for_sibcall should take a
                    gcall* instead of CALL_EXPR as the last argument
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Keywords: internal-improvement
          Severity: enhancement
          Priority: P3
         Component: middle-end
          Assignee: pinskia at gcc dot gnu.org
          Reporter: pinskia at gcc dot gnu.org
  Target Milestone: ---

I am not sure I will get around to implementing this but I am filing this as I
noticed it when I am cleaning up some of the tail call code.

But basically currently the definition of function_ok_for_sibcall is:
```
 "True if it is OK to do sibling call optimization for the specified\n\
call expression @var{exp}.  @var{decl} will be the called function,\n\
or @code{NULL} if this is an indirect call.\n\
\n\
It is not uncommon for limitations of calling conventions to prevent\n\
tail calls to functions outside the current unit of translation, or\n\
during PIC compilation.  The hook is used to enforce these restrictions,\n\
as the @code{sibcall} md pattern cannot fail, or fall over to a\n\
``normal'' call.  The criteria for successful sibling call optimization\n\
may vary greatly between different architectures.",
 bool, (tree decl, tree exp),
```

As we move expansion of call directly from gimple instead of creating a
CALL_EXPR, this target hook needs to change.

I am not 100% sure the calling of the target hook can be moved from expand to
the gimple pass though. Because some targets check stuff that is only seemly
available during expand.

Reply via email to