[llvm-dev] atomic ops are optimized with incorrect semantics .
Umesh Kalappa via llvm-dev
llvm-dev at lists.llvm.org
Mon Feb 10 05:05:55 PST 2020
Hi All,
With the "https://gcc.godbolt.org/z/yBYTrd" case .
the atomic is converted to non atomic ops for x86 like
from
xchg dword ptr [100], eax
to
mov dword ptr [100], 1
the pass is responsible for this tranformation was instCombine
i.e InstCombiner::visitAtomicRMWInst
which converts the IR like
%0 = atomicrmw xchg i32* inttoptr (i64 100 to i32*), i32 1 monotonic
to
store atomic i32 1, i32* inttoptr (i64 100 to i32*) monotonic, align 4
which is valid for relax(monotonic) and release ordering as per the code
out there.
we think that,its the inst lowering issue, where the atomic store was
lowered to non-atomic store here.
to work around we changed our case to strong ordering .
and we are debugging the case with x86 and the same goes with an arm too.
Any suggestions or thoughts on the transformation? , will be helpful to
proceed further.
FYI, the problem persists with LLVM-9, not with the LLVM-8.
Thank you
~Umesh
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200210/6b759684/attachment.html>
More information about the llvm-dev
mailing list