https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87627
Alexander Monakov <amonakov at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |amonakov at gcc dot gnu.org --- Comment #3 from Alexander Monakov <amonakov at gcc dot gnu.org> --- Noticed this back when working on -fno-plt patches: https://gcc.gnu.org/ml/gcc-patches/2015-05/msg00229.html Emitting a tailcall on RTL drops REG_EQUIV notes (perhaps because in the general case equivalences might not hold just before the sibcall when the new arguments are being prepared), and this penalizes code generation for the whole function. I'm not sure why you say "Results are similarly bad for 64-bit", there's nothing to improve in this example with three arguments all of which are on registers and thus need to be somehow saved/restored anyway?