mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-10 06:25:01 +00:00
[ARM] Don't generate clrex for pre-v7 targets.
Since r248294, we emit clrex, but it doesn't exist on v6. llvm-svn: 248640
This commit is contained in:
parent
a43b643107
commit
5e8f57b519
@ -11739,6 +11739,8 @@ Value *ARMTargetLowering::emitLoadLinked(IRBuilder<> &Builder, Value *Addr,
|
||||
|
||||
void ARMTargetLowering::emitAtomicCmpXchgNoStoreLLBalance(
|
||||
IRBuilder<> &Builder) const {
|
||||
if (!Subtarget->hasV7Ops())
|
||||
return;
|
||||
Module *M = Builder.GetInsertBlock()->getParent()->getParent();
|
||||
Builder.CreateCall(llvm::Intrinsic::getDeclaration(M, Intrinsic::arm_clrex));
|
||||
}
|
||||
|
@ -1,6 +1,9 @@
|
||||
; RUN: llc < %s -mtriple=arm-linux-gnueabi -asm-verbose=false -verify-machineinstrs | FileCheck %s -check-prefix=CHECK-ARM
|
||||
; RUN: llc < %s -mtriple=thumb-linux-gnueabi -asm-verbose=false -verify-machineinstrs | FileCheck %s -check-prefix=CHECK-THUMB
|
||||
|
||||
; RUN: llc < %s -mtriple=armv6-linux-gnueabi -asm-verbose=false -verify-machineinstrs | FileCheck %s -check-prefix=CHECK-ARMV6
|
||||
; RUN: llc < %s -mtriple=thumbv6-linux-gnueabi -asm-verbose=false -verify-machineinstrs | FileCheck %s -check-prefix=CHECK-THUMBV6
|
||||
|
||||
; RUN: llc < %s -mtriple=armv7-linux-gnueabi -asm-verbose=false -verify-machineinstrs | FileCheck %s -check-prefix=CHECK-ARMV7
|
||||
; RUN: llc < %s -mtriple=thumbv7-linux-gnueabi -asm-verbose=false -verify-machineinstrs | FileCheck %s -check-prefix=CHECK-THUMBV7
|
||||
|
||||
@ -26,10 +29,38 @@ entry:
|
||||
; CHECK-THUMB: movs r0, #1
|
||||
; CHECK-THUMB: movs [[R2:r[0-9]+]], #0
|
||||
; CHECK-THUMB: cmp [[R1]], {{r[0-9]+}}
|
||||
; CHECK-THU<B: beq
|
||||
; CHECK-THUMB: beq
|
||||
; CHECK-THUMB: push {[[R2]]}
|
||||
; CHECK-THUMB: pop {r0}
|
||||
|
||||
; CHECK-ARMV6-LABEL: test_cmpxchg_res_i8:
|
||||
; CHECK-ARMV6-NEXT: .fnstart
|
||||
; CHECK-ARMV6-NEXT: uxtb [[DESIRED:r[0-9]+]], r1
|
||||
; CHECK-ARMV6-NEXT: [[TRY:.LBB[0-9_]+]]:
|
||||
; CHECK-ARMV6-NEXT: ldrexb [[LD:r[0-9]+]], [r0]
|
||||
; CHECK-ARMV6-NEXT: mov [[RES:r[0-9]+]], #0
|
||||
; CHECK-ARMV6-NEXT: cmp [[LD]], [[DESIRED]]
|
||||
; CHECK-ARMV6-NEXT: bne [[END:.LBB[0-9_]+]]
|
||||
; CHECK-ARMV6-NEXT: strexb [[SUCCESS:r[0-9]+]], r2, [r0]
|
||||
; CHECK-ARMV6-NEXT: mov [[RES]], #1
|
||||
; CHECK-ARMV6-NEXT: cmp [[SUCCESS]], #0
|
||||
; CHECK-ARMV6-NEXT: bne [[TRY]]
|
||||
; CHECK-ARMV6-NEXT: [[END]]:
|
||||
; CHECK-ARMV6-NEXT: mov r0, [[RES]]
|
||||
; CHECK-ARMV6-NEXT: bx lr
|
||||
|
||||
; CHECK-THUMBV6-LABEL: test_cmpxchg_res_i8:
|
||||
; CHECK-THUMBV6: mov [[EXPECTED:r[0-9]+]], r1
|
||||
; CHECK-THUMBV6-NEXT: bl __sync_val_compare_and_swap_1
|
||||
; CHECK-THUMBV6-NEXT: mov [[RES:r[0-9]+]], r0
|
||||
; CHECK-THUMBV6-NEXT: movs r0, #1
|
||||
; CHECK-THUMBV6-NEXT: movs [[ZERO:r[0-9]+]], #0
|
||||
; CHECK-THUMBV6-NEXT: cmp [[RES]], [[EXPECTED]]
|
||||
; CHECK-THUMBV6-NEXT: beq [[END:.LBB[0-9_]+]]
|
||||
; CHECK-THUMBV6-NEXT: mov r0, [[ZERO]]
|
||||
; CHECK-THUMBV6-NEXT: [[END]]:
|
||||
; CHECK-THUMBV6-NEXT: pop {{.*}}pc}
|
||||
|
||||
; CHECK-ARMV7-LABEL: test_cmpxchg_res_i8:
|
||||
; CHECK-ARMV7-NEXT: .fnstart
|
||||
; CHECK-ARMV7-NEXT: uxtb [[DESIRED:r[0-9]+]], r1
|
||||
|
Loading…
x
Reference in New Issue
Block a user