| OLD | NEW |
| 1 ; RUN: opt < %s -resolve-pnacl-intrinsics -mtriple=x86_64 -S | FileCheck %s -che
ck-prefix=CLEANED | 1 ; RUN: opt < %s -resolve-pnacl-intrinsics -mtriple=x86_64 -S | FileCheck %s -che
ck-prefix=CLEANED |
| 2 ; 'CLEANED' only needs to check a single architecture. | 2 ; 'CLEANED' only needs to check a single architecture. |
| 3 ; RUN: opt < %s -resolve-pnacl-intrinsics -mtriple=x86_64 -S | FileCheck %s -che
ck-prefix=X8664 | 3 ; RUN: opt < %s -resolve-pnacl-intrinsics -mtriple=x86_64 -S | FileCheck %s -che
ck-prefix=X8664 |
| 4 ; RUN: opt < %s -resolve-pnacl-intrinsics -mtriple=i386 -S | FileCheck %s -che
ck-prefix=X8632 | 4 ; RUN: opt < %s -resolve-pnacl-intrinsics -mtriple=i386 -S | FileCheck %s -che
ck-prefix=X8632 |
| 5 ; RUN: opt < %s -resolve-pnacl-intrinsics -mtriple=arm -S | FileCheck %s -che
ck-prefix=ARM32 | 5 ; RUN: opt < %s -resolve-pnacl-intrinsics -mtriple=arm -S | FileCheck %s -che
ck-prefix=ARM32 |
| 6 ; RUN: opt < %s -resolve-pnacl-intrinsics -mtriple=mipsel -S | FileCheck %s -che
ck-prefix=MIPS32 | 6 ; RUN: opt < %s -resolve-pnacl-intrinsics -mtriple=mipsel -S | FileCheck %s -che
ck-prefix=MIPS32 |
| 7 ; RUN: opt < %s -resolve-pnacl-intrinsics -mtriple=asmjs -S | FileCheck %s -che
ck-prefix=ASMJS | |
| 8 | 7 |
| 9 ; CLEANED-NOT: call {{.*}} @llvm.nacl.atomic | 8 ; CLEANED-NOT: call {{.*}} @llvm.nacl.atomic |
| 10 | 9 |
| 11 declare i32 @llvm.nacl.setjmp(i8*) | 10 declare i32 @llvm.nacl.setjmp(i8*) |
| 12 declare void @llvm.nacl.longjmp(i8*, i32) | 11 declare void @llvm.nacl.longjmp(i8*, i32) |
| 13 declare i1 @llvm.nacl.atomic.is.lock.free(i32, i8*) | 12 declare i1 @llvm.nacl.atomic.is.lock.free(i32, i8*) |
| 14 | 13 |
| 15 ; These declarations must be here because the function pass expects | 14 ; These declarations must be here because the function pass expects |
| 16 ; to find them. In real life they're inserted by the translator | 15 ; to find them. In real life they're inserted by the translator |
| 17 ; before the function pass runs. | 16 ; before the function pass runs. |
| 18 declare i32 @setjmp(i8*) | 17 declare i32 @setjmp(i8*) |
| 19 declare void @longjmp(i8*, i32) | 18 declare void @longjmp(i8*, i32) |
| 20 | 19 |
| 21 | 20 |
| 22 ; X8664-LABEL: @test_is_lock_free_1( | 21 ; X8664-LABEL: @test_is_lock_free_1( |
| 23 ; X8632-LABEL: @test_is_lock_free_1( | 22 ; X8632-LABEL: @test_is_lock_free_1( |
| 24 ; ARM32-LABEL: @test_is_lock_free_1( | 23 ; ARM32-LABEL: @test_is_lock_free_1( |
| 25 ; MIPS32-LABEL: @test_is_lock_free_1( | 24 ; MIPS32-LABEL: @test_is_lock_free_1( |
| 26 ; ASMJS-LABEL: @test_is_lock_free_1( | |
| 27 ; X8664: ret i1 true | 25 ; X8664: ret i1 true |
| 28 ; X8632: ret i1 true | 26 ; X8632: ret i1 true |
| 29 ; ARM32: ret i1 true | 27 ; ARM32: ret i1 true |
| 30 ; MIPS32: ret i1 true | 28 ; MIPS32: ret i1 true |
| 31 ; ASMJS: ret i1 true | |
| 32 define i1 @test_is_lock_free_1(i8* %ptr) { | 29 define i1 @test_is_lock_free_1(i8* %ptr) { |
| 33 %res = call i1 @llvm.nacl.atomic.is.lock.free(i32 1, i8* %ptr) | 30 %res = call i1 @llvm.nacl.atomic.is.lock.free(i32 1, i8* %ptr) |
| 34 ret i1 %res | 31 ret i1 %res |
| 35 } | 32 } |
| 36 | 33 |
| 37 ; X8664-LABEL: @test_is_lock_free_2( | 34 ; X8664-LABEL: @test_is_lock_free_2( |
| 38 ; X8632-LABEL: @test_is_lock_free_2( | 35 ; X8632-LABEL: @test_is_lock_free_2( |
| 39 ; ARM32-LABEL: @test_is_lock_free_2( | 36 ; ARM32-LABEL: @test_is_lock_free_2( |
| 40 ; MIPS32-LABEL: @test_is_lock_free_2( | 37 ; MIPS32-LABEL: @test_is_lock_free_2( |
| 41 ; ASMJS-LABEL: @test_is_lock_free_2( | |
| 42 ; X8664: ret i1 true | 38 ; X8664: ret i1 true |
| 43 ; X8632: ret i1 true | 39 ; X8632: ret i1 true |
| 44 ; ARM32: ret i1 true | 40 ; ARM32: ret i1 true |
| 45 ; MIPS32: ret i1 true | 41 ; MIPS32: ret i1 true |
| 46 ; ASMJS: ret i1 true | |
| 47 define i1 @test_is_lock_free_2(i16* %ptr) { | 42 define i1 @test_is_lock_free_2(i16* %ptr) { |
| 48 %ptr2 = bitcast i16* %ptr to i8* | 43 %ptr2 = bitcast i16* %ptr to i8* |
| 49 %res = call i1 @llvm.nacl.atomic.is.lock.free(i32 2, i8* %ptr2) | 44 %res = call i1 @llvm.nacl.atomic.is.lock.free(i32 2, i8* %ptr2) |
| 50 ret i1 %res | 45 ret i1 %res |
| 51 } | 46 } |
| 52 | 47 |
| 53 ; X8664-LABEL: @test_is_lock_free_4( | 48 ; X8664-LABEL: @test_is_lock_free_4( |
| 54 ; X8632-LABEL: @test_is_lock_free_4( | 49 ; X8632-LABEL: @test_is_lock_free_4( |
| 55 ; ARM32-LABEL: @test_is_lock_free_4( | 50 ; ARM32-LABEL: @test_is_lock_free_4( |
| 56 ; MIPS32-LABEL: @test_is_lock_free_4( | 51 ; MIPS32-LABEL: @test_is_lock_free_4( |
| 57 ; ASMJS-LABEL: @test_is_lock_free_4( | |
| 58 ; X8664: ret i1 true | 52 ; X8664: ret i1 true |
| 59 ; X8632: ret i1 true | 53 ; X8632: ret i1 true |
| 60 ; ARM32: ret i1 true | 54 ; ARM32: ret i1 true |
| 61 ; MIPS32: ret i1 true | 55 ; MIPS32: ret i1 true |
| 62 ; ASMJS: ret i1 true | |
| 63 define i1 @test_is_lock_free_4(i32* %ptr) { | 56 define i1 @test_is_lock_free_4(i32* %ptr) { |
| 64 %ptr2 = bitcast i32* %ptr to i8* | 57 %ptr2 = bitcast i32* %ptr to i8* |
| 65 %res = call i1 @llvm.nacl.atomic.is.lock.free(i32 4, i8* %ptr2) | 58 %res = call i1 @llvm.nacl.atomic.is.lock.free(i32 4, i8* %ptr2) |
| 66 ret i1 %res | 59 ret i1 %res |
| 67 } | 60 } |
| 68 | 61 |
| 69 ; X8664-LABEL: @test_is_lock_free_8( | 62 ; X8664-LABEL: @test_is_lock_free_8( |
| 70 ; X8632-LABEL: @test_is_lock_free_8( | 63 ; X8632-LABEL: @test_is_lock_free_8( |
| 71 ; ARM32-LABEL: @test_is_lock_free_8( | 64 ; ARM32-LABEL: @test_is_lock_free_8( |
| 72 ; MIPS32-LABEL: @test_is_lock_free_8( | 65 ; MIPS32-LABEL: @test_is_lock_free_8( |
| 73 ; ASMJS-LABEL: @test_is_lock_free_8( | |
| 74 ; X8664: ret i1 true | 66 ; X8664: ret i1 true |
| 75 ; X8632: ret i1 true | 67 ; X8632: ret i1 true |
| 76 ; ARM32: ret i1 true | 68 ; ARM32: ret i1 true |
| 77 ; MIPS32: ret i1 false | 69 ; MIPS32: ret i1 false |
| 78 ; ASMJS: ret i1 false | |
| 79 define i1 @test_is_lock_free_8(i64* %ptr) { | 70 define i1 @test_is_lock_free_8(i64* %ptr) { |
| 80 %ptr2 = bitcast i64* %ptr to i8* | 71 %ptr2 = bitcast i64* %ptr to i8* |
| 81 %res = call i1 @llvm.nacl.atomic.is.lock.free(i32 8, i8* %ptr2) | 72 %res = call i1 @llvm.nacl.atomic.is.lock.free(i32 8, i8* %ptr2) |
| 82 ret i1 %res | 73 ret i1 %res |
| 83 } | 74 } |
| 84 | 75 |
| 85 ; X8664-LABEL: @test_is_lock_free_16( | 76 ; X8664-LABEL: @test_is_lock_free_16( |
| 86 ; X8632-LABEL: @test_is_lock_free_16( | 77 ; X8632-LABEL: @test_is_lock_free_16( |
| 87 ; ARM32-LABEL: @test_is_lock_free_16( | 78 ; ARM32-LABEL: @test_is_lock_free_16( |
| 88 ; MIPS32-LABEL: @test_is_lock_free_16( | 79 ; MIPS32-LABEL: @test_is_lock_free_16( |
| 89 ; ASMJS-LABEL: @test_is_lock_free_16( | |
| 90 ; X8664: ret i1 false | 80 ; X8664: ret i1 false |
| 91 ; X8632: ret i1 false | 81 ; X8632: ret i1 false |
| 92 ; ARM32: ret i1 false | 82 ; ARM32: ret i1 false |
| 93 ; MIPS32: ret i1 false | 83 ; MIPS32: ret i1 false |
| 94 ; ASMJS: ret i1 false | |
| 95 define i1 @test_is_lock_free_16(i128* %ptr) { | 84 define i1 @test_is_lock_free_16(i128* %ptr) { |
| 96 %ptr2 = bitcast i128* %ptr to i8* | 85 %ptr2 = bitcast i128* %ptr to i8* |
| 97 %res = call i1 @llvm.nacl.atomic.is.lock.free(i32 16, i8* %ptr2) | 86 %res = call i1 @llvm.nacl.atomic.is.lock.free(i32 16, i8* %ptr2) |
| 98 ret i1 %res | 87 ret i1 %res |
| 99 } | 88 } |
| OLD | NEW |