2011/3/16 Georg-Johann Lay <a...@gjlay.de> > > Richard Henderson schrieb: >> >> On 03/16/2011 03:32 AM, Georg-Johann Lay wrote: >> >>> Richard Henderson schrieb: >>> >>>> On 03/11/2011 05:43 AM, Georg-Johann Lay wrote: >>>> >>>>> I did not find a way to make this work together with -mcall-prologues. >>>>> Please let me know if you have suggestion on how call prologues can be >>>>> combine with tail calls. >>>> >>>> You need a new symbol in libgcc for this. It should be easy enough to have >>>> the sibcall epilogue load up Z+EIND before jumping to the new symbol >>>> (perhaps called __sibcall_restores__). This new symbol would be just like >>>> the existing __epilogue_restores__ except that it would finish with an >>>> eijmp/ijmp instruction (depending on multilib) instead of a ret >>>> instruction. >>> >>> The point is that the intent of -mprologue-saves is to save program >>> memory space (flash). If we load the callee's address in the epilogue, >>> the epilogue's size will increase. Moreover, adding an other lengthy >>> function besides __epilogue_restores__ to libgcc, that will increase >>> code size because in many cases we will see both epilogue flavors >>> being dragged into application. >> >> All true, but supposing there are enough tail calls then on balance >> you'll still save flash space. > > Only if epilogue size decreses. As tail-call saves at most 2 bytes and > storing the address (either return-to in epilogue or jump-to caller) will > take more than 2 bytes. So nothing is won. > >> An intermediate alternative is to simply override TARGET_CALL_PROLOGUES >> in sibcall epilogues. I.e. let __prologue_saves__ be generated as usual, >> and __epilogue_restores__ be generated as usual for normal epilogues, but >> test for sibcall_p in computing "minimize". > > This means that long epilogues that with call-prologues would deflate then > would no more deflate and had to be coded inline in epilogue. > > Maybe we can take the patch as-is, let approve it and fiddle out more > optimization opportunities later?
Is it tested for regressions ? Denis.