Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(141)

Side by Side Diff: test/Transforms/NaCl/atomic/lock_.ll

Issue 791053006: Add support for acquire, release, and acq_rel memory ordering in PNaCl (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-llvm.git@master
Patch Set: Nits. Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 ; RUN: opt -nacl-rewrite-atomics -S < %s | FileCheck %s 1 ; RUN: opt -nacl-rewrite-atomics -S < %s | FileCheck %s
2 2
3 ; Each of these tests validates that the corresponding legacy GCC-style builtins 3 ; Each of these tests validates that the corresponding legacy GCC-style builtins
4 ; are properly rewritten to NaCl atomic builtins. Only the GCC-style builtins 4 ; are properly rewritten to NaCl atomic builtins. Only the GCC-style builtins
5 ; that have corresponding primitives in C11/C++11 and which emit different code 5 ; that have corresponding primitives in C11/C++11 and which emit different code
6 ; are tested. These legacy GCC-builtins only support sequential-consistency 6 ; are tested. These legacy GCC-builtins only support sequential-consistency
7 ; (enum value 6). 7 ; (enum value 6).
8 ; 8 ;
9 ; test_* tests the corresponding __sync_* builtin. See: 9 ; test_* tests the corresponding __sync_* builtin. See:
10 ; http://gcc.gnu.org/onlinedocs/gcc-4.8.1/gcc/_005f_005fsync-Builtins.html 10 ; http://gcc.gnu.org/onlinedocs/gcc-4.8.1/gcc/_005f_005fsync-Builtins.html
11 11
12 target datalayout = "p:32:32:32" 12 target datalayout = "p:32:32:32"
13 13
14 ; CHECK-LABEL: @test_lock_test_and_set_i8 14 ; CHECK-LABEL: @test_lock_test_and_set_i8
15 define zeroext i8 @test_lock_test_and_set_i8(i8* %ptr, i8 zeroext %value) { 15 define zeroext i8 @test_lock_test_and_set_i8(i8* %ptr, i8 zeroext %value) {
16 ; CHECK-NEXT: %res = call i8 @llvm.nacl.atomic.rmw.i8(i32 6, i8* %ptr, i8 %val ue, i32 6) 16 ; CHECK-NEXT: %res = call i8 @llvm.nacl.atomic.rmw.i8(i32 6, i8* %ptr, i8 %val ue, i32 6)
17 %res = atomicrmw xchg i8* %ptr, i8 %value seq_cst 17 %res = atomicrmw xchg i8* %ptr, i8 %value seq_cst
18 ret i8 %res ; CHECK-NEXT: ret i8 %res 18 ret i8 %res ; CHECK-NEXT: ret i8 %res
19 } 19 }
20 20
21 ; CHECK-LABEL: @test_lock_release_i8 21 ; CHECK-LABEL: @test_lock_release_i8
22 define void @test_lock_release_i8(i8* %ptr) { 22 define void @test_lock_release_i8(i8* %ptr) {
23 ; Note that the 'release' was changed to a 'seq_cst'. 23 ; CHECK-NEXT: call void @llvm.nacl.atomic.store.i8(i8 0, i8* %ptr, i32 4)
24 ; CHECK-NEXT: call void @llvm.nacl.atomic.store.i8(i8 0, i8* %ptr, i32 6)
25 store atomic i8 0, i8* %ptr release, align 1 24 store atomic i8 0, i8* %ptr release, align 1
26 ret void ; CHECK-NEXT: ret void 25 ret void ; CHECK-NEXT: ret void
27 } 26 }
28 27
29 ; CHECK-LABEL: @test_lock_test_and_set_i16 28 ; CHECK-LABEL: @test_lock_test_and_set_i16
30 define zeroext i16 @test_lock_test_and_set_i16(i16* %ptr, i16 zeroext %value) { 29 define zeroext i16 @test_lock_test_and_set_i16(i16* %ptr, i16 zeroext %value) {
31 ; CHECK-NEXT: %res = call i16 @llvm.nacl.atomic.rmw.i16(i32 6, i16* %ptr, i16 %value, i32 6) 30 ; CHECK-NEXT: %res = call i16 @llvm.nacl.atomic.rmw.i16(i32 6, i16* %ptr, i16 %value, i32 6)
32 %res = atomicrmw xchg i16* %ptr, i16 %value seq_cst 31 %res = atomicrmw xchg i16* %ptr, i16 %value seq_cst
33 ret i16 %res ; CHECK-NEXT: ret i16 %res 32 ret i16 %res ; CHECK-NEXT: ret i16 %res
34 } 33 }
35 34
36 ; CHECK-LABEL: @test_lock_release_i16 35 ; CHECK-LABEL: @test_lock_release_i16
37 define void @test_lock_release_i16(i16* %ptr) { 36 define void @test_lock_release_i16(i16* %ptr) {
38 ; Note that the 'release' was changed to a 'seq_cst'. 37 ; CHECK-NEXT: call void @llvm.nacl.atomic.store.i16(i16 0, i16* %ptr, i32 4)
39 ; CHECK-NEXT: call void @llvm.nacl.atomic.store.i16(i16 0, i16* %ptr, i32 6)
40 store atomic i16 0, i16* %ptr release, align 2 38 store atomic i16 0, i16* %ptr release, align 2
41 ret void ; CHECK-NEXT: ret void 39 ret void ; CHECK-NEXT: ret void
42 } 40 }
43 41
44 ; CHECK-LABEL: @test_lock_test_and_set_i32 42 ; CHECK-LABEL: @test_lock_test_and_set_i32
45 define i32 @test_lock_test_and_set_i32(i32* %ptr, i32 %value) { 43 define i32 @test_lock_test_and_set_i32(i32* %ptr, i32 %value) {
46 ; CHECK-NEXT: %res = call i32 @llvm.nacl.atomic.rmw.i32(i32 6, i32* %ptr, i32 %value, i32 6) 44 ; CHECK-NEXT: %res = call i32 @llvm.nacl.atomic.rmw.i32(i32 6, i32* %ptr, i32 %value, i32 6)
47 %res = atomicrmw xchg i32* %ptr, i32 %value seq_cst 45 %res = atomicrmw xchg i32* %ptr, i32 %value seq_cst
48 ret i32 %res ; CHECK-NEXT: ret i32 %res 46 ret i32 %res ; CHECK-NEXT: ret i32 %res
49 } 47 }
50 48
51 ; CHECK-LABEL: @test_lock_release_i32 49 ; CHECK-LABEL: @test_lock_release_i32
52 define void @test_lock_release_i32(i32* %ptr) { 50 define void @test_lock_release_i32(i32* %ptr) {
53 ; Note that the 'release' was changed to a 'seq_cst'. 51 ; CHECK-NEXT: call void @llvm.nacl.atomic.store.i32(i32 0, i32* %ptr, i32 4)
54 ; CHECK-NEXT: call void @llvm.nacl.atomic.store.i32(i32 0, i32* %ptr, i32 6)
55 store atomic i32 0, i32* %ptr release, align 4 52 store atomic i32 0, i32* %ptr release, align 4
56 ret void ; CHECK-NEXT: ret void 53 ret void ; CHECK-NEXT: ret void
57 } 54 }
58 55
59 ; CHECK-LABEL: @test_lock_test_and_set_i64 56 ; CHECK-LABEL: @test_lock_test_and_set_i64
60 define i64 @test_lock_test_and_set_i64(i64* %ptr, i64 %value) { 57 define i64 @test_lock_test_and_set_i64(i64* %ptr, i64 %value) {
61 ; CHECK-NEXT: %res = call i64 @llvm.nacl.atomic.rmw.i64(i32 6, i64* %ptr, i64 %value, i32 6) 58 ; CHECK-NEXT: %res = call i64 @llvm.nacl.atomic.rmw.i64(i32 6, i64* %ptr, i64 %value, i32 6)
62 %res = atomicrmw xchg i64* %ptr, i64 %value seq_cst 59 %res = atomicrmw xchg i64* %ptr, i64 %value seq_cst
63 ret i64 %res ; CHECK-NEXT: ret i64 %res 60 ret i64 %res ; CHECK-NEXT: ret i64 %res
64 } 61 }
65 62
66 ; CHECK-LABEL: @test_lock_release_i64 63 ; CHECK-LABEL: @test_lock_release_i64
67 define void @test_lock_release_i64(i64* %ptr) { 64 define void @test_lock_release_i64(i64* %ptr) {
68 ; Note that the 'release' was changed to a 'seq_cst'. 65 ; CHECK-NEXT: call void @llvm.nacl.atomic.store.i64(i64 0, i64* %ptr, i32 4)
69 ; CHECK-NEXT: call void @llvm.nacl.atomic.store.i64(i64 0, i64* %ptr, i32 6)
70 store atomic i64 0, i64* %ptr release, align 8 66 store atomic i64 0, i64* %ptr release, align 8
71 ret void ; CHECK-NEXT: ret void 67 ret void ; CHECK-NEXT: ret void
72 } 68 }
OLDNEW
« no previous file with comments | « test/Transforms/NaCl/atomic/atomic_others.ll ('k') | test/Transforms/NaCl/resolve-pnacl-intrinsics.ll » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698