| 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 |