asm volatile("":::"memory) uncertainty.
Tom Udale
tom@ionoptix.com
Tue May 10 16:12:00 GMT 2016
Hi Jeff and Andrew,
On 5/10/2016 12:07 PM, Jeff Law wrote:
> 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.
Of course there is. I was about to posit that simply making a bunch of
pointers to autos might have the desired effect but indeed my previous
experience with gcc indicates it would not fall for this kind of trick.
>
>> 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.
Well, this is good. It at least means that things will not change
willy-nilly based on optimization and that things are in fact set at the
C level.
Thanks and
all the best,
Tom
More information about the Gcc-help
mailing list