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