<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Thu, May 25, 2017 at 3:58 PM Tim Shen via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: timshen<br>
Date: Thu May 25 17:58:35 2017<br>
New Revision: 303931<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=303931&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=303931&view=rev</a><br>
Log:<br>
[PPC] Fix atomics lowering in DAG lowering.<br>
<br>
I forgot to forward the chain, causing some missing instruction<br>
dependencies. The test crashes the compiler without this patch.<br>
<br>
Inspired by the test case, D33519 also tries to remove the extra sync.<br>
<br>
Differential Revision: <a href="https://reviews.llvm.org/D33573" rel="noreferrer" target="_blank">https://reviews.llvm.org/D33573</a><br>
<br>
Added:<br>
    llvm/trunk/test/CodeGen/PowerPC/atomics-constant.ll<br>
Modified:<br>
    llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp<br>
<br>
Modified: llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp?rev=303931&r1=303930&r2=303931&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp?rev=303931&r1=303930&r2=303931&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp (original)<br>
+++ llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp Thu May 25 17:58:35 2017<br>
@@ -8296,10 +8296,12 @@ SDValue PPCTargetLowering::LowerINTRINSI<br>
   SDLoc DL(Op);<br>
   switch (cast<ConstantSDNode>(Op.getOperand(ArgStart))->getZExtValue()) {<br>
   case Intrinsic::ppc_cfence: {<br>
+    assert(ArgStart == 1);<br></blockquote><div><br></div><div>Assert needs text. :)</div><div><br></div><div>-eric</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
     assert(Subtarget.isPPC64() && "Only 64-bit is supported for now.");<br>
     return SDValue(DAG.getMachineNode(PPC::CFENCE8, DL, MVT::Other,<br>
                                       DAG.getNode(ISD::ANY_EXTEND, DL, MVT::i64,<br>
-                                                  Op.getOperand(ArgStart + 1))),<br>
+                                                  Op.getOperand(ArgStart + 1)),<br>
+                                      Op.getOperand(0)),<br>
                    0);<br>
   }<br>
   default:<br>
<br>
Added: llvm/trunk/test/CodeGen/PowerPC/atomics-constant.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/PowerPC/atomics-constant.ll?rev=303931&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/PowerPC/atomics-constant.ll?rev=303931&view=auto</a><br>
==============================================================================<br>
--- llvm/trunk/test/CodeGen/PowerPC/atomics-constant.ll (added)<br>
+++ llvm/trunk/test/CodeGen/PowerPC/atomics-constant.ll Thu May 25 17:58:35 2017<br>
@@ -0,0 +1,23 @@<br>
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py<br>
+; RUN: llc < %s | FileCheck %s<br>
+<br>
+target triple = "powerpc64le-unknown-linux-gnu"<br>
+<br>
+@a = constant i64 zeroinitializer<br>
+<br>
+define i64 @foo() {<br>
+; CHECK-LABEL: foo:<br>
+; CHECK:       # BB#0: # %entry<br>
+; CHECK-NEXT:    addis 3, 2, .LC0@toc@ha<br>
+; CHECK-NEXT:    li 4, 0<br>
+; CHECK-NEXT:    ld 3, .LC0@toc@l(3)<br>
+; CHECK-NEXT:    cmpw 7, 4, 4<br>
+; CHECK-NEXT:    ld 3, 0(3)<br>
+; CHECK-NEXT:    bne- 7, .+4<br>
+; CHECK-NEXT:    isync<br>
+; CHECK-NEXT:    li 3, 0<br>
+; CHECK-NEXT:    blr<br>
+entry:<br>
+  %value = load atomic i64, i64* @a acquire, align 8<br>
+  ret i64 %value<br>
+}<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div></div>