As titled; Relaxed AKA Monotonic atomics don't impose any "global" synchronization semantics between threads.
Any other non-aliasing mem operation can treat them the same as an ordinary load (or load/modify/store) so it should not preclude chain improvement.
The case of aliasing load being reordered around an atomic load of the same deserves mention here:
- Technically, reordering changes program semantics, in the sense that:
- loading x after atomically loading x, the non-atomic load cannot give us a result that is more stale than the atomic one
- loading x before atomically loading x, the non-atomic load can result in an arbitrarily stale value
- We still allow this, on the grounds that:
- If nothing is concurrently modifying x, there is no difference.
- If any concurrent writers to x potentially exist, both versions of the program suffer from UB due to a data race, so it is legit to alter semantics in this manner.
I'm not sure what this comment is trying to say