-foptimize-sibling-calls and passing structs
Gabriel Paubert
paubert@iram.es
Sun Jun 4 09:19:00 GMT 2000
On Sun, 4 Jun 2000, Jamie Lokier wrote:
> Artur Skawina wrote:
> > r() gets compiled to:
> >
> > <r>:
> > sub $0xc,%esp
> > lea 0x10(%esp,1),%eax
> > mov %eax,0x10(%esp,1)
> > add $0xc,%esp
> > jmp <p>
> >
> > which does seem to be a bit aggressive...
>
> I assume you mean not aggressive enough. It should be
>
> lea 4(%esp,1),%eax
> mov %eax,4(%esp,1)
> jmp <p>
It seems that you missed the key point: the generated code and the one you
suggest overwrite the first element of the structure with a pointer to the
structure. The result is likely to be hmmm... interesting :-(
Sibling calls should check for case like this and disable the
optimizationg but this is API dependant: for example this should not be
disabled on PPC for example since structure are always passed by reference
and r would become a simple "b p" instruction in this trivial example.
I have no idea on how to solve the problem (besides disabling sibling
calls optimization altogether), but it might be worth adding Arthur's code
to the testsuite.
Gabriel.
More information about the Gcc
mailing list