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 7269012SemasteIntroduced here: http://svnweb.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