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

Side by Side Diff: tests_lit/reader_tests/nacl-atomic-intrinsics.ll

Issue 1387963002: Make sure that all globals are internal, except for "start" functions. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Fix new tests. Created 5 years, 2 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
« no previous file with comments | « tests_lit/reader_tests/load.ll ('k') | tests_lit/reader_tests/nacl-other-intrinsics.ll » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 ; Test parsing NaCl atomic instructions. 1 ; Test parsing NaCl atomic instructions.
2 2
3 ; RUN: %p2i -i %s --insts | FileCheck %s 3 ; RUN: %p2i -i %s --insts | FileCheck %s
4 ; RUN: %if --need=allow_disable_ir_gen --command \ 4 ; RUN: %if --need=allow_disable_ir_gen --command \
5 ; RUN: %p2i -i %s --args -notranslate -timing -no-ir-gen \ 5 ; RUN: %p2i -i %s --args -notranslate -timing -no-ir-gen \
6 ; RUN: | %if --need=allow_disable_ir_gen --command \ 6 ; RUN: | %if --need=allow_disable_ir_gen --command \
7 ; RUN: FileCheck --check-prefix=NOIR %s 7 ; RUN: FileCheck --check-prefix=NOIR %s
8 8
9 declare i8 @llvm.nacl.atomic.load.i8(i8*, i32) 9 declare i8 @llvm.nacl.atomic.load.i8(i8*, i32)
10 declare i16 @llvm.nacl.atomic.load.i16(i16*, i32) 10 declare i16 @llvm.nacl.atomic.load.i16(i16*, i32)
(...skipping 10 matching lines...) Expand all
21 declare i8 @llvm.nacl.atomic.cmpxchg.i8(i8*, i8, i8, i32, i32) 21 declare i8 @llvm.nacl.atomic.cmpxchg.i8(i8*, i8, i8, i32, i32)
22 declare i16 @llvm.nacl.atomic.cmpxchg.i16(i16*, i16, i16, i32, i32) 22 declare i16 @llvm.nacl.atomic.cmpxchg.i16(i16*, i16, i16, i32, i32)
23 declare i32 @llvm.nacl.atomic.cmpxchg.i32(i32*, i32, i32, i32, i32) 23 declare i32 @llvm.nacl.atomic.cmpxchg.i32(i32*, i32, i32, i32, i32)
24 declare i64 @llvm.nacl.atomic.cmpxchg.i64(i64*, i64, i64, i32, i32) 24 declare i64 @llvm.nacl.atomic.cmpxchg.i64(i64*, i64, i64, i32, i32)
25 declare void @llvm.nacl.atomic.fence(i32) 25 declare void @llvm.nacl.atomic.fence(i32)
26 declare void @llvm.nacl.atomic.fence.all() 26 declare void @llvm.nacl.atomic.fence.all()
27 declare i1 @llvm.nacl.atomic.is.lock.free(i32, i8*) 27 declare i1 @llvm.nacl.atomic.is.lock.free(i32, i8*)
28 28
29 ;;; Load 29 ;;; Load
30 30
31 define i32 @test_atomic_load_8(i32 %iptr) { 31 define internal i32 @test_atomic_load_8(i32 %iptr) {
32 entry: 32 entry:
33 %ptr = inttoptr i32 %iptr to i8* 33 %ptr = inttoptr i32 %iptr to i8*
34 ; parameter value "6" is for the sequential consistency memory order. 34 ; parameter value "6" is for the sequential consistency memory order.
35 %i = call i8 @llvm.nacl.atomic.load.i8(i8* %ptr, i32 6) 35 %i = call i8 @llvm.nacl.atomic.load.i8(i8* %ptr, i32 6)
36 %r = zext i8 %i to i32 36 %r = zext i8 %i to i32
37 ret i32 %r 37 ret i32 %r
38 } 38 }
39 39
40 ; CHECK: define i32 @test_atomic_load_8(i32 %iptr) { 40 ; CHECK: define internal i32 @test_atomic_load_8(i32 %iptr) {
41 ; CHECK-NEXT: entry: 41 ; CHECK-NEXT: entry:
42 ; CHECK-NEXT: %i = call i8 @llvm.nacl.atomic.load.i8(i32 %iptr, i32 6) 42 ; CHECK-NEXT: %i = call i8 @llvm.nacl.atomic.load.i8(i32 %iptr, i32 6)
43 ; CHECK-NEXT: %r = zext i8 %i to i32 43 ; CHECK-NEXT: %r = zext i8 %i to i32
44 ; CHECK-NEXT: ret i32 %r 44 ; CHECK-NEXT: ret i32 %r
45 ; CHECK-NEXT: } 45 ; CHECK-NEXT: }
46 46
47 define i32 @test_atomic_load_16(i32 %iptr) { 47 define internal i32 @test_atomic_load_16(i32 %iptr) {
48 entry: 48 entry:
49 %ptr = inttoptr i32 %iptr to i16* 49 %ptr = inttoptr i32 %iptr to i16*
50 %i = call i16 @llvm.nacl.atomic.load.i16(i16* %ptr, i32 6) 50 %i = call i16 @llvm.nacl.atomic.load.i16(i16* %ptr, i32 6)
51 %r = zext i16 %i to i32 51 %r = zext i16 %i to i32
52 ret i32 %r 52 ret i32 %r
53 } 53 }
54 54
55 ; CHECK-NEXT: define i32 @test_atomic_load_16(i32 %iptr) { 55 ; CHECK-NEXT: define internal i32 @test_atomic_load_16(i32 %iptr) {
56 ; CHECK-NEXT: entry: 56 ; CHECK-NEXT: entry:
57 ; CHECK-NEXT: %i = call i16 @llvm.nacl.atomic.load.i16(i32 %iptr, i32 6) 57 ; CHECK-NEXT: %i = call i16 @llvm.nacl.atomic.load.i16(i32 %iptr, i32 6)
58 ; CHECK-NEXT: %r = zext i16 %i to i32 58 ; CHECK-NEXT: %r = zext i16 %i to i32
59 ; CHECK-NEXT: ret i32 %r 59 ; CHECK-NEXT: ret i32 %r
60 ; CHECK-NEXT: } 60 ; CHECK-NEXT: }
61 61
62 define i32 @test_atomic_load_32(i32 %iptr) { 62 define internal i32 @test_atomic_load_32(i32 %iptr) {
63 entry: 63 entry:
64 %ptr = inttoptr i32 %iptr to i32* 64 %ptr = inttoptr i32 %iptr to i32*
65 %r = call i32 @llvm.nacl.atomic.load.i32(i32* %ptr, i32 6) 65 %r = call i32 @llvm.nacl.atomic.load.i32(i32* %ptr, i32 6)
66 ret i32 %r 66 ret i32 %r
67 } 67 }
68 68
69 ; CHECK-NEXT: define i32 @test_atomic_load_32(i32 %iptr) { 69 ; CHECK-NEXT: define internal i32 @test_atomic_load_32(i32 %iptr) {
70 ; CHECK-NEXT: entry: 70 ; CHECK-NEXT: entry:
71 ; CHECK-NEXT: %r = call i32 @llvm.nacl.atomic.load.i32(i32 %iptr, i32 6) 71 ; CHECK-NEXT: %r = call i32 @llvm.nacl.atomic.load.i32(i32 %iptr, i32 6)
72 ; CHECK-NEXT: ret i32 %r 72 ; CHECK-NEXT: ret i32 %r
73 ; CHECK-NEXT: } 73 ; CHECK-NEXT: }
74 74
75 define i64 @test_atomic_load_64(i32 %iptr) { 75 define internal i64 @test_atomic_load_64(i32 %iptr) {
76 entry: 76 entry:
77 %ptr = inttoptr i32 %iptr to i64* 77 %ptr = inttoptr i32 %iptr to i64*
78 %r = call i64 @llvm.nacl.atomic.load.i64(i64* %ptr, i32 6) 78 %r = call i64 @llvm.nacl.atomic.load.i64(i64* %ptr, i32 6)
79 ret i64 %r 79 ret i64 %r
80 } 80 }
81 81
82 ; CHECK-NEXT: define i64 @test_atomic_load_64(i32 %iptr) { 82 ; CHECK-NEXT: define internal i64 @test_atomic_load_64(i32 %iptr) {
83 ; CHECK-NEXT: entry: 83 ; CHECK-NEXT: entry:
84 ; CHECK-NEXT: %r = call i64 @llvm.nacl.atomic.load.i64(i32 %iptr, i32 6) 84 ; CHECK-NEXT: %r = call i64 @llvm.nacl.atomic.load.i64(i32 %iptr, i32 6)
85 ; CHECK-NEXT: ret i64 %r 85 ; CHECK-NEXT: ret i64 %r
86 ; CHECK-NEXT: } 86 ; CHECK-NEXT: }
87 87
88 ;;; Store 88 ;;; Store
89 89
90 define void @test_atomic_store_8(i32 %iptr, i32 %v) { 90 define internal void @test_atomic_store_8(i32 %iptr, i32 %v) {
91 entry: 91 entry:
92 %truncv = trunc i32 %v to i8 92 %truncv = trunc i32 %v to i8
93 %ptr = inttoptr i32 %iptr to i8* 93 %ptr = inttoptr i32 %iptr to i8*
94 call void @llvm.nacl.atomic.store.i8(i8 %truncv, i8* %ptr, i32 6) 94 call void @llvm.nacl.atomic.store.i8(i8 %truncv, i8* %ptr, i32 6)
95 ret void 95 ret void
96 } 96 }
97 97
98 ; CHECK-NEXT: define void @test_atomic_store_8(i32 %iptr, i32 %v) { 98 ; CHECK-NEXT: define internal void @test_atomic_store_8(i32 %iptr, i32 %v) {
99 ; CHECK-NEXT: entry: 99 ; CHECK-NEXT: entry:
100 ; CHECK-NEXT: %truncv = trunc i32 %v to i8 100 ; CHECK-NEXT: %truncv = trunc i32 %v to i8
101 ; CHECK-NEXT: call void @llvm.nacl.atomic.store.i8(i8 %truncv, i32 %iptr, i32 6) 101 ; CHECK-NEXT: call void @llvm.nacl.atomic.store.i8(i8 %truncv, i32 %iptr, i32 6)
102 ; CHECK-NEXT: ret void 102 ; CHECK-NEXT: ret void
103 ; CHECK-NEXT: } 103 ; CHECK-NEXT: }
104 104
105 define void @test_atomic_store_16(i32 %iptr, i32 %v) { 105 define internal void @test_atomic_store_16(i32 %iptr, i32 %v) {
106 entry: 106 entry:
107 %truncv = trunc i32 %v to i16 107 %truncv = trunc i32 %v to i16
108 %ptr = inttoptr i32 %iptr to i16* 108 %ptr = inttoptr i32 %iptr to i16*
109 call void @llvm.nacl.atomic.store.i16(i16 %truncv, i16* %ptr, i32 6) 109 call void @llvm.nacl.atomic.store.i16(i16 %truncv, i16* %ptr, i32 6)
110 ret void 110 ret void
111 } 111 }
112 112
113 ; CHECK-NEXT: define void @test_atomic_store_16(i32 %iptr, i32 %v) { 113 ; CHECK-NEXT: define internal void @test_atomic_store_16(i32 %iptr, i32 %v) {
114 ; CHECK-NEXT: entry: 114 ; CHECK-NEXT: entry:
115 ; CHECK-NEXT: %truncv = trunc i32 %v to i16 115 ; CHECK-NEXT: %truncv = trunc i32 %v to i16
116 ; CHECK-NEXT: call void @llvm.nacl.atomic.store.i16(i16 %truncv, i32 %iptr, i3 2 6) 116 ; CHECK-NEXT: call void @llvm.nacl.atomic.store.i16(i16 %truncv, i32 %iptr, i3 2 6)
117 ; CHECK-NEXT: ret void 117 ; CHECK-NEXT: ret void
118 ; CHECK-NEXT: } 118 ; CHECK-NEXT: }
119 119
120 define void @test_atomic_store_32(i32 %iptr, i32 %v) { 120 define internal void @test_atomic_store_32(i32 %iptr, i32 %v) {
121 entry: 121 entry:
122 %ptr = inttoptr i32 %iptr to i32* 122 %ptr = inttoptr i32 %iptr to i32*
123 call void @llvm.nacl.atomic.store.i32(i32 %v, i32* %ptr, i32 6) 123 call void @llvm.nacl.atomic.store.i32(i32 %v, i32* %ptr, i32 6)
124 ret void 124 ret void
125 } 125 }
126 126
127 ; CHECK-NEXT: define void @test_atomic_store_32(i32 %iptr, i32 %v) { 127 ; CHECK-NEXT: define internal void @test_atomic_store_32(i32 %iptr, i32 %v) {
128 ; CHECK-NEXT: entry: 128 ; CHECK-NEXT: entry:
129 ; CHECK-NEXT: call void @llvm.nacl.atomic.store.i32(i32 %v, i32 %iptr, i32 6) 129 ; CHECK-NEXT: call void @llvm.nacl.atomic.store.i32(i32 %v, i32 %iptr, i32 6)
130 ; CHECK-NEXT: ret void 130 ; CHECK-NEXT: ret void
131 ; CHECK-NEXT: } 131 ; CHECK-NEXT: }
132 132
133 define void @test_atomic_store_64(i32 %iptr, i64 %v) { 133 define internal void @test_atomic_store_64(i32 %iptr, i64 %v) {
134 entry: 134 entry:
135 %ptr = inttoptr i32 %iptr to i64* 135 %ptr = inttoptr i32 %iptr to i64*
136 call void @llvm.nacl.atomic.store.i64(i64 %v, i64* %ptr, i32 6) 136 call void @llvm.nacl.atomic.store.i64(i64 %v, i64* %ptr, i32 6)
137 ret void 137 ret void
138 } 138 }
139 139
140 ; CHECK-NEXT: define void @test_atomic_store_64(i32 %iptr, i64 %v) { 140 ; CHECK-NEXT: define internal void @test_atomic_store_64(i32 %iptr, i64 %v) {
141 ; CHECK-NEXT: entry: 141 ; CHECK-NEXT: entry:
142 ; CHECK-NEXT: call void @llvm.nacl.atomic.store.i64(i64 %v, i32 %iptr, i32 6) 142 ; CHECK-NEXT: call void @llvm.nacl.atomic.store.i64(i64 %v, i32 %iptr, i32 6)
143 ; CHECK-NEXT: ret void 143 ; CHECK-NEXT: ret void
144 ; CHECK-NEXT: } 144 ; CHECK-NEXT: }
145 145
146 define void @test_atomic_store_64_const(i32 %iptr) { 146 define internal void @test_atomic_store_64_const(i32 %iptr) {
147 entry: 147 entry:
148 %ptr = inttoptr i32 %iptr to i64* 148 %ptr = inttoptr i32 %iptr to i64*
149 call void @llvm.nacl.atomic.store.i64(i64 12345678901234, i64* %ptr, i32 6) 149 call void @llvm.nacl.atomic.store.i64(i64 12345678901234, i64* %ptr, i32 6)
150 ret void 150 ret void
151 } 151 }
152 152
153 ; CHECK-NEXT: define void @test_atomic_store_64_const(i32 %iptr) { 153 ; CHECK-NEXT: define internal void @test_atomic_store_64_const(i32 %iptr) {
154 ; CHECK-NEXT: entry: 154 ; CHECK-NEXT: entry:
155 ; CHECK-NEXT: call void @llvm.nacl.atomic.store.i64(i64 12345678901234, i32 %i ptr, i32 6) 155 ; CHECK-NEXT: call void @llvm.nacl.atomic.store.i64(i64 12345678901234, i32 %i ptr, i32 6)
156 ; CHECK-NEXT: ret void 156 ; CHECK-NEXT: ret void
157 ; CHECK-NEXT: } 157 ; CHECK-NEXT: }
158 158
159 ;;; RMW 159 ;;; RMW
160 160
161 ;; add 161 ;; add
162 162
163 define i32 @test_atomic_rmw_add_8(i32 %iptr, i32 %v) { 163 define internal i32 @test_atomic_rmw_add_8(i32 %iptr, i32 %v) {
164 entry: 164 entry:
165 %trunc = trunc i32 %v to i8 165 %trunc = trunc i32 %v to i8
166 %ptr = inttoptr i32 %iptr to i8* 166 %ptr = inttoptr i32 %iptr to i8*
167 ; "1" is an atomic add, and "6" is sequential consistency. 167 ; "1" is an atomic add, and "6" is sequential consistency.
168 %a = call i8 @llvm.nacl.atomic.rmw.i8(i32 1, i8* %ptr, i8 %trunc, i32 6) 168 %a = call i8 @llvm.nacl.atomic.rmw.i8(i32 1, i8* %ptr, i8 %trunc, i32 6)
169 %a_ext = zext i8 %a to i32 169 %a_ext = zext i8 %a to i32
170 ret i32 %a_ext 170 ret i32 %a_ext
171 } 171 }
172 172
173 ; CHECK-NEXT: define i32 @test_atomic_rmw_add_8(i32 %iptr, i32 %v) { 173 ; CHECK-NEXT: define internal i32 @test_atomic_rmw_add_8(i32 %iptr, i32 %v) {
174 ; CHECK-NEXT: entry: 174 ; CHECK-NEXT: entry:
175 ; CHECK-NEXT: %trunc = trunc i32 %v to i8 175 ; CHECK-NEXT: %trunc = trunc i32 %v to i8
176 ; CHECK-NEXT: %a = call i8 @llvm.nacl.atomic.rmw.i8(i32 1, i32 %iptr, i8 %trun c, i32 6) 176 ; CHECK-NEXT: %a = call i8 @llvm.nacl.atomic.rmw.i8(i32 1, i32 %iptr, i8 %trun c, i32 6)
177 ; CHECK-NEXT: %a_ext = zext i8 %a to i32 177 ; CHECK-NEXT: %a_ext = zext i8 %a to i32
178 ; CHECK-NEXT: ret i32 %a_ext 178 ; CHECK-NEXT: ret i32 %a_ext
179 ; CHECK-NEXT: } 179 ; CHECK-NEXT: }
180 180
181 define i32 @test_atomic_rmw_add_16(i32 %iptr, i32 %v) { 181 define internal i32 @test_atomic_rmw_add_16(i32 %iptr, i32 %v) {
182 entry: 182 entry:
183 %trunc = trunc i32 %v to i16 183 %trunc = trunc i32 %v to i16
184 %ptr = inttoptr i32 %iptr to i16* 184 %ptr = inttoptr i32 %iptr to i16*
185 %a = call i16 @llvm.nacl.atomic.rmw.i16(i32 1, i16* %ptr, i16 %trunc, i32 6) 185 %a = call i16 @llvm.nacl.atomic.rmw.i16(i32 1, i16* %ptr, i16 %trunc, i32 6)
186 %a_ext = zext i16 %a to i32 186 %a_ext = zext i16 %a to i32
187 ret i32 %a_ext 187 ret i32 %a_ext
188 } 188 }
189 189
190 ; CHECK-NEXT: define i32 @test_atomic_rmw_add_16(i32 %iptr, i32 %v) { 190 ; CHECK-NEXT: define internal i32 @test_atomic_rmw_add_16(i32 %iptr, i32 %v) {
191 ; CHECK-NEXT: entry: 191 ; CHECK-NEXT: entry:
192 ; CHECK-NEXT: %trunc = trunc i32 %v to i16 192 ; CHECK-NEXT: %trunc = trunc i32 %v to i16
193 ; CHECK-NEXT: %a = call i16 @llvm.nacl.atomic.rmw.i16(i32 1, i32 %iptr, i16 %t runc, i32 6) 193 ; CHECK-NEXT: %a = call i16 @llvm.nacl.atomic.rmw.i16(i32 1, i32 %iptr, i16 %t runc, i32 6)
194 ; CHECK-NEXT: %a_ext = zext i16 %a to i32 194 ; CHECK-NEXT: %a_ext = zext i16 %a to i32
195 ; CHECK-NEXT: ret i32 %a_ext 195 ; CHECK-NEXT: ret i32 %a_ext
196 ; CHECK-NEXT: } 196 ; CHECK-NEXT: }
197 197
198 define i32 @test_atomic_rmw_add_32(i32 %iptr, i32 %v) { 198 define internal i32 @test_atomic_rmw_add_32(i32 %iptr, i32 %v) {
199 entry: 199 entry:
200 %ptr = inttoptr i32 %iptr to i32* 200 %ptr = inttoptr i32 %iptr to i32*
201 %a = call i32 @llvm.nacl.atomic.rmw.i32(i32 1, i32* %ptr, i32 %v, i32 6) 201 %a = call i32 @llvm.nacl.atomic.rmw.i32(i32 1, i32* %ptr, i32 %v, i32 6)
202 ret i32 %a 202 ret i32 %a
203 } 203 }
204 204
205 ; CHECK-NEXT: define i32 @test_atomic_rmw_add_32(i32 %iptr, i32 %v) { 205 ; CHECK-NEXT: define internal i32 @test_atomic_rmw_add_32(i32 %iptr, i32 %v) {
206 ; CHECK-NEXT: entry: 206 ; CHECK-NEXT: entry:
207 ; CHECK-NEXT: %a = call i32 @llvm.nacl.atomic.rmw.i32(i32 1, i32 %iptr, i32 %v , i32 6) 207 ; CHECK-NEXT: %a = call i32 @llvm.nacl.atomic.rmw.i32(i32 1, i32 %iptr, i32 %v , i32 6)
208 ; CHECK-NEXT: ret i32 %a 208 ; CHECK-NEXT: ret i32 %a
209 ; CHECK-NEXT: } 209 ; CHECK-NEXT: }
210 210
211 define i64 @test_atomic_rmw_add_64(i32 %iptr, i64 %v) { 211 define internal i64 @test_atomic_rmw_add_64(i32 %iptr, i64 %v) {
212 entry: 212 entry:
213 %ptr = inttoptr i32 %iptr to i64* 213 %ptr = inttoptr i32 %iptr to i64*
214 %a = call i64 @llvm.nacl.atomic.rmw.i64(i32 1, i64* %ptr, i64 %v, i32 6) 214 %a = call i64 @llvm.nacl.atomic.rmw.i64(i32 1, i64* %ptr, i64 %v, i32 6)
215 ret i64 %a 215 ret i64 %a
216 } 216 }
217 217
218 ; CHECK-NEXT: define i64 @test_atomic_rmw_add_64(i32 %iptr, i64 %v) { 218 ; CHECK-NEXT: define internal i64 @test_atomic_rmw_add_64(i32 %iptr, i64 %v) {
219 ; CHECK-NEXT: entry: 219 ; CHECK-NEXT: entry:
220 ; CHECK-NEXT: %a = call i64 @llvm.nacl.atomic.rmw.i64(i32 1, i32 %iptr, i64 %v , i32 6) 220 ; CHECK-NEXT: %a = call i64 @llvm.nacl.atomic.rmw.i64(i32 1, i32 %iptr, i64 %v , i32 6)
221 ; CHECK-NEXT: ret i64 %a 221 ; CHECK-NEXT: ret i64 %a
222 ; CHECK-NEXT: } 222 ; CHECK-NEXT: }
223 223
224 ;; sub 224 ;; sub
225 225
226 define i32 @test_atomic_rmw_sub_8(i32 %iptr, i32 %v) { 226 define internal i32 @test_atomic_rmw_sub_8(i32 %iptr, i32 %v) {
227 entry: 227 entry:
228 %trunc = trunc i32 %v to i8 228 %trunc = trunc i32 %v to i8
229 %ptr = inttoptr i32 %iptr to i8* 229 %ptr = inttoptr i32 %iptr to i8*
230 %a = call i8 @llvm.nacl.atomic.rmw.i8(i32 2, i8* %ptr, i8 %trunc, i32 6) 230 %a = call i8 @llvm.nacl.atomic.rmw.i8(i32 2, i8* %ptr, i8 %trunc, i32 6)
231 %a_ext = zext i8 %a to i32 231 %a_ext = zext i8 %a to i32
232 ret i32 %a_ext 232 ret i32 %a_ext
233 } 233 }
234 234
235 ; CHECK-NEXT: define i32 @test_atomic_rmw_sub_8(i32 %iptr, i32 %v) { 235 ; CHECK-NEXT: define internal i32 @test_atomic_rmw_sub_8(i32 %iptr, i32 %v) {
236 ; CHECK-NEXT: entry: 236 ; CHECK-NEXT: entry:
237 ; CHECK-NEXT: %trunc = trunc i32 %v to i8 237 ; CHECK-NEXT: %trunc = trunc i32 %v to i8
238 ; CHECK-NEXT: %a = call i8 @llvm.nacl.atomic.rmw.i8(i32 2, i32 %iptr, i8 %trun c, i32 6) 238 ; CHECK-NEXT: %a = call i8 @llvm.nacl.atomic.rmw.i8(i32 2, i32 %iptr, i8 %trun c, i32 6)
239 ; CHECK-NEXT: %a_ext = zext i8 %a to i32 239 ; CHECK-NEXT: %a_ext = zext i8 %a to i32
240 ; CHECK-NEXT: ret i32 %a_ext 240 ; CHECK-NEXT: ret i32 %a_ext
241 ; CHECK-NEXT: } 241 ; CHECK-NEXT: }
242 242
243 define i32 @test_atomic_rmw_sub_16(i32 %iptr, i32 %v) { 243 define internal i32 @test_atomic_rmw_sub_16(i32 %iptr, i32 %v) {
244 entry: 244 entry:
245 %trunc = trunc i32 %v to i16 245 %trunc = trunc i32 %v to i16
246 %ptr = inttoptr i32 %iptr to i16* 246 %ptr = inttoptr i32 %iptr to i16*
247 %a = call i16 @llvm.nacl.atomic.rmw.i16(i32 2, i16* %ptr, i16 %trunc, i32 6) 247 %a = call i16 @llvm.nacl.atomic.rmw.i16(i32 2, i16* %ptr, i16 %trunc, i32 6)
248 %a_ext = zext i16 %a to i32 248 %a_ext = zext i16 %a to i32
249 ret i32 %a_ext 249 ret i32 %a_ext
250 } 250 }
251 251
252 ; CHECK-NEXT: define i32 @test_atomic_rmw_sub_16(i32 %iptr, i32 %v) { 252 ; CHECK-NEXT: define internal i32 @test_atomic_rmw_sub_16(i32 %iptr, i32 %v) {
253 ; CHECK-NEXT: entry: 253 ; CHECK-NEXT: entry:
254 ; CHECK-NEXT: %trunc = trunc i32 %v to i16 254 ; CHECK-NEXT: %trunc = trunc i32 %v to i16
255 ; CHECK-NEXT: %a = call i16 @llvm.nacl.atomic.rmw.i16(i32 2, i32 %iptr, i16 %t runc, i32 6) 255 ; CHECK-NEXT: %a = call i16 @llvm.nacl.atomic.rmw.i16(i32 2, i32 %iptr, i16 %t runc, i32 6)
256 ; CHECK-NEXT: %a_ext = zext i16 %a to i32 256 ; CHECK-NEXT: %a_ext = zext i16 %a to i32
257 ; CHECK-NEXT: ret i32 %a_ext 257 ; CHECK-NEXT: ret i32 %a_ext
258 ; CHECK-NEXT: } 258 ; CHECK-NEXT: }
259 259
260 define i32 @test_atomic_rmw_sub_32(i32 %iptr, i32 %v) { 260 define internal i32 @test_atomic_rmw_sub_32(i32 %iptr, i32 %v) {
261 entry: 261 entry:
262 %ptr = inttoptr i32 %iptr to i32* 262 %ptr = inttoptr i32 %iptr to i32*
263 %a = call i32 @llvm.nacl.atomic.rmw.i32(i32 2, i32* %ptr, i32 %v, i32 6) 263 %a = call i32 @llvm.nacl.atomic.rmw.i32(i32 2, i32* %ptr, i32 %v, i32 6)
264 ret i32 %a 264 ret i32 %a
265 } 265 }
266 266
267 ; CHECK-NEXT: define i32 @test_atomic_rmw_sub_32(i32 %iptr, i32 %v) { 267 ; CHECK-NEXT: define internal i32 @test_atomic_rmw_sub_32(i32 %iptr, i32 %v) {
268 ; CHECK-NEXT: entry: 268 ; CHECK-NEXT: entry:
269 ; CHECK-NEXT: %a = call i32 @llvm.nacl.atomic.rmw.i32(i32 2, i32 %iptr, i32 %v , i32 6) 269 ; CHECK-NEXT: %a = call i32 @llvm.nacl.atomic.rmw.i32(i32 2, i32 %iptr, i32 %v , i32 6)
270 ; CHECK-NEXT: ret i32 %a 270 ; CHECK-NEXT: ret i32 %a
271 ; CHECK-NEXT: } 271 ; CHECK-NEXT: }
272 272
273 define i64 @test_atomic_rmw_sub_64(i32 %iptr, i64 %v) { 273 define internal i64 @test_atomic_rmw_sub_64(i32 %iptr, i64 %v) {
274 entry: 274 entry:
275 %ptr = inttoptr i32 %iptr to i64* 275 %ptr = inttoptr i32 %iptr to i64*
276 %a = call i64 @llvm.nacl.atomic.rmw.i64(i32 2, i64* %ptr, i64 %v, i32 6) 276 %a = call i64 @llvm.nacl.atomic.rmw.i64(i32 2, i64* %ptr, i64 %v, i32 6)
277 ret i64 %a 277 ret i64 %a
278 } 278 }
279 279
280 ; CHECK-NEXT: define i64 @test_atomic_rmw_sub_64(i32 %iptr, i64 %v) { 280 ; CHECK-NEXT: define internal i64 @test_atomic_rmw_sub_64(i32 %iptr, i64 %v) {
281 ; CHECK-NEXT: entry: 281 ; CHECK-NEXT: entry:
282 ; CHECK-NEXT: %a = call i64 @llvm.nacl.atomic.rmw.i64(i32 2, i32 %iptr, i64 %v , i32 6) 282 ; CHECK-NEXT: %a = call i64 @llvm.nacl.atomic.rmw.i64(i32 2, i32 %iptr, i64 %v , i32 6)
283 ; CHECK-NEXT: ret i64 %a 283 ; CHECK-NEXT: ret i64 %a
284 ; CHECK-NEXT: } 284 ; CHECK-NEXT: }
285 285
286 ;; or 286 ;; or
287 287
288 define i32 @test_atomic_rmw_or_8(i32 %iptr, i32 %v) { 288 define internal i32 @test_atomic_rmw_or_8(i32 %iptr, i32 %v) {
289 entry: 289 entry:
290 %trunc = trunc i32 %v to i8 290 %trunc = trunc i32 %v to i8
291 %ptr = inttoptr i32 %iptr to i8* 291 %ptr = inttoptr i32 %iptr to i8*
292 %a = call i8 @llvm.nacl.atomic.rmw.i8(i32 3, i8* %ptr, i8 %trunc, i32 6) 292 %a = call i8 @llvm.nacl.atomic.rmw.i8(i32 3, i8* %ptr, i8 %trunc, i32 6)
293 %a_ext = zext i8 %a to i32 293 %a_ext = zext i8 %a to i32
294 ret i32 %a_ext 294 ret i32 %a_ext
295 } 295 }
296 296
297 ; CHECK-NEXT: define i32 @test_atomic_rmw_or_8(i32 %iptr, i32 %v) { 297 ; CHECK-NEXT: define internal i32 @test_atomic_rmw_or_8(i32 %iptr, i32 %v) {
298 ; CHECK-NEXT: entry: 298 ; CHECK-NEXT: entry:
299 ; CHECK-NEXT: %trunc = trunc i32 %v to i8 299 ; CHECK-NEXT: %trunc = trunc i32 %v to i8
300 ; CHECK-NEXT: %a = call i8 @llvm.nacl.atomic.rmw.i8(i32 3, i32 %iptr, i8 %trun c, i32 6) 300 ; CHECK-NEXT: %a = call i8 @llvm.nacl.atomic.rmw.i8(i32 3, i32 %iptr, i8 %trun c, i32 6)
301 ; CHECK-NEXT: %a_ext = zext i8 %a to i32 301 ; CHECK-NEXT: %a_ext = zext i8 %a to i32
302 ; CHECK-NEXT: ret i32 %a_ext 302 ; CHECK-NEXT: ret i32 %a_ext
303 ; CHECK-NEXT: } 303 ; CHECK-NEXT: }
304 304
305 define i32 @test_atomic_rmw_or_16(i32 %iptr, i32 %v) { 305 define internal i32 @test_atomic_rmw_or_16(i32 %iptr, i32 %v) {
306 entry: 306 entry:
307 %trunc = trunc i32 %v to i16 307 %trunc = trunc i32 %v to i16
308 %ptr = inttoptr i32 %iptr to i16* 308 %ptr = inttoptr i32 %iptr to i16*
309 %a = call i16 @llvm.nacl.atomic.rmw.i16(i32 3, i16* %ptr, i16 %trunc, i32 6) 309 %a = call i16 @llvm.nacl.atomic.rmw.i16(i32 3, i16* %ptr, i16 %trunc, i32 6)
310 %a_ext = zext i16 %a to i32 310 %a_ext = zext i16 %a to i32
311 ret i32 %a_ext 311 ret i32 %a_ext
312 } 312 }
313 313
314 ; CHECK-NEXT: define i32 @test_atomic_rmw_or_16(i32 %iptr, i32 %v) { 314 ; CHECK-NEXT: define internal i32 @test_atomic_rmw_or_16(i32 %iptr, i32 %v) {
315 ; CHECK-NEXT: entry: 315 ; CHECK-NEXT: entry:
316 ; CHECK-NEXT: %trunc = trunc i32 %v to i16 316 ; CHECK-NEXT: %trunc = trunc i32 %v to i16
317 ; CHECK-NEXT: %a = call i16 @llvm.nacl.atomic.rmw.i16(i32 3, i32 %iptr, i16 %t runc, i32 6) 317 ; CHECK-NEXT: %a = call i16 @llvm.nacl.atomic.rmw.i16(i32 3, i32 %iptr, i16 %t runc, i32 6)
318 ; CHECK-NEXT: %a_ext = zext i16 %a to i32 318 ; CHECK-NEXT: %a_ext = zext i16 %a to i32
319 ; CHECK-NEXT: ret i32 %a_ext 319 ; CHECK-NEXT: ret i32 %a_ext
320 ; CHECK-NEXT: } 320 ; CHECK-NEXT: }
321 321
322 define i32 @test_atomic_rmw_or_32(i32 %iptr, i32 %v) { 322 define internal i32 @test_atomic_rmw_or_32(i32 %iptr, i32 %v) {
323 entry: 323 entry:
324 %ptr = inttoptr i32 %iptr to i32* 324 %ptr = inttoptr i32 %iptr to i32*
325 %a = call i32 @llvm.nacl.atomic.rmw.i32(i32 3, i32* %ptr, i32 %v, i32 6) 325 %a = call i32 @llvm.nacl.atomic.rmw.i32(i32 3, i32* %ptr, i32 %v, i32 6)
326 ret i32 %a 326 ret i32 %a
327 } 327 }
328 328
329 ; CHECK-NEXT: define i32 @test_atomic_rmw_or_32(i32 %iptr, i32 %v) { 329 ; CHECK-NEXT: define internal i32 @test_atomic_rmw_or_32(i32 %iptr, i32 %v) {
330 ; CHECK-NEXT: entry: 330 ; CHECK-NEXT: entry:
331 ; CHECK-NEXT: %a = call i32 @llvm.nacl.atomic.rmw.i32(i32 3, i32 %iptr, i32 %v , i32 6) 331 ; CHECK-NEXT: %a = call i32 @llvm.nacl.atomic.rmw.i32(i32 3, i32 %iptr, i32 %v , i32 6)
332 ; CHECK-NEXT: ret i32 %a 332 ; CHECK-NEXT: ret i32 %a
333 ; CHECK-NEXT: } 333 ; CHECK-NEXT: }
334 334
335 define i64 @test_atomic_rmw_or_64(i32 %iptr, i64 %v) { 335 define internal i64 @test_atomic_rmw_or_64(i32 %iptr, i64 %v) {
336 entry: 336 entry:
337 %ptr = inttoptr i32 %iptr to i64* 337 %ptr = inttoptr i32 %iptr to i64*
338 %a = call i64 @llvm.nacl.atomic.rmw.i64(i32 3, i64* %ptr, i64 %v, i32 6) 338 %a = call i64 @llvm.nacl.atomic.rmw.i64(i32 3, i64* %ptr, i64 %v, i32 6)
339 ret i64 %a 339 ret i64 %a
340 } 340 }
341 341
342 ; CHECK-NEXT: define i64 @test_atomic_rmw_or_64(i32 %iptr, i64 %v) { 342 ; CHECK-NEXT: define internal i64 @test_atomic_rmw_or_64(i32 %iptr, i64 %v) {
343 ; CHECK-NEXT: entry: 343 ; CHECK-NEXT: entry:
344 ; CHECK-NEXT: %a = call i64 @llvm.nacl.atomic.rmw.i64(i32 3, i32 %iptr, i64 %v , i32 6) 344 ; CHECK-NEXT: %a = call i64 @llvm.nacl.atomic.rmw.i64(i32 3, i32 %iptr, i64 %v , i32 6)
345 ; CHECK-NEXT: ret i64 %a 345 ; CHECK-NEXT: ret i64 %a
346 ; CHECK-NEXT: } 346 ; CHECK-NEXT: }
347 347
348 ;; and 348 ;; and
349 349
350 define i32 @test_atomic_rmw_and_8(i32 %iptr, i32 %v) { 350 define internal i32 @test_atomic_rmw_and_8(i32 %iptr, i32 %v) {
351 entry: 351 entry:
352 %trunc = trunc i32 %v to i8 352 %trunc = trunc i32 %v to i8
353 %ptr = inttoptr i32 %iptr to i8* 353 %ptr = inttoptr i32 %iptr to i8*
354 %a = call i8 @llvm.nacl.atomic.rmw.i8(i32 4, i8* %ptr, i8 %trunc, i32 6) 354 %a = call i8 @llvm.nacl.atomic.rmw.i8(i32 4, i8* %ptr, i8 %trunc, i32 6)
355 %a_ext = zext i8 %a to i32 355 %a_ext = zext i8 %a to i32
356 ret i32 %a_ext 356 ret i32 %a_ext
357 } 357 }
358 358
359 ; CHECK-NEXT: define i32 @test_atomic_rmw_and_8(i32 %iptr, i32 %v) { 359 ; CHECK-NEXT: define internal i32 @test_atomic_rmw_and_8(i32 %iptr, i32 %v) {
360 ; CHECK-NEXT: entry: 360 ; CHECK-NEXT: entry:
361 ; CHECK-NEXT: %trunc = trunc i32 %v to i8 361 ; CHECK-NEXT: %trunc = trunc i32 %v to i8
362 ; CHECK-NEXT: %a = call i8 @llvm.nacl.atomic.rmw.i8(i32 4, i32 %iptr, i8 %trun c, i32 6) 362 ; CHECK-NEXT: %a = call i8 @llvm.nacl.atomic.rmw.i8(i32 4, i32 %iptr, i8 %trun c, i32 6)
363 ; CHECK-NEXT: %a_ext = zext i8 %a to i32 363 ; CHECK-NEXT: %a_ext = zext i8 %a to i32
364 ; CHECK-NEXT: ret i32 %a_ext 364 ; CHECK-NEXT: ret i32 %a_ext
365 ; CHECK-NEXT: } 365 ; CHECK-NEXT: }
366 366
367 define i32 @test_atomic_rmw_and_16(i32 %iptr, i32 %v) { 367 define internal i32 @test_atomic_rmw_and_16(i32 %iptr, i32 %v) {
368 entry: 368 entry:
369 %trunc = trunc i32 %v to i16 369 %trunc = trunc i32 %v to i16
370 %ptr = inttoptr i32 %iptr to i16* 370 %ptr = inttoptr i32 %iptr to i16*
371 %a = call i16 @llvm.nacl.atomic.rmw.i16(i32 4, i16* %ptr, i16 %trunc, i32 6) 371 %a = call i16 @llvm.nacl.atomic.rmw.i16(i32 4, i16* %ptr, i16 %trunc, i32 6)
372 %a_ext = zext i16 %a to i32 372 %a_ext = zext i16 %a to i32
373 ret i32 %a_ext 373 ret i32 %a_ext
374 } 374 }
375 375
376 ; CHECK-NEXT: define i32 @test_atomic_rmw_and_16(i32 %iptr, i32 %v) { 376 ; CHECK-NEXT: define internal i32 @test_atomic_rmw_and_16(i32 %iptr, i32 %v) {
377 ; CHECK-NEXT: entry: 377 ; CHECK-NEXT: entry:
378 ; CHECK-NEXT: %trunc = trunc i32 %v to i16 378 ; CHECK-NEXT: %trunc = trunc i32 %v to i16
379 ; CHECK-NEXT: %a = call i16 @llvm.nacl.atomic.rmw.i16(i32 4, i32 %iptr, i16 %t runc, i32 6) 379 ; CHECK-NEXT: %a = call i16 @llvm.nacl.atomic.rmw.i16(i32 4, i32 %iptr, i16 %t runc, i32 6)
380 ; CHECK-NEXT: %a_ext = zext i16 %a to i32 380 ; CHECK-NEXT: %a_ext = zext i16 %a to i32
381 ; CHECK-NEXT: ret i32 %a_ext 381 ; CHECK-NEXT: ret i32 %a_ext
382 ; CHECK-NEXT: } 382 ; CHECK-NEXT: }
383 383
384 define i32 @test_atomic_rmw_and_32(i32 %iptr, i32 %v) { 384 define internal i32 @test_atomic_rmw_and_32(i32 %iptr, i32 %v) {
385 entry: 385 entry:
386 %ptr = inttoptr i32 %iptr to i32* 386 %ptr = inttoptr i32 %iptr to i32*
387 %a = call i32 @llvm.nacl.atomic.rmw.i32(i32 4, i32* %ptr, i32 %v, i32 6) 387 %a = call i32 @llvm.nacl.atomic.rmw.i32(i32 4, i32* %ptr, i32 %v, i32 6)
388 ret i32 %a 388 ret i32 %a
389 } 389 }
390 390
391 ; CHECK-NEXT: define i32 @test_atomic_rmw_and_32(i32 %iptr, i32 %v) { 391 ; CHECK-NEXT: define internal i32 @test_atomic_rmw_and_32(i32 %iptr, i32 %v) {
392 ; CHECK-NEXT: entry: 392 ; CHECK-NEXT: entry:
393 ; CHECK-NEXT: %a = call i32 @llvm.nacl.atomic.rmw.i32(i32 4, i32 %iptr, i32 %v , i32 6) 393 ; CHECK-NEXT: %a = call i32 @llvm.nacl.atomic.rmw.i32(i32 4, i32 %iptr, i32 %v , i32 6)
394 ; CHECK-NEXT: ret i32 %a 394 ; CHECK-NEXT: ret i32 %a
395 ; CHECK-NEXT: } 395 ; CHECK-NEXT: }
396 396
397 define i64 @test_atomic_rmw_and_64(i32 %iptr, i64 %v) { 397 define internal i64 @test_atomic_rmw_and_64(i32 %iptr, i64 %v) {
398 entry: 398 entry:
399 %ptr = inttoptr i32 %iptr to i64* 399 %ptr = inttoptr i32 %iptr to i64*
400 %a = call i64 @llvm.nacl.atomic.rmw.i64(i32 4, i64* %ptr, i64 %v, i32 6) 400 %a = call i64 @llvm.nacl.atomic.rmw.i64(i32 4, i64* %ptr, i64 %v, i32 6)
401 ret i64 %a 401 ret i64 %a
402 } 402 }
403 403
404 ; CHECK-NEXT: define i64 @test_atomic_rmw_and_64(i32 %iptr, i64 %v) { 404 ; CHECK-NEXT: define internal i64 @test_atomic_rmw_and_64(i32 %iptr, i64 %v) {
405 ; CHECK-NEXT: entry: 405 ; CHECK-NEXT: entry:
406 ; CHECK-NEXT: %a = call i64 @llvm.nacl.atomic.rmw.i64(i32 4, i32 %iptr, i64 %v , i32 6) 406 ; CHECK-NEXT: %a = call i64 @llvm.nacl.atomic.rmw.i64(i32 4, i32 %iptr, i64 %v , i32 6)
407 ; CHECK-NEXT: ret i64 %a 407 ; CHECK-NEXT: ret i64 %a
408 ; CHECK-NEXT: } 408 ; CHECK-NEXT: }
409 409
410 ;; xor 410 ;; xor
411 411
412 define i32 @test_atomic_rmw_xor_8(i32 %iptr, i32 %v) { 412 define internal i32 @test_atomic_rmw_xor_8(i32 %iptr, i32 %v) {
413 entry: 413 entry:
414 %trunc = trunc i32 %v to i8 414 %trunc = trunc i32 %v to i8
415 %ptr = inttoptr i32 %iptr to i8* 415 %ptr = inttoptr i32 %iptr to i8*
416 %a = call i8 @llvm.nacl.atomic.rmw.i8(i32 5, i8* %ptr, i8 %trunc, i32 6) 416 %a = call i8 @llvm.nacl.atomic.rmw.i8(i32 5, i8* %ptr, i8 %trunc, i32 6)
417 %a_ext = zext i8 %a to i32 417 %a_ext = zext i8 %a to i32
418 ret i32 %a_ext 418 ret i32 %a_ext
419 } 419 }
420 420
421 ; CHECK-NEXT: define i32 @test_atomic_rmw_xor_8(i32 %iptr, i32 %v) { 421 ; CHECK-NEXT: define internal i32 @test_atomic_rmw_xor_8(i32 %iptr, i32 %v) {
422 ; CHECK-NEXT: entry: 422 ; CHECK-NEXT: entry:
423 ; CHECK-NEXT: %trunc = trunc i32 %v to i8 423 ; CHECK-NEXT: %trunc = trunc i32 %v to i8
424 ; CHECK-NEXT: %a = call i8 @llvm.nacl.atomic.rmw.i8(i32 5, i32 %iptr, i8 %trun c, i32 6) 424 ; CHECK-NEXT: %a = call i8 @llvm.nacl.atomic.rmw.i8(i32 5, i32 %iptr, i8 %trun c, i32 6)
425 ; CHECK-NEXT: %a_ext = zext i8 %a to i32 425 ; CHECK-NEXT: %a_ext = zext i8 %a to i32
426 ; CHECK-NEXT: ret i32 %a_ext 426 ; CHECK-NEXT: ret i32 %a_ext
427 ; CHECK-NEXT: } 427 ; CHECK-NEXT: }
428 428
429 define i32 @test_atomic_rmw_xor_16(i32 %iptr, i32 %v) { 429 define internal i32 @test_atomic_rmw_xor_16(i32 %iptr, i32 %v) {
430 entry: 430 entry:
431 %trunc = trunc i32 %v to i16 431 %trunc = trunc i32 %v to i16
432 %ptr = inttoptr i32 %iptr to i16* 432 %ptr = inttoptr i32 %iptr to i16*
433 %a = call i16 @llvm.nacl.atomic.rmw.i16(i32 5, i16* %ptr, i16 %trunc, i32 6) 433 %a = call i16 @llvm.nacl.atomic.rmw.i16(i32 5, i16* %ptr, i16 %trunc, i32 6)
434 %a_ext = zext i16 %a to i32 434 %a_ext = zext i16 %a to i32
435 ret i32 %a_ext 435 ret i32 %a_ext
436 } 436 }
437 437
438 ; CHECK-NEXT: define i32 @test_atomic_rmw_xor_16(i32 %iptr, i32 %v) { 438 ; CHECK-NEXT: define internal i32 @test_atomic_rmw_xor_16(i32 %iptr, i32 %v) {
439 ; CHECK-NEXT: entry: 439 ; CHECK-NEXT: entry:
440 ; CHECK-NEXT: %trunc = trunc i32 %v to i16 440 ; CHECK-NEXT: %trunc = trunc i32 %v to i16
441 ; CHECK-NEXT: %a = call i16 @llvm.nacl.atomic.rmw.i16(i32 5, i32 %iptr, i16 %t runc, i32 6) 441 ; CHECK-NEXT: %a = call i16 @llvm.nacl.atomic.rmw.i16(i32 5, i32 %iptr, i16 %t runc, i32 6)
442 ; CHECK-NEXT: %a_ext = zext i16 %a to i32 442 ; CHECK-NEXT: %a_ext = zext i16 %a to i32
443 ; CHECK-NEXT: ret i32 %a_ext 443 ; CHECK-NEXT: ret i32 %a_ext
444 ; CHECK-NEXT: } 444 ; CHECK-NEXT: }
445 445
446 define i32 @test_atomic_rmw_xor_32(i32 %iptr, i32 %v) { 446 define internal i32 @test_atomic_rmw_xor_32(i32 %iptr, i32 %v) {
447 entry: 447 entry:
448 %ptr = inttoptr i32 %iptr to i32* 448 %ptr = inttoptr i32 %iptr to i32*
449 %a = call i32 @llvm.nacl.atomic.rmw.i32(i32 5, i32* %ptr, i32 %v, i32 6) 449 %a = call i32 @llvm.nacl.atomic.rmw.i32(i32 5, i32* %ptr, i32 %v, i32 6)
450 ret i32 %a 450 ret i32 %a
451 } 451 }
452 452
453 ; CHECK-NEXT: define i32 @test_atomic_rmw_xor_32(i32 %iptr, i32 %v) { 453 ; CHECK-NEXT: define internal i32 @test_atomic_rmw_xor_32(i32 %iptr, i32 %v) {
454 ; CHECK-NEXT: entry: 454 ; CHECK-NEXT: entry:
455 ; CHECK-NEXT: %a = call i32 @llvm.nacl.atomic.rmw.i32(i32 5, i32 %iptr, i32 %v , i32 6) 455 ; CHECK-NEXT: %a = call i32 @llvm.nacl.atomic.rmw.i32(i32 5, i32 %iptr, i32 %v , i32 6)
456 ; CHECK-NEXT: ret i32 %a 456 ; CHECK-NEXT: ret i32 %a
457 ; CHECK-NEXT: } 457 ; CHECK-NEXT: }
458 458
459 define i64 @test_atomic_rmw_xor_64(i32 %iptr, i64 %v) { 459 define internal i64 @test_atomic_rmw_xor_64(i32 %iptr, i64 %v) {
460 entry: 460 entry:
461 %ptr = inttoptr i32 %iptr to i64* 461 %ptr = inttoptr i32 %iptr to i64*
462 %a = call i64 @llvm.nacl.atomic.rmw.i64(i32 5, i64* %ptr, i64 %v, i32 6) 462 %a = call i64 @llvm.nacl.atomic.rmw.i64(i32 5, i64* %ptr, i64 %v, i32 6)
463 ret i64 %a 463 ret i64 %a
464 } 464 }
465 465
466 ; CHECK-NEXT: define i64 @test_atomic_rmw_xor_64(i32 %iptr, i64 %v) { 466 ; CHECK-NEXT: define internal i64 @test_atomic_rmw_xor_64(i32 %iptr, i64 %v) {
467 ; CHECK-NEXT: entry: 467 ; CHECK-NEXT: entry:
468 ; CHECK-NEXT: %a = call i64 @llvm.nacl.atomic.rmw.i64(i32 5, i32 %iptr, i64 %v , i32 6) 468 ; CHECK-NEXT: %a = call i64 @llvm.nacl.atomic.rmw.i64(i32 5, i32 %iptr, i64 %v , i32 6)
469 ; CHECK-NEXT: ret i64 %a 469 ; CHECK-NEXT: ret i64 %a
470 ; CHECK-NEXT: } 470 ; CHECK-NEXT: }
471 471
472 ;; exchange 472 ;; exchange
473 473
474 define i32 @test_atomic_rmw_xchg_8(i32 %iptr, i32 %v) { 474 define internal i32 @test_atomic_rmw_xchg_8(i32 %iptr, i32 %v) {
475 entry: 475 entry:
476 %trunc = trunc i32 %v to i8 476 %trunc = trunc i32 %v to i8
477 %ptr = inttoptr i32 %iptr to i8* 477 %ptr = inttoptr i32 %iptr to i8*
478 %a = call i8 @llvm.nacl.atomic.rmw.i8(i32 6, i8* %ptr, i8 %trunc, i32 6) 478 %a = call i8 @llvm.nacl.atomic.rmw.i8(i32 6, i8* %ptr, i8 %trunc, i32 6)
479 %a_ext = zext i8 %a to i32 479 %a_ext = zext i8 %a to i32
480 ret i32 %a_ext 480 ret i32 %a_ext
481 } 481 }
482 482
483 ; CHECK-NEXT: define i32 @test_atomic_rmw_xchg_8(i32 %iptr, i32 %v) { 483 ; CHECK-NEXT: define internal i32 @test_atomic_rmw_xchg_8(i32 %iptr, i32 %v) {
484 ; CHECK-NEXT: entry: 484 ; CHECK-NEXT: entry:
485 ; CHECK-NEXT: %trunc = trunc i32 %v to i8 485 ; CHECK-NEXT: %trunc = trunc i32 %v to i8
486 ; CHECK-NEXT: %a = call i8 @llvm.nacl.atomic.rmw.i8(i32 6, i32 %iptr, i8 %trun c, i32 6) 486 ; CHECK-NEXT: %a = call i8 @llvm.nacl.atomic.rmw.i8(i32 6, i32 %iptr, i8 %trun c, i32 6)
487 ; CHECK-NEXT: %a_ext = zext i8 %a to i32 487 ; CHECK-NEXT: %a_ext = zext i8 %a to i32
488 ; CHECK-NEXT: ret i32 %a_ext 488 ; CHECK-NEXT: ret i32 %a_ext
489 ; CHECK-NEXT: } 489 ; CHECK-NEXT: }
490 490
491 define i32 @test_atomic_rmw_xchg_16(i32 %iptr, i32 %v) { 491 define internal i32 @test_atomic_rmw_xchg_16(i32 %iptr, i32 %v) {
492 entry: 492 entry:
493 %trunc = trunc i32 %v to i16 493 %trunc = trunc i32 %v to i16
494 %ptr = inttoptr i32 %iptr to i16* 494 %ptr = inttoptr i32 %iptr to i16*
495 %a = call i16 @llvm.nacl.atomic.rmw.i16(i32 6, i16* %ptr, i16 %trunc, i32 6) 495 %a = call i16 @llvm.nacl.atomic.rmw.i16(i32 6, i16* %ptr, i16 %trunc, i32 6)
496 %a_ext = zext i16 %a to i32 496 %a_ext = zext i16 %a to i32
497 ret i32 %a_ext 497 ret i32 %a_ext
498 } 498 }
499 499
500 ; CHECK-NEXT: define i32 @test_atomic_rmw_xchg_16(i32 %iptr, i32 %v) { 500 ; CHECK-NEXT: define internal i32 @test_atomic_rmw_xchg_16(i32 %iptr, i32 %v) {
501 ; CHECK-NEXT: entry: 501 ; CHECK-NEXT: entry:
502 ; CHECK-NEXT: %trunc = trunc i32 %v to i16 502 ; CHECK-NEXT: %trunc = trunc i32 %v to i16
503 ; CHECK-NEXT: %a = call i16 @llvm.nacl.atomic.rmw.i16(i32 6, i32 %iptr, i16 %t runc, i32 6) 503 ; CHECK-NEXT: %a = call i16 @llvm.nacl.atomic.rmw.i16(i32 6, i32 %iptr, i16 %t runc, i32 6)
504 ; CHECK-NEXT: %a_ext = zext i16 %a to i32 504 ; CHECK-NEXT: %a_ext = zext i16 %a to i32
505 ; CHECK-NEXT: ret i32 %a_ext 505 ; CHECK-NEXT: ret i32 %a_ext
506 ; CHECK-NEXT: } 506 ; CHECK-NEXT: }
507 507
508 define i32 @test_atomic_rmw_xchg_32(i32 %iptr, i32 %v) { 508 define internal i32 @test_atomic_rmw_xchg_32(i32 %iptr, i32 %v) {
509 entry: 509 entry:
510 %ptr = inttoptr i32 %iptr to i32* 510 %ptr = inttoptr i32 %iptr to i32*
511 %a = call i32 @llvm.nacl.atomic.rmw.i32(i32 6, i32* %ptr, i32 %v, i32 6) 511 %a = call i32 @llvm.nacl.atomic.rmw.i32(i32 6, i32* %ptr, i32 %v, i32 6)
512 ret i32 %a 512 ret i32 %a
513 } 513 }
514 514
515 ; CHECK-NEXT: define i32 @test_atomic_rmw_xchg_32(i32 %iptr, i32 %v) { 515 ; CHECK-NEXT: define internal i32 @test_atomic_rmw_xchg_32(i32 %iptr, i32 %v) {
516 ; CHECK-NEXT: entry: 516 ; CHECK-NEXT: entry:
517 ; CHECK-NEXT: %a = call i32 @llvm.nacl.atomic.rmw.i32(i32 6, i32 %iptr, i32 %v , i32 6) 517 ; CHECK-NEXT: %a = call i32 @llvm.nacl.atomic.rmw.i32(i32 6, i32 %iptr, i32 %v , i32 6)
518 ; CHECK-NEXT: ret i32 %a 518 ; CHECK-NEXT: ret i32 %a
519 ; CHECK-NEXT: } 519 ; CHECK-NEXT: }
520 520
521 define i64 @test_atomic_rmw_xchg_64(i32 %iptr, i64 %v) { 521 define internal i64 @test_atomic_rmw_xchg_64(i32 %iptr, i64 %v) {
522 entry: 522 entry:
523 %ptr = inttoptr i32 %iptr to i64* 523 %ptr = inttoptr i32 %iptr to i64*
524 %a = call i64 @llvm.nacl.atomic.rmw.i64(i32 6, i64* %ptr, i64 %v, i32 6) 524 %a = call i64 @llvm.nacl.atomic.rmw.i64(i32 6, i64* %ptr, i64 %v, i32 6)
525 ret i64 %a 525 ret i64 %a
526 } 526 }
527 527
528 ; CHECK-NEXT: define i64 @test_atomic_rmw_xchg_64(i32 %iptr, i64 %v) { 528 ; CHECK-NEXT: define internal i64 @test_atomic_rmw_xchg_64(i32 %iptr, i64 %v) {
529 ; CHECK-NEXT: entry: 529 ; CHECK-NEXT: entry:
530 ; CHECK-NEXT: %a = call i64 @llvm.nacl.atomic.rmw.i64(i32 6, i32 %iptr, i64 %v , i32 6) 530 ; CHECK-NEXT: %a = call i64 @llvm.nacl.atomic.rmw.i64(i32 6, i32 %iptr, i64 %v , i32 6)
531 ; CHECK-NEXT: ret i64 %a 531 ; CHECK-NEXT: ret i64 %a
532 ; CHECK-NEXT: } 532 ; CHECK-NEXT: }
533 533
534 ;;;; Cmpxchg 534 ;;;; Cmpxchg
535 535
536 define i32 @test_atomic_cmpxchg_8(i32 %iptr, i32 %expected, i32 %desired) { 536 define internal i32 @test_atomic_cmpxchg_8(i32 %iptr, i32 %expected, i32 %desire d) {
537 entry: 537 entry:
538 %trunc_exp = trunc i32 %expected to i8 538 %trunc_exp = trunc i32 %expected to i8
539 %trunc_des = trunc i32 %desired to i8 539 %trunc_des = trunc i32 %desired to i8
540 %ptr = inttoptr i32 %iptr to i8* 540 %ptr = inttoptr i32 %iptr to i8*
541 %old = call i8 @llvm.nacl.atomic.cmpxchg.i8(i8* %ptr, i8 %trunc_exp, 541 %old = call i8 @llvm.nacl.atomic.cmpxchg.i8(i8* %ptr, i8 %trunc_exp,
542 i8 %trunc_des, i32 6, i32 6) 542 i8 %trunc_des, i32 6, i32 6)
543 %old_ext = zext i8 %old to i32 543 %old_ext = zext i8 %old to i32
544 ret i32 %old_ext 544 ret i32 %old_ext
545 } 545 }
546 546
547 ; CHECK-NEXT: define i32 @test_atomic_cmpxchg_8(i32 %iptr, i32 %expected, i32 %d esired) { 547 ; CHECK-NEXT: define internal i32 @test_atomic_cmpxchg_8(i32 %iptr, i32 %expecte d, i32 %desired) {
548 ; CHECK-NEXT: entry: 548 ; CHECK-NEXT: entry:
549 ; CHECK-NEXT: %trunc_exp = trunc i32 %expected to i8 549 ; CHECK-NEXT: %trunc_exp = trunc i32 %expected to i8
550 ; CHECK-NEXT: %trunc_des = trunc i32 %desired to i8 550 ; CHECK-NEXT: %trunc_des = trunc i32 %desired to i8
551 ; CHECK-NEXT: %old = call i8 @llvm.nacl.atomic.cmpxchg.i8(i32 %iptr, i8 %trunc _exp, i8 %trunc_des, i32 6, i32 6) 551 ; CHECK-NEXT: %old = call i8 @llvm.nacl.atomic.cmpxchg.i8(i32 %iptr, i8 %trunc _exp, i8 %trunc_des, i32 6, i32 6)
552 ; CHECK-NEXT: %old_ext = zext i8 %old to i32 552 ; CHECK-NEXT: %old_ext = zext i8 %old to i32
553 ; CHECK-NEXT: ret i32 %old_ext 553 ; CHECK-NEXT: ret i32 %old_ext
554 ; CHECK-NEXT: } 554 ; CHECK-NEXT: }
555 555
556 define i32 @test_atomic_cmpxchg_16(i32 %iptr, i32 %expected, i32 %desired) { 556 define internal i32 @test_atomic_cmpxchg_16(i32 %iptr, i32 %expected, i32 %desir ed) {
557 entry: 557 entry:
558 %trunc_exp = trunc i32 %expected to i16 558 %trunc_exp = trunc i32 %expected to i16
559 %trunc_des = trunc i32 %desired to i16 559 %trunc_des = trunc i32 %desired to i16
560 %ptr = inttoptr i32 %iptr to i16* 560 %ptr = inttoptr i32 %iptr to i16*
561 %old = call i16 @llvm.nacl.atomic.cmpxchg.i16(i16* %ptr, i16 %trunc_exp, 561 %old = call i16 @llvm.nacl.atomic.cmpxchg.i16(i16* %ptr, i16 %trunc_exp,
562 i16 %trunc_des, i32 6, i32 6) 562 i16 %trunc_des, i32 6, i32 6)
563 %old_ext = zext i16 %old to i32 563 %old_ext = zext i16 %old to i32
564 ret i32 %old_ext 564 ret i32 %old_ext
565 } 565 }
566 566
567 ; CHECK-NEXT: define i32 @test_atomic_cmpxchg_16(i32 %iptr, i32 %expected, i32 % desired) { 567 ; CHECK-NEXT: define internal i32 @test_atomic_cmpxchg_16(i32 %iptr, i32 %expect ed, i32 %desired) {
568 ; CHECK-NEXT: entry: 568 ; CHECK-NEXT: entry:
569 ; CHECK-NEXT: %trunc_exp = trunc i32 %expected to i16 569 ; CHECK-NEXT: %trunc_exp = trunc i32 %expected to i16
570 ; CHECK-NEXT: %trunc_des = trunc i32 %desired to i16 570 ; CHECK-NEXT: %trunc_des = trunc i32 %desired to i16
571 ; CHECK-NEXT: %old = call i16 @llvm.nacl.atomic.cmpxchg.i16(i32 %iptr, i16 %tr unc_exp, i16 %trunc_des, i32 6, i32 6) 571 ; CHECK-NEXT: %old = call i16 @llvm.nacl.atomic.cmpxchg.i16(i32 %iptr, i16 %tr unc_exp, i16 %trunc_des, i32 6, i32 6)
572 ; CHECK-NEXT: %old_ext = zext i16 %old to i32 572 ; CHECK-NEXT: %old_ext = zext i16 %old to i32
573 ; CHECK-NEXT: ret i32 %old_ext 573 ; CHECK-NEXT: ret i32 %old_ext
574 ; CHECK-NEXT: } 574 ; CHECK-NEXT: }
575 575
576 define i32 @test_atomic_cmpxchg_32(i32 %iptr, i32 %expected, i32 %desired) { 576 define internal i32 @test_atomic_cmpxchg_32(i32 %iptr, i32 %expected, i32 %desir ed) {
577 entry: 577 entry:
578 %ptr = inttoptr i32 %iptr to i32* 578 %ptr = inttoptr i32 %iptr to i32*
579 %old = call i32 @llvm.nacl.atomic.cmpxchg.i32(i32* %ptr, i32 %expected, 579 %old = call i32 @llvm.nacl.atomic.cmpxchg.i32(i32* %ptr, i32 %expected,
580 i32 %desired, i32 6, i32 6) 580 i32 %desired, i32 6, i32 6)
581 ret i32 %old 581 ret i32 %old
582 } 582 }
583 583
584 ; CHECK-NEXT: define i32 @test_atomic_cmpxchg_32(i32 %iptr, i32 %expected, i32 % desired) { 584 ; CHECK-NEXT: define internal i32 @test_atomic_cmpxchg_32(i32 %iptr, i32 %expect ed, i32 %desired) {
585 ; CHECK-NEXT: entry: 585 ; CHECK-NEXT: entry:
586 ; CHECK-NEXT: %old = call i32 @llvm.nacl.atomic.cmpxchg.i32(i32 %iptr, i32 %ex pected, i32 %desired, i32 6, i32 6) 586 ; CHECK-NEXT: %old = call i32 @llvm.nacl.atomic.cmpxchg.i32(i32 %iptr, i32 %ex pected, i32 %desired, i32 6, i32 6)
587 ; CHECK-NEXT: ret i32 %old 587 ; CHECK-NEXT: ret i32 %old
588 ; CHECK-NEXT: } 588 ; CHECK-NEXT: }
589 589
590 define i64 @test_atomic_cmpxchg_64(i32 %iptr, i64 %expected, i64 %desired) { 590 define internal i64 @test_atomic_cmpxchg_64(i32 %iptr, i64 %expected, i64 %desir ed) {
591 entry: 591 entry:
592 %ptr = inttoptr i32 %iptr to i64* 592 %ptr = inttoptr i32 %iptr to i64*
593 %old = call i64 @llvm.nacl.atomic.cmpxchg.i64(i64* %ptr, i64 %expected, 593 %old = call i64 @llvm.nacl.atomic.cmpxchg.i64(i64* %ptr, i64 %expected,
594 i64 %desired, i32 6, i32 6) 594 i64 %desired, i32 6, i32 6)
595 ret i64 %old 595 ret i64 %old
596 } 596 }
597 597
598 ; CHECK-NEXT: define i64 @test_atomic_cmpxchg_64(i32 %iptr, i64 %expected, i64 % desired) { 598 ; CHECK-NEXT: define internal i64 @test_atomic_cmpxchg_64(i32 %iptr, i64 %expect ed, i64 %desired) {
599 ; CHECK-NEXT: entry: 599 ; CHECK-NEXT: entry:
600 ; CHECK-NEXT: %old = call i64 @llvm.nacl.atomic.cmpxchg.i64(i32 %iptr, i64 %ex pected, i64 %desired, i32 6, i32 6) 600 ; CHECK-NEXT: %old = call i64 @llvm.nacl.atomic.cmpxchg.i64(i32 %iptr, i64 %ex pected, i64 %desired, i32 6, i32 6)
601 ; CHECK-NEXT: ret i64 %old 601 ; CHECK-NEXT: ret i64 %old
602 ; CHECK-NEXT: } 602 ; CHECK-NEXT: }
603 603
604 ;;;; Fence and is-lock-free. 604 ;;;; Fence and is-lock-free.
605 605
606 define void @test_atomic_fence() { 606 define internal void @test_atomic_fence() {
607 entry: 607 entry:
608 call void @llvm.nacl.atomic.fence(i32 6) 608 call void @llvm.nacl.atomic.fence(i32 6)
609 ret void 609 ret void
610 } 610 }
611 611
612 ; CHECK-NEXT: define void @test_atomic_fence() { 612 ; CHECK-NEXT: define internal void @test_atomic_fence() {
613 ; CHECK-NEXT: entry: 613 ; CHECK-NEXT: entry:
614 ; CHECK-NEXT: call void @llvm.nacl.atomic.fence(i32 6) 614 ; CHECK-NEXT: call void @llvm.nacl.atomic.fence(i32 6)
615 ; CHECK-NEXT: ret void 615 ; CHECK-NEXT: ret void
616 ; CHECK-NEXT: } 616 ; CHECK-NEXT: }
617 617
618 define void @test_atomic_fence_all() { 618 define internal void @test_atomic_fence_all() {
619 entry: 619 entry:
620 call void @llvm.nacl.atomic.fence.all() 620 call void @llvm.nacl.atomic.fence.all()
621 ret void 621 ret void
622 } 622 }
623 623
624 ; CHECK-NEXT: define void @test_atomic_fence_all() { 624 ; CHECK-NEXT: define internal void @test_atomic_fence_all() {
625 ; CHECK-NEXT: entry: 625 ; CHECK-NEXT: entry:
626 ; CHECK-NEXT: call void @llvm.nacl.atomic.fence.all() 626 ; CHECK-NEXT: call void @llvm.nacl.atomic.fence.all()
627 ; CHECK-NEXT: ret void 627 ; CHECK-NEXT: ret void
628 ; CHECK-NEXT: } 628 ; CHECK-NEXT: }
629 629
630 define i32 @test_atomic_is_lock_free(i32 %iptr) { 630 define internal i32 @test_atomic_is_lock_free(i32 %iptr) {
631 entry: 631 entry:
632 %ptr = inttoptr i32 %iptr to i8* 632 %ptr = inttoptr i32 %iptr to i8*
633 %i = call i1 @llvm.nacl.atomic.is.lock.free(i32 4, i8* %ptr) 633 %i = call i1 @llvm.nacl.atomic.is.lock.free(i32 4, i8* %ptr)
634 %r = zext i1 %i to i32 634 %r = zext i1 %i to i32
635 ret i32 %r 635 ret i32 %r
636 } 636 }
637 637
638 ; CHECK-NEXT: define i32 @test_atomic_is_lock_free(i32 %iptr) { 638 ; CHECK-NEXT: define internal i32 @test_atomic_is_lock_free(i32 %iptr) {
639 ; CHECK-NEXT: entry: 639 ; CHECK-NEXT: entry:
640 ; CHECK-NEXT: %i = call i1 @llvm.nacl.atomic.is.lock.free(i32 4, i32 %iptr) 640 ; CHECK-NEXT: %i = call i1 @llvm.nacl.atomic.is.lock.free(i32 4, i32 %iptr)
641 ; CHECK-NEXT: %r = zext i1 %i to i32 641 ; CHECK-NEXT: %r = zext i1 %i to i32
642 ; CHECK-NEXT: ret i32 %r 642 ; CHECK-NEXT: ret i32 %r
643 ; CHECK-NEXT: } 643 ; CHECK-NEXT: }
644 644
645 ; NOIR: Total across all functions 645 ; NOIR: Total across all functions
OLDNEW
« no previous file with comments | « tests_lit/reader_tests/load.ll ('k') | tests_lit/reader_tests/nacl-other-intrinsics.ll » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698