Am Freitag, dem 28.02.2025 um 08:18 +0100 schrieb Richard Biener via Gcc:
> On Fri, Feb 28, 2025 at 8:01 AM Martin Uecker <uec...@tugraz.at> wrote:
> > 
> > 
> > Hi all,
> > 
> > one area where the Linux kernel people are unhappy with C's
> > memory model is where they now have to use the READ_ONCE,
> > WRITE_ONCE macros.  These are cases where they do not want
> > a compiler to duplicate a load, e.g. to reload a value
> > later because registers were not available to cache it.
> 
> The RA could do this as part of re-materialization to
> avoid a spill-reload and I think this would be sensible.
> 
> > Or similar, where a compiler produces two writes to
> > the same object where the source has only one or
> > invents a write where none existed, e.g. by turning
> > a conditional write after a read in an unconditional
> > one.
> 
> That should be covered by -fno-allow-store-data-races
> There might be the assumption that automatic variables
> that have their address not taken are not subject to
> store data races, and I have a hard time thinking of a
> reason to want READ_ONCE or WRITE_ONCE for such.
> 
> > General, it seems compilers currently do not do this.
> 
> Yes, because it's a de-optimization.  But for example
> the partial PRE optimization can introduce a read to
> a program path where it wasn't read to remove a
> redundancy on another path that looks more performance
> critical.  Similarly a sinking transform could do the very
> same to a store (but see above for -fallow-store-data-races).
> 
> > One could alreay use volatile and then the C standard
> > would guarantee that there are exactly as many accesses
> > as the source code implies, but this is too strong,
> > because combining multiple reads into one and caching
> > the value or dead store elimination would still be ok.
> 
> volatile is what gives you the guarantee for reads at
> the moment.
> 
> > The question is whether there are cases where GCC (or
> > C compilers in general) do such things?   Or if not,
> > where this would be desirable?   In other words:
> > Would it be a ok to strengthen the requirements
> > here?
> 
> We have volatile, I don't see a good reason to invent
> something new here, esp. that we have this guarantee
> for stores anyway and that for reads it's going to be
> quite difficult to implement that guarantee.

Thank you! This is very helpful information.

Martin


Reply via email to