a426b286c8
patch for r263619, and unify all the URLs to point to svnweb.
46 lines
1.6 KiB
Diff
46 lines
1.6 KiB
Diff
Pull in r200130 from upstream llvm trunk (by Jakob Stoklund Olesen):
|
|
|
|
Fix swapped CASA operands.
|
|
|
|
Found by SingleSource/UnitTests/AtomicOps.c
|
|
|
|
Introduced here: http://svnweb.freebsd.org/changeset/base/262261
|
|
|
|
Index: lib/Target/Sparc/SparcISelLowering.cpp
|
|
===================================================================
|
|
--- lib/Target/Sparc/SparcISelLowering.cpp
|
|
+++ lib/Target/Sparc/SparcISelLowering.cpp
|
|
@@ -2972,7 +2972,7 @@ SparcTargetLowering::expandAtomicRMW(MachineInstr
|
|
// loop:
|
|
// %val = phi %val0, %dest
|
|
// %upd = op %val, %rs2
|
|
- // %dest = cas %addr, %upd, %val
|
|
+ // %dest = cas %addr, %val, %upd
|
|
// cmp %val, %dest
|
|
// bne loop
|
|
// done:
|
|
@@ -3031,7 +3031,7 @@ SparcTargetLowering::expandAtomicRMW(MachineInstr
|
|
}
|
|
|
|
BuildMI(LoopMBB, DL, TII.get(is64Bit ? SP::CASXrr : SP::CASrr), DestReg)
|
|
- .addReg(AddrReg).addReg(UpdReg).addReg(ValReg)
|
|
+ .addReg(AddrReg).addReg(ValReg).addReg(UpdReg)
|
|
.setMemRefs(MI->memoperands_begin(), MI->memoperands_end());
|
|
BuildMI(LoopMBB, DL, TII.get(SP::CMPrr)).addReg(ValReg).addReg(DestReg);
|
|
BuildMI(LoopMBB, DL, TII.get(is64Bit ? SP::BPXCC : SP::BCOND))
|
|
Index: test/CodeGen/SPARC/atomics.ll
|
|
===================================================================
|
|
--- test/CodeGen/SPARC/atomics.ll
|
|
+++ test/CodeGen/SPARC/atomics.ll
|
|
@@ -64,8 +64,8 @@ entry:
|
|
|
|
; CHECK-LABEL: test_load_add_32
|
|
; CHECK: membar
|
|
-; CHECK: add
|
|
-; CHECK: cas [%o0]
|
|
+; CHECK: add [[V:%[gilo][0-7]]], %o1, [[U:%[gilo][0-7]]]
|
|
+; CHECK: cas [%o0], [[V]], [[U]]
|
|
; CHECK: membar
|
|
define zeroext i32 @test_load_add_32(i32* %p, i32 zeroext %v) {
|
|
entry:
|