This is the mail archive of the
mailing list for the GCC project.
Re: -fno-tree-cselim not working?
skaller <firstname.lastname@example.org> writes:
> On Fri, 2007-10-26 at 07:58 -0700, Ian Lance Taylor wrote:
> > skaller <email@example.com> writes:
> > > As I understand it volatile is typically used as a 'hint'
> > > to the compiler that there could be aliases it cannot see.
> > > This is independent of the use suggesting asynchronous changes
> > > in a hardware port for example, although the effect is the same.
> > Not really. Volatile has a reasonably precise definition: it means
> > that memory accesses must be done precisely as they are written in the
> > program. They may not be coalesced, and they may not be moved.
> I understand that's the common meaning .. but the semantics
> aren't specified for ISO C/C++.
Sure they are. In the C99 standard look at the definition of sequence
points (18.104.22.168) and the definition of volatile (6.7.3).
> > > [BTW I think this sucks, the need to synchronise ALL memory
> > > on mutexing is far too heavy]
> > It can not be avoided, for the reasons you describe.
> Of course it can be avoided easily if the memory model
> allowed for local synchronisation sets, so the real problem
> appears to be that Posix doesn't provide proper synchronisation
Or that POSIX only provides heavyweight synchronization.
As I understand it, the draft C++0x memory model has acquire release
semantics for annotated variables. Of course, it wouldn't help the
originalk test case unless the global variable was annotated.