On Fri, Jan 8, 2010 at 3:34 PM, Ian Lance Taylor <[email protected]> wrote:
> "Paulo J. Matos" <[email protected]> writes:
>
>> I just noticed that the pro_and_epilogue pass in gcc3.4.3 for certain
>> functions is ran multiple times with sibcalls enabled. Why is that?
>>
>> What I did was to put a printf on the epilogue and sibcall_epilogue
>> pattern so that during compilation it prints the name of the function
>> currently generating the epilogue for, however, I get a print in
>> epilogue and a print in sibcall_epilogue for the same function a
>> couple of times. Why?
>
> One obvious possibility is function cloning, but I can't remember
> whether gcc 3.4.3 did that. Take a look at the dump file and see
> whether the function appears more than once. If that doesn't help,
> run cc1 under a debugger and do a backtrace to find out where the
> calls are coming from.
>
Just checked and it happens with this example:
extern long foo(int *r, int d, long n);
long udiv3232(long n, long d)
{
int q;
if (d < 0)
return foo(0, (int) d, n);
return (long) q;
}
It calls sibcall_epilogue for foo and normal epilogue for returning q,
which is interesting and logic. So, now I am not so surprised.
Thanks,
Paulo Matos
> Ian
>
--
Paulo Jorge Matos - pocmatos at gmail.com
http://www.pmatos.net