https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78255
--- Comment #6 from ktkachov at gcc dot gnu.org --- (In reply to wilco from comment #5) > (In reply to avieira from comment #4) > > OK so after some extra debugging and digging I found that the postreload > > pass is basically turning the direct sibcall into an indirect sibcall. It > > takes cost into consideration, but does this only looking at the operands of > > the call, i.e. the cost of a symbolref vs the cost of a register. It does > > not take into consideration that it is doing a call. This doesn't seem like > > a good idea to me. > > Also it looks like various other targets may have the same issue as using > one instruction for direct and indirect tailcalls is common among RISC > targets. > > So this is another generic cost issue whether it isn't possible to return > correct costs. > Regardless of whether the profitability logic is right or not, this is a correctness question, so postreload should cancel this transformation regardless of costs