Add the clang patch for r265477. While here, add a description to the 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:
|