asm volatile("":::"memory) uncertainty.
Jeff Law
law@redhat.com
Tue May 10 16:08:00 GMT 2016
On 05/10/2016 10:05 AM, Andrew Haley wrote:
> On 05/10/2016 04:58 PM, Tom Udale wrote:
>> To my mind, the only reason that these would not be considered "memory
>> references" is because the compiler has already decided to put the
>> memory into registers (true these are mostly automatic variables so they
>> can easily be put into registers). But from an abstract machine
>> standpoint a=b is a memory read and a memory write is it not (or is that
>> a totally incorrect statement)? It seems odd therefore that a register
>> allocation choice can fundamentally alter program behavior.
>
> An auto variable is only considered to be "memory" if its address
> is taken with & . "memory" means that this object is reachable from
> some pointer somewhere.
And note that there's a variety of analysis and transformations that
will try to eliminate the address-of so that the object is no longer
addressable.
> Not really. If a variable is not addressable by any means then it
> can't be affected by a memory access. Whether the compiler spills
> that variable to a stack frame makes no difference.
Right.
jeff
More information about the Gcc-help
mailing list