Pass MemOperand through for 64-bit atomics on 32-bit,
incidentally making the case where the memop is a
pointer deref work.  Fix cmp-and-swap regression.

llvm-svn: 57027
diff --git a/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp b/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp
index 35c5b42..a782079 100644
--- a/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp
+++ b/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp
@@ -1209,14 +1209,15 @@
   SDValue Tmp0, Tmp1, Tmp2, Tmp3;
   if (!SelectAddr(In1, In1, Tmp0, Tmp1, Tmp2, Tmp3))
     return NULL;
+  SDValue LSI = Node->getOperand(4);    // MemOperand
   AddToISelQueue(Tmp0);
   AddToISelQueue(Tmp1);
   AddToISelQueue(Tmp2);
   AddToISelQueue(Tmp3);
   AddToISelQueue(In2L);
   AddToISelQueue(In2H);
+  // For now, don't select the MemOperand object, we don't know how.
   AddToISelQueue(Chain);
-  SDValue LSI = CurDAG->getMemOperand(cast<MemSDNode>(In1)->getMemOperand());
   const SDValue Ops[] = { Tmp0, Tmp1, Tmp2, Tmp3, In2L, In2H, LSI, Chain };
   return CurDAG->getTargetNode(Opc, MVT::i32, MVT::i32, MVT::Other, Ops, 8);
 }