Atomic load/store on ARM/Thumb.
[oota-llvm.git] / test / CodeGen / ARM / atomic-load-store.ll
1 ; RUN: llc < %s -mtriple=armv7-apple-ios | FileCheck %s -check-prefix=ARM
2 ; RUN: llc < %s -mtriple=thumbv7-apple-ios | FileCheck %s -check-prefix=THUMBTWO
3 ; RUN: llc < %s -mtriple=thumbv6-apple-ios | FileCheck %s -check-prefix=THUMBONE
4
5 define void @test1(i32* %ptr, i32 %val1) {
6 ; ARM: test1
7 ; ARM: dmb ish
8 ; ARM-NEXT: str
9 ; ARM-NEXT: dmb ish
10 ; THUMBONE: test1
11 ; THUMBONE: __sync_lock_test_and_set_4
12 ; THUMBTWO: test1
13 ; THUMBTWO: dmb ish
14 ; THUMBTWO-NEXT: str
15 ; THUMBTWO-NEXT: dmb ish
16   store atomic i32 %val1, i32* %ptr seq_cst, align 4
17   ret void
18 }
19
20 define i32 @test2(i32* %ptr) {
21 ; ARM: test2
22 ; ARM: ldr
23 ; ARM-NEXT: dmb ish
24 ; THUMBONE: test2
25 ; THUMBONE: __sync_val_compare_and_swap_4
26 ; THUMBTWO: test2
27 ; THUMBTWO: ldr
28 ; THUMBTWO-NEXT: dmb ish
29   %val = load atomic i32* %ptr seq_cst, align 4
30   ret i32 %val
31 }