This is the mail archive of the
mailing list for the GCC project.
Re: Implementing atomic load as compare-and-swap for read-only memory
- From: Jakub Jelinek <jakub at redhat dot com>
- To: Kyrill Tkachov <kyrylo dot tkachov at foss dot arm dot com>, Torvald Riegel <triegel at redhat dot com>
- Cc: gcc at gcc dot gnu dot org, Richard Henderson <rth at redhat dot com>
- Date: Fri, 3 Jun 2016 12:03:00 +0200
- Subject: Re: Implementing atomic load as compare-and-swap for read-only memory
- Authentication-results: sourceware.org; auth=none
- References: <57514F17 dot 2090007 at foss dot arm dot com>
- Reply-to: Jakub Jelinek <jakub at redhat dot com>
On Fri, Jun 03, 2016 at 10:34:15AM +0100, Kyrill Tkachov wrote:
> expand_atomic_load in optabs.c tries to expand a wide atomic load using an atomic_compare_and_swap
> with the comment saying that sometimes a redundant harmless store may be performed.
> Is the store really valid if the memory is read-only?
> I've been looking at implementing a similar compare-and-swap strategy for atomic_loaddi for some
> arm targets and this concern came up. I don't think GCC can statically prove that a particular
> piece of memory is guaranteed to be writeable at runtime in all cases, so emitting a spurious
> store would not be always valid.
> I see this concern was already raised in https://gcc.gnu.org/ml/gcc-patches/2011-11/msg00278.html
> but that doesn't seem to have gone anywhere.
> Any thoughts? Should we remove the assumption that atomic loads always access writeable memory?
I guess it is a tough decision. If you don't have HW instruction to read
say double word aligned integer atomically, if you don't implement atomic
load on it through compare and swap (which indeed won't work with read-only
memory), then you probably need to fall back to locks in libatomic.
But doesn't that mean you should fall back to locked operation also for any
other atomic operation on such types, because otherwise if you atomic_store
or any other kind of atomic operation, it wouldn't use the locking, while
for atomic load it would? That would be an ABI change and quite significant
pessimization in many cases.