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 |