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

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

Issue 939073008: Rebased PNaCl localmods in LLVM to 223109 (Closed)
Patch Set: undo localmod Created 5 years, 9 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 ; RUN: opt < %s -rewrite-pnacl-library-calls -S | FileCheck %s -check-prefix=CLE ANED
3 ; Test the RewritePNaClLibraryCalls pass
4
5 declare i32 @setjmp(i64*)
6 declare void @longjmp(i64*, i32)
7
8 ; No declaration or definition of setjmp() should remain.
9 ; CLEANED-NOT: @setjmp
10
11 ; Since the address of longjmp is being taken here, a body is generated
12 ; for it, which does a cast and calls an intrinsic
13
14 ; CHECK: define internal void @longjmp(i64* %env, i32 %val) {
15 ; CHECK: entry:
16 ; CHECK: %jmp_buf_i8 = bitcast i64* %env to i8*
17 ; CHECK: call void @llvm.nacl.longjmp(i8* %jmp_buf_i8, i32 %val)
18 ; CHECK: unreachable
19 ; CHECK: }
20
21 define i32 @call_setjmp(i64* %arg) {
22 ; CHECK-NOT: call i32 @setjmp
23 ; CHECK: %jmp_buf_i8 = bitcast i64* %arg to i8*
24 ; CHECK-NEXT: %val = call i32 @llvm.nacl.setjmp(i8* %jmp_buf_i8)
25 %val = call i32 @setjmp(i64* %arg)
26 ret i32 %val
27 }
28
29 define void @call_longjmp(i64* %arg, i32 %num) {
30 ; CHECK-NOT: call void @longjmp
31 ; CHECK: %jmp_buf_i8 = bitcast i64* %arg to i8*
32 ; CHECK-NEXT: call void @llvm.nacl.longjmp(i8* %jmp_buf_i8, i32 %num)
33 call void @longjmp(i64* %arg, i32 %num)
34 ret void
35 }
36
37 define i32 @takeaddr_longjmp(i64* %arg, i32 %num) {
38 %fp = alloca void (i64*, i32)*, align 8
39 ; CHECK: store void (i64*, i32)* @longjmp, void (i64*, i32)** %fp
40 store void (i64*, i32)* @longjmp, void (i64*, i32)** %fp, align 8
41 ret i32 7
42 }
43
44 ; A more complex example with a number of calls in several BBs
45 define void @multiple_calls(i64* %arg, i32 %num) {
46 entryblock:
47 ; CHECK: entryblock
48 ; CHECK: bitcast
49 ; CHECK-NEXT: call void @llvm.nacl.longjmp
50 call void @longjmp(i64* %arg, i32 %num)
51 br label %block1
52 block1:
53 ; CHECK: block1
54 ; CHECK: bitcast
55 ; CHECK-NEXT: call void @llvm.nacl.longjmp
56 call void @longjmp(i64* %arg, i32 %num)
57 ; CHECK: call i32 @llvm.nacl.setjmp
58 %val = call i32 @setjmp(i64* %arg)
59 %num2 = add i32 %val, %num
60 ; CHECK: bitcast
61 ; CHECK-NEXT: call void @llvm.nacl.longjmp
62 call void @longjmp(i64* %arg, i32 %num2)
63 br label %exitblock
64 exitblock:
65 %num3 = add i32 %num, %num
66 call void @longjmp(i64* %arg, i32 %num3)
67 %num4 = add i32 %num, %num3
68 ; CHECK: bitcast
69 ; CHECK-NEXT: call void @llvm.nacl.longjmp
70 call void @longjmp(i64* %arg, i32 %num4)
71 ret void
72 }
73
74 ; CHECK: declare i32 @llvm.nacl.setjmp(i8*)
75 ; CHECK: declare void @llvm.nacl.longjmp(i8*, i32)
76
OLDNEW
« no previous file with comments | « test/Transforms/NaCl/rewrite-setjmp-store-error.ll ('k') | test/Transforms/NaCl/simplify-allocas.ll » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698