Denis Chertykov schrieb:
> 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.

I ran tests against svn 170942 (latest 4.7.0 snapshot). Besides
timestamps, the diff looks like this:

1435a1436,1437
> XPASS: gcc.dg/sibcall-3.c execution test
> XPASS: gcc.dg/sibcall-4.c execution test
1630,1631c1632,1633
< # of unexpected successes     4
< # of expected failures                132
---
> # of unexpected successes     6
> # of expected failures                130
1670c1672

This is due to xfail for runtime-test of sibcall abilities for avr-*-*.

Johann

Reply via email to