[llvm-commits] [llvm] r164685 - in /llvm/trunk: lib/Target/ARM/ARMISelLowering.cpp test/CodeGen/ARM/atomicrmw_minmax.ll
James Molloy
james.molloy at arm.com
Wed Sep 26 02:48:33 PDT 2012
Author: jamesm
Date: Wed Sep 26 04:48:32 2012
New Revision: 164685
URL: http://llvm.org/viewvc/llvm-project?rev=164685&view=rev
Log:
Fix ordering of operands on lowering of atomicrmw min/max nodes on ARM.
Added:
llvm/trunk/test/CodeGen/ARM/atomicrmw_minmax.ll
Modified:
llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp
Modified: llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp?rev=164685&r1=164684&r2=164685&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp Wed Sep 26 04:48:32 2012
@@ -5594,7 +5594,7 @@
// ldrex dest, ptr
// (sign extend dest, if required)
// cmp dest, incr
- // cmov.cond scratch2, dest, incr
+ // cmov.cond scratch2, incr, dest
// strex scratch, scratch2, ptr
// cmp scratch, #0
// bne- loopMBB
@@ -5617,7 +5617,7 @@
AddDefaultPred(BuildMI(BB, dl, TII->get(isThumb2 ? ARM::t2CMPrr : ARM::CMPrr))
.addReg(oldval).addReg(incr));
BuildMI(BB, dl, TII->get(isThumb2 ? ARM::t2MOVCCr : ARM::MOVCCr), scratch2)
- .addReg(oldval).addReg(incr).addImm(Cond).addReg(ARM::CPSR);
+ .addReg(incr).addReg(oldval).addImm(Cond).addReg(ARM::CPSR);
MIB = BuildMI(BB, dl, TII->get(strOpc), scratch).addReg(scratch2).addReg(ptr);
if (strOpc == ARM::t2STREX)
Added: llvm/trunk/test/CodeGen/ARM/atomicrmw_minmax.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/atomicrmw_minmax.ll?rev=164685&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/ARM/atomicrmw_minmax.ll (added)
+++ llvm/trunk/test/CodeGen/ARM/atomicrmw_minmax.ll Wed Sep 26 04:48:32 2012
@@ -0,0 +1,21 @@
+; RUN: llc -march=arm -mcpu=cortex-a9 %s -o - |& FileCheck %s
+
+; CHECK: max:
+define i32 @max(i8 %ctx, i32* %ptr, i32 %val)
+{
+; CHECK: ldrex
+; CHECK: cmp [[old:r[0-9]*]], [[val:r[0-9]*]]
+; CHECK: movhi {{r[0-9]*}}, [[old]]
+ %old = atomicrmw umax i32* %ptr, i32 %val monotonic
+ ret i32 %old
+}
+
+; CHECK: min:
+define i32 @min(i8 %ctx, i32* %ptr, i32 %val)
+{
+; CHECK: ldrex
+; CHECK: cmp [[old:r[0-9]*]], [[val:r[0-9]*]]
+; CHECK: movlo {{r[0-9]*}}, [[old]]
+ %old = atomicrmw umin i32* %ptr, i32 %val monotonic
+ ret i32 %old
+}
More information about the llvm-commits
mailing list