OLD | NEW |
1 ; RUN: opt < %s -resolve-pnacl-intrinsics -S | FileCheck %s \ | 1 ; RUN: opt < %s -resolve-pnacl-intrinsics -S | FileCheck %s \ |
2 ; RUN: -check-prefix=CLEANED | 2 ; RUN: -check-prefix=CLEANED |
3 ; RUN: opt < %s -resolve-pnacl-intrinsics -S | FileCheck %s | 3 ; RUN: opt < %s -resolve-pnacl-intrinsics -S | FileCheck %s |
4 | 4 |
5 ; CLEANED-NOT: call i32 @llvm.nacl.setjmp | 5 ; CLEANED-NOT: call i32 @llvm.nacl.setjmp |
6 ; CLEANED-NOT: call void @llvm.nacl.longjmp | 6 ; CLEANED-NOT: call void @llvm.nacl.longjmp |
7 ; CLEANED-NOT: call {{.*}} @llvm.nacl.atomic | 7 ; CLEANED-NOT: call {{.*}} @llvm.nacl.atomic |
8 | 8 |
9 declare i32 @llvm.nacl.setjmp(i8*) | 9 declare i32 @llvm.nacl.setjmp(i8*) |
10 declare void @llvm.nacl.longjmp(i8*, i32) | 10 declare void @llvm.nacl.longjmp(i8*, i32) |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
48 define void @call_longjmp(i8* %arg, i32 %num) { | 48 define void @call_longjmp(i8* %arg, i32 %num) { |
49 call void @llvm.nacl.longjmp(i8* %arg, i32 %num) | 49 call void @llvm.nacl.longjmp(i8* %arg, i32 %num) |
50 ; CHECK: call void @longjmp(i8* %arg, i32 %num){{$}} | 50 ; CHECK: call void @longjmp(i8* %arg, i32 %num){{$}} |
51 ret void | 51 ret void |
52 } | 52 } |
53 | 53 |
54 ; atomics. | 54 ; atomics. |
55 | 55 |
56 ; CHECK-LABEL: @test_atomic_acquire | 56 ; CHECK-LABEL: @test_atomic_acquire |
57 define i32 @test_atomic_acquire(i32* %ptr) { | 57 define i32 @test_atomic_acquire(i32* %ptr) { |
58 ; CHECK: %1 = load atomic i32* %ptr acquire, align 4 | 58 ; CHECK: %1 = load atomic i32, i32* %ptr acquire, align 4 |
59 %1 = call i32 @llvm.nacl.atomic.load.i32(i32* %ptr, i32 3) | 59 %1 = call i32 @llvm.nacl.atomic.load.i32(i32* %ptr, i32 3) |
60 ret i32 %1 | 60 ret i32 %1 |
61 } | 61 } |
62 | 62 |
63 ; CHECK-LABEL: @test_atomic_release | 63 ; CHECK-LABEL: @test_atomic_release |
64 define void @test_atomic_release(i32* %ptr, i32 %value) { | 64 define void @test_atomic_release(i32* %ptr, i32 %value) { |
65 ; CHECK: store atomic i32 %value, i32* %ptr release, align 4 | 65 ; CHECK: store atomic i32 %value, i32* %ptr release, align 4 |
66 call void @llvm.nacl.atomic.store.i32(i32 %value, i32* %ptr, i32 4) | 66 call void @llvm.nacl.atomic.store.i32(i32 %value, i32* %ptr, i32 4) |
67 ret void | 67 ret void |
68 } | 68 } |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
229 ; CHECK-LABEL: @test_lock_release_i32 | 229 ; CHECK-LABEL: @test_lock_release_i32 |
230 define void @test_lock_release_i32(i32* %ptr) { | 230 define void @test_lock_release_i32(i32* %ptr) { |
231 ; Note that the 'release' was changed to a 'seq_cst'. | 231 ; Note that the 'release' was changed to a 'seq_cst'. |
232 ; CHECK: store atomic i32 0, i32* %ptr seq_cst, align 4 | 232 ; CHECK: store atomic i32 0, i32* %ptr seq_cst, align 4 |
233 call void @llvm.nacl.atomic.store.i32(i32 0, i32* %ptr, i32 6) | 233 call void @llvm.nacl.atomic.store.i32(i32 0, i32* %ptr, i32 6) |
234 ret void | 234 ret void |
235 } | 235 } |
236 | 236 |
237 ; CHECK-LABEL: @test_atomic_load_i8 | 237 ; CHECK-LABEL: @test_atomic_load_i8 |
238 define zeroext i8 @test_atomic_load_i8(i8* %ptr) { | 238 define zeroext i8 @test_atomic_load_i8(i8* %ptr) { |
239 ; CHECK: %1 = load atomic i8* %ptr seq_cst, align 1 | 239 ; CHECK: %1 = load atomic i8, i8* %ptr seq_cst, align 1 |
240 %1 = call i8 @llvm.nacl.atomic.load.i8(i8* %ptr, i32 6) | 240 %1 = call i8 @llvm.nacl.atomic.load.i8(i8* %ptr, i32 6) |
241 ret i8 %1 | 241 ret i8 %1 |
242 } | 242 } |
243 | 243 |
244 ; CHECK-LABEL: @test_atomic_store_i8 | 244 ; CHECK-LABEL: @test_atomic_store_i8 |
245 define void @test_atomic_store_i8(i8* %ptr, i8 zeroext %value) { | 245 define void @test_atomic_store_i8(i8* %ptr, i8 zeroext %value) { |
246 ; CHECK: store atomic i8 %value, i8* %ptr seq_cst, align 1 | 246 ; CHECK: store atomic i8 %value, i8* %ptr seq_cst, align 1 |
247 call void @llvm.nacl.atomic.store.i8(i8 %value, i8* %ptr, i32 6) | 247 call void @llvm.nacl.atomic.store.i8(i8 %value, i8* %ptr, i32 6) |
248 ret void | 248 ret void |
249 } | 249 } |
250 | 250 |
251 ; CHECK-LABEL: @test_atomic_load_i16 | 251 ; CHECK-LABEL: @test_atomic_load_i16 |
252 define zeroext i16 @test_atomic_load_i16(i16* %ptr) { | 252 define zeroext i16 @test_atomic_load_i16(i16* %ptr) { |
253 ; CHECK: %1 = load atomic i16* %ptr seq_cst, align 2 | 253 ; CHECK: %1 = load atomic i16, i16* %ptr seq_cst, align 2 |
254 %1 = call i16 @llvm.nacl.atomic.load.i16(i16* %ptr, i32 6) | 254 %1 = call i16 @llvm.nacl.atomic.load.i16(i16* %ptr, i32 6) |
255 ret i16 %1 | 255 ret i16 %1 |
256 } | 256 } |
257 | 257 |
258 ; CHECK-LABEL: @test_atomic_store_i16 | 258 ; CHECK-LABEL: @test_atomic_store_i16 |
259 define void @test_atomic_store_i16(i16* %ptr, i16 zeroext %value) { | 259 define void @test_atomic_store_i16(i16* %ptr, i16 zeroext %value) { |
260 ; CHECK: store atomic i16 %value, i16* %ptr seq_cst, align 2 | 260 ; CHECK: store atomic i16 %value, i16* %ptr seq_cst, align 2 |
261 call void @llvm.nacl.atomic.store.i16(i16 %value, i16* %ptr, i32 6) | 261 call void @llvm.nacl.atomic.store.i16(i16 %value, i16* %ptr, i32 6) |
262 ret void | 262 ret void |
263 } | 263 } |
264 | 264 |
265 ; CHECK-LABEL: @test_atomic_load_i32 | 265 ; CHECK-LABEL: @test_atomic_load_i32 |
266 define i32 @test_atomic_load_i32(i32* %ptr) { | 266 define i32 @test_atomic_load_i32(i32* %ptr) { |
267 ; CHECK: %1 = load atomic i32* %ptr seq_cst, align 4 | 267 ; CHECK: %1 = load atomic i32, i32* %ptr seq_cst, align 4 |
268 %1 = call i32 @llvm.nacl.atomic.load.i32(i32* %ptr, i32 6) | 268 %1 = call i32 @llvm.nacl.atomic.load.i32(i32* %ptr, i32 6) |
269 ret i32 %1 | 269 ret i32 %1 |
270 } | 270 } |
271 | 271 |
272 ; CHECK-LABEL: @test_atomic_store_i32 | 272 ; CHECK-LABEL: @test_atomic_store_i32 |
273 define void @test_atomic_store_i32(i32* %ptr, i32 %value) { | 273 define void @test_atomic_store_i32(i32* %ptr, i32 %value) { |
274 ; CHECK: store atomic i32 %value, i32* %ptr seq_cst, align 4 | 274 ; CHECK: store atomic i32 %value, i32* %ptr seq_cst, align 4 |
275 call void @llvm.nacl.atomic.store.i32(i32 %value, i32* %ptr, i32 6) | 275 call void @llvm.nacl.atomic.store.i32(i32 %value, i32* %ptr, i32 6) |
276 ret void | 276 ret void |
277 } | 277 } |
278 | 278 |
279 ; CHECK-LABEL: @test_atomic_load_i64 | 279 ; CHECK-LABEL: @test_atomic_load_i64 |
280 define i64 @test_atomic_load_i64(i64* %ptr) { | 280 define i64 @test_atomic_load_i64(i64* %ptr) { |
281 ; CHECK: %1 = load atomic i64* %ptr seq_cst, align 8 | 281 ; CHECK: %1 = load atomic i64, i64* %ptr seq_cst, align 8 |
282 %1 = call i64 @llvm.nacl.atomic.load.i64(i64* %ptr, i32 6) | 282 %1 = call i64 @llvm.nacl.atomic.load.i64(i64* %ptr, i32 6) |
283 ret i64 %1 | 283 ret i64 %1 |
284 } | 284 } |
285 | 285 |
286 ; CHECK-LABEL: @test_atomic_store_i64 | 286 ; CHECK-LABEL: @test_atomic_store_i64 |
287 define void @test_atomic_store_i64(i64* %ptr, i64 %value) { | 287 define void @test_atomic_store_i64(i64* %ptr, i64 %value) { |
288 ; CHECK: store atomic i64 %value, i64* %ptr seq_cst, align 8 | 288 ; CHECK: store atomic i64 %value, i64* %ptr seq_cst, align 8 |
289 call void @llvm.nacl.atomic.store.i64(i64 %value, i64* %ptr, i32 6) | 289 call void @llvm.nacl.atomic.store.i64(i64 %value, i64* %ptr, i32 6) |
290 ret void | 290 ret void |
291 } | 291 } |
292 | 292 |
293 ; CHECK: attributes [[RETURNS_TWICE]] = { returns_twice } | 293 ; CHECK: attributes [[RETURNS_TWICE]] = { returns_twice } |
OLD | NEW |