Fix CFP to avoid removing synchronization #7311
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
ConstantFieldPropagation previously reasoned that if a field has a
constant value, then it is not possible for release-acquire operations
to use it for synchronization, since the read can be assumed to be from
a previous write. This logic was incorrect because reads must read the
value written by the last write in the global modification order for the
accessed location.
In principle it would be possible for CFP to detect fields that have
both constant values and also either no acquire reads or no release
writes. Such fields cannot possibly be part of synchronization edges and
their gets could be optimized normally. For now though, simply do not
optimize any gets with acquire or seqcst ordering. Similarly, stop
optimizing RMW operations because they can also form synchronization
edges.