1263320SdimPull in r200130 from upstream llvm trunk (by Jakob Stoklund Olesen):
2263320Sdim
3263320Sdim  Fix swapped CASA operands.
4263320Sdim
5263320Sdim  Found by SingleSource/UnitTests/AtomicOps.c
6263320Sdim
7263320SdimIntroduced here: http://svn.freebsd.org/changeset/base/262261
8263320Sdim
9263320SdimIndex: lib/Target/Sparc/SparcISelLowering.cpp
10263320Sdim===================================================================
11263320Sdim--- lib/Target/Sparc/SparcISelLowering.cpp
12263320Sdim+++ lib/Target/Sparc/SparcISelLowering.cpp
13263320Sdim@@ -2972,7 +2972,7 @@ SparcTargetLowering::expandAtomicRMW(MachineInstr
14263320Sdim   // loop:
15263320Sdim   //   %val = phi %val0, %dest
16263320Sdim   //   %upd = op %val, %rs2
17263320Sdim-  //   %dest = cas %addr, %upd, %val
18263320Sdim+  //   %dest = cas %addr, %val, %upd
19263320Sdim   //   cmp %val, %dest
20263320Sdim   //   bne loop
21263320Sdim   // done:
22263320Sdim@@ -3031,7 +3031,7 @@ SparcTargetLowering::expandAtomicRMW(MachineInstr
23263320Sdim   }
24263320Sdim 
25263320Sdim   BuildMI(LoopMBB, DL, TII.get(is64Bit ? SP::CASXrr : SP::CASrr), DestReg)
26263320Sdim-    .addReg(AddrReg).addReg(UpdReg).addReg(ValReg)
27263320Sdim+    .addReg(AddrReg).addReg(ValReg).addReg(UpdReg)
28263320Sdim     .setMemRefs(MI->memoperands_begin(), MI->memoperands_end());
29263320Sdim   BuildMI(LoopMBB, DL, TII.get(SP::CMPrr)).addReg(ValReg).addReg(DestReg);
30263320Sdim   BuildMI(LoopMBB, DL, TII.get(is64Bit ? SP::BPXCC : SP::BCOND))
31263320SdimIndex: test/CodeGen/SPARC/atomics.ll
32263320Sdim===================================================================
33263320Sdim--- test/CodeGen/SPARC/atomics.ll
34263320Sdim+++ test/CodeGen/SPARC/atomics.ll
35263320Sdim@@ -64,8 +64,8 @@ entry:
36263320Sdim 
37263320Sdim ; CHECK-LABEL: test_load_add_32
38263320Sdim ; CHECK: membar
39263320Sdim-; CHECK: add
40263320Sdim-; CHECK: cas [%o0]
41263320Sdim+; CHECK: add [[V:%[gilo][0-7]]], %o1, [[U:%[gilo][0-7]]]
42263320Sdim+; CHECK: cas [%o0], [[V]], [[U]]
43263320Sdim ; CHECK: membar
44263320Sdim define zeroext i32 @test_load_add_32(i32* %p, i32 zeroext %v) {
45263320Sdim entry:
46