pushing values to memory efficiently during rtl gen?
Ken Raeburn
raeburn@cygnus.com
Tue Sep 15 14:14:00 GMT 1998
> void foo(long double *a, long double *b, long double *c)
> {
> *a = *b + *c;
> }
>
> Ideally I'd like this to result in directly passing foo's pointer
> parameters into the _Qp_add() libcall.
What about aliasing issues -- if it's called as
foo (&accum, &accum, &x)
? Can some bits of the output be written before some bits of the
input are read (for the last time)? Is it safe not to use a temporary
for the output? The definition of foo clearly requires it to behave
as if there is a temporary; your description of _Qp_add doesn't
indicate how it behaves.
> I am fairly certain the
> ADDRESSOF mechanism would get this optimization, but for the normal
> stack temporary scheme I am not so sure.
Almost certainly not, I think. Even if the compiler were that clever,
I think it'd have to keep temporaries (at least for output) in case
the library routine did clobber the output space early on unless you
could tell it a lot about how the library routine worked.
More information about the Gcc
mailing list