<div dir="ltr"><p style="margin:10px 0px 0px;padding:0px;color:rgb(23,43,77);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,"Fira Sans","Droid Sans","Helvetica Neue",sans-serif;font-size:14px"><span class="error"></span><br>Thank you All and Nicolai,<br><br>This is what we get with ARM like </p><p style="margin:10px 0px 0px;padding:0px;color:rgb(23,43,77);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,"Fira Sans","Droid Sans","Helvetica Neue",sans-serif;font-size:14px"><br>(CLANG 9.0.1.1)<br>1834 0000000080001ccc <bm>:<br>1835 80001ccc:¦ 52800028 ¦ mov¦w8, #0x1 ¦// #1<br>1836 80001cd0:¦ b9000008 ¦ str¦w8, [x0]       <br>1837 80001cd4:¦ 17ffffff ¦ b¦ 80001cd0 <bm+0x4> <br><br>(CLANG 8.0.0.2)<br>1833 0000000080001c90 <bm>:<br>1834 80001c90:> 320003e8 > orr>w8, wzr, #0x1<br>1835 80001c94:> 885f7c1f > ldxr> wzr, [x0]<br>1836 80001c98:> 881f7c08 > stxr> wzr, w8, [x0]<br>1837 80001c9c:> 17fffffe > b> 80001c94 <bm+0x4><br><br>may be in x86 ,you are right mov is atomic, but if we need to sync the operation with the previous insn's then just having atomic doesn't help right?<br></p><p style="margin:10px 0px 0px;padding:0px;color:rgb(23,43,77);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,"Fira Sans","Droid Sans","Helvetica Neue",sans-serif;font-size:14px"><br></p><p style="margin:10px 0px 0px;padding:0px;color:rgb(23,43,77);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,"Fira Sans","Droid Sans","Helvetica Neue",sans-serif;font-size:14px">~Umesh</p></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Feb 11, 2020 at 2:08 AM Nicolai Hähnle <<a href="mailto:nhaehnle@gmail.com">nhaehnle@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi Umesh,<br>
<br>
On Mon, Feb 10, 2020 at 2:06 PM Umesh Kalappa via llvm-dev<br>
<<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> wrote:<br>
> Hi All,<br>
><br>
> With the "<a href="https://gcc.godbolt.org/z/yBYTrd" rel="noreferrer" target="_blank">https://gcc.godbolt.org/z/yBYTrd</a>"  case .<br>
><br>
> the atomic is converted to non atomic ops  for x86 like<br>
><br>
> from<br>
> xchg dword ptr [100], eax<br>
> to<br>
> mov dword ptr [100], 1<br>
><br>
> the pass is responsible for this tranformation was instCombine i.e InstCombiner::visitAtomicRMWInst<br>
><br>
> which converts the IR like<br>
>  %0 = atomicrmw xchg i32* inttoptr (i64 100 to i32*), i32 1 monotonic<br>
> to<br>
>  store atomic i32 1, i32* inttoptr (i64 100 to i32*) monotonic, align 4<br>
<br>
Can you explain why you think this code generation is incorrect? A<br>
simple mov is an atomic store on x86 from what I understand - the<br>
godbolt example seems perfectly correct to me, what am I missing?<br>
<br>
Cheers,<br>
Nicolai<br>
<br>
<br>
><br>
> which is valid for relax(monotonic) and release ordering as per the code out there.<br>
><br>
> we think that,its the inst lowering issue, where the atomic store was lowered to non-atomic store here.<br>
><br>
> to work around we changed our case to strong ordering .<br>
><br>
> and we are debugging the case with x86 and the same goes with an arm too.<br>
><br>
> Any suggestions or thoughts on the transformation? , will be helpful to proceed further.<br>
><br>
> FYI, the problem persists with LLVM-9, not with the LLVM-8.<br>
><br>
> Thank you<br>
> ~Umesh<br>
><br>
><br>
><br>
> _______________________________________________<br>
> LLVM Developers mailing list<br>
> <a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
> <a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
<br>
<br>
<br>
-- <br>
Lerne, wie die Welt wirklich ist,<br>
aber vergiss niemals, wie sie sein sollte.<br>
</blockquote></div>