mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
[CGAtomic] Lift strong requirement for remaining compare_exchange combinations
Follow up on 431e3138a and complete the other possible combinations. Besides enforcing the new behavior, it also mitigates TSAN false positives when combining orders that used to be stronger.
This commit is contained in:
parent
98255d6170
commit
da10d555a9
@ -7571,9 +7571,6 @@ int LLParser::parseCmpXchg(Instruction *&Inst, PerFunctionState &PFS) {
|
||||
if (SuccessOrdering == AtomicOrdering::Unordered ||
|
||||
FailureOrdering == AtomicOrdering::Unordered)
|
||||
return tokError("cmpxchg cannot be unordered");
|
||||
if (isStrongerThan(FailureOrdering, SuccessOrdering))
|
||||
return tokError("cmpxchg failure argument shall be no stronger than the "
|
||||
"success argument");
|
||||
if (FailureOrdering == AtomicOrdering::Release ||
|
||||
FailureOrdering == AtomicOrdering::AcquireRelease)
|
||||
return tokError(
|
||||
|
@ -1558,9 +1558,6 @@ void AtomicCmpXchgInst::Init(Value *Ptr, Value *Cmp, Value *NewVal,
|
||||
"AtomicCmpXchg instructions must be atomic!");
|
||||
assert(FailureOrdering != AtomicOrdering::NotAtomic &&
|
||||
"AtomicCmpXchg instructions must be atomic!");
|
||||
assert(!isStrongerThan(FailureOrdering, SuccessOrdering) &&
|
||||
"AtomicCmpXchg failure argument shall be no stronger than the success "
|
||||
"argument");
|
||||
assert(FailureOrdering != AtomicOrdering::Release &&
|
||||
FailureOrdering != AtomicOrdering::AcquireRelease &&
|
||||
"AtomicCmpXchg failure ordering cannot include release semantics");
|
||||
|
@ -3831,10 +3831,6 @@ void Verifier::visitAtomicCmpXchgInst(AtomicCmpXchgInst &CXI) {
|
||||
"cmpxchg instructions cannot be unordered.", &CXI);
|
||||
Assert(CXI.getFailureOrdering() != AtomicOrdering::Unordered,
|
||||
"cmpxchg instructions cannot be unordered.", &CXI);
|
||||
Assert(!isStrongerThan(CXI.getFailureOrdering(), CXI.getSuccessOrdering()),
|
||||
"cmpxchg instructions failure argument shall be no stronger than the "
|
||||
"success argument",
|
||||
&CXI);
|
||||
Assert(CXI.getFailureOrdering() != AtomicOrdering::Release &&
|
||||
CXI.getFailureOrdering() != AtomicOrdering::AcquireRelease,
|
||||
"cmpxchg failure ordering cannot include release semantics", &CXI);
|
||||
|
Loading…
x
Reference in New Issue
Block a user