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

Side by Side Diff: test/Transforms/NaCl/rewrite-setlongjmp-calls.ll

Issue 14617017: Adding a pass - RewritePNaClLibraryCalls, that replaces known library calls with stable bitcode int… (Closed) Base URL: http://git.chromium.org/native_client/pnacl-llvm.git@master
Patch Set: Adding forgotten test Created 7 years, 7 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
OLDNEW
(Empty)
1 ; RUN: opt < %s -rewrite-pnacl-library-calls -S | FileCheck %s
2 ; Test the RewritePNaClLibraryCalls pass
3
4 declare i32 @setjmp(i64*)
5 declare void @longjmp(i64*, i32)
6
7 define i32 @call_setjmp(i64* %arg) {
8 ; CHECK-NOT: call i32 @setjmp
9 ; CHECK: %jmp_buf_i8 = bitcast i64* %arg to i8*
10 ; CHECK-NEXT: %val = call i32 @llvm.nacl.setjmp(i8* %jmp_buf_i8)
11 %val = call i32 @setjmp(i64* %arg)
12 ret i32 %val
13 }
14
15 define void @call_longjmp(i64* %arg, i32 %num) {
16 ; CHECK-NOT: call void @longjmp
17 ; CHECK: %jmp_buf_i8 = bitcast i64* %arg to i8*
18 ; CHECK-NEXT: call void @llvm.nacl.longjmp(i8* %jmp_buf_i8, i32 %num)
19 call void @longjmp(i64* %arg, i32 %num)
20 ret void
21 }
22
23 define i32 @takeaddr_longjmp(i64* %arg, i32 %num) {
24 %fp = alloca void (i64*, i32)*, align 8
25 ; CHECK-NOT: store void (i64*, i32)* @longjmp
26 ; CHECK: store void (i64*, i32)* @__nacl_wrap_longjmp, void (i64*, i32)** %fp
27 store void (i64*, i32)* @longjmp, void (i64*, i32)** %fp, align 8
28 ret i32 7
29 }
30
31 ; A more complex example with a number of calls in several BBs
32 define void @multiple_calls(i64* %arg, i32 %num) {
33 entryblock:
34 ; CHECK: entryblock
35 ; CHECK: bitcast
36 ; CHECK-NEXT: call void @llvm.nacl.longjmp
37 call void @longjmp(i64* %arg, i32 %num)
38 br label %block1
39 block1:
40 ; CHECK: block1
41 ; CHECK: bitcast
42 ; CHECK-NEXT: call void @llvm.nacl.longjmp
43 call void @longjmp(i64* %arg, i32 %num)
44 ; CHECK: call i32 @llvm.nacl.setjmp
45 %val = call i32 @setjmp(i64* %arg)
46 %num2 = add i32 %val, %num
47 ; CHECK: bitcast
48 ; CHECK-NEXT: call void @llvm.nacl.longjmp
49 call void @longjmp(i64* %arg, i32 %num2)
50 br label %exitblock
51 exitblock:
52 %num3 = add i32 %num, %num
53 call void @longjmp(i64* %arg, i32 %num3)
54 %num4 = add i32 %num, %num3
55 ; CHECK: bitcast
56 ; CHECK-NEXT: call void @llvm.nacl.longjmp
57 call void @longjmp(i64* %arg, i32 %num4)
58 ret void
59 }
60
61 ; CHECK: declare i32 @llvm.nacl.setjmp(i8*)
62 ; CHECK: declare void @llvm.nacl.longjmp(i8*, i32)
63
64 ; CHECK: define private void @__nacl_wrap_longjmp(i64* %env, i32 %val) {
65 ; CHECK-NEXT: entry:
66 ; CHECK-NEXT: %jmp_buf_i8 = bitcast i64* %env to i8*
67 ; CHECK-NEXT: call void @llvm.nacl.longjmp(i8* %jmp_buf_i8, i32 %val)
68 ; CHECK-NEXT: ret void
69 ; CHECK-NEXT: }
70
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698