blob: a95c836b77de62a82bf419d1ed5110871b9aea98 [file] [log] [blame]
Nick Lewycky6d55f222011-05-22 05:22:10 +00001; RUN: opt -inline %s -S -o - | FileCheck %s
2
3declare void @llvm.lifetime.start(i64, i8*)
4declare void @llvm.lifetime.end(i64, i8*)
5
6define void @helper_both_markers() {
7 %a = alloca i8
8 call void @llvm.lifetime.start(i64 1, i8* %a)
9 call void @llvm.lifetime.end(i64 1, i8* %a)
10 ret void
11}
12
13define void @test_both_markers() {
14; CHECK: @test_both_markers
15; CHECK: llvm.lifetime.start(i64 1
16; CHECK-NEXT: llvm.lifetime.end(i64 1
17 call void @helper_both_markers()
18; CHECK-NEXT: llvm.lifetime.start(i64 1
19; CHECK-NEXT: llvm.lifetime.end(i64 1
20 call void @helper_both_markers()
21; CHECK-NEXT: ret void
22 ret void
23}
24
25;; Without this, the inliner will simplify out @test_no_marker before adding
26;; any lifetime markers.
27declare void @use(i8* %a)
28
29define void @helper_no_markers() {
30 %a = alloca i8
31 call void @use(i8* %a)
32 ret void
33}
34
35;; We can't use CHECK-NEXT because there's an extra call void @use in between.
36;; Instead, we use CHECK-NOT to verify that there are no other lifetime calls.
37define void @test_no_marker() {
38; CHECK: @test_no_marker
39; CHECK-NOT: lifetime
40; CHECK: llvm.lifetime.start(i64 -1
41; CHECK-NOT: lifetime
42; CHECK: llvm.lifetime.end(i64 -1
43 call void @helper_no_markers()
44; CHECK-NOT: lifetime
45; CHECK: llvm.lifetime.start(i64 -1
46; CHECK-NOT: lifetime
47; CHECK: llvm.lifetime.end(i64 -1
48 call void @helper_no_markers()
49; CHECK-NOT: lifetime
50; CHECK: ret void
51 ret void
52}
53
54define void @helper_two_casts() {
55 %a = alloca i32
56 %b = bitcast i32* %a to i8*
57 call void @llvm.lifetime.start(i64 4, i8* %b)
58 %c = bitcast i32* %a to i8*
59 call void @llvm.lifetime.end(i64 4, i8* %c)
60 ret void
61}
62
63define void @test_two_casts() {
64; CHECK: @test_two_casts
65; CHECK-NOT: lifetime
66; CHECK: llvm.lifetime.start(i64 4
67; CHECK-NOT: lifetime
68; CHECK: llvm.lifetime.end(i64 4
69 call void @helper_two_casts()
70; CHECK-NOT: lifetime
71; CHECK: llvm.lifetime.start(i64 4
72; CHECK-NOT: lifetime
73; CHECK: llvm.lifetime.end(i64 4
74 call void @helper_two_casts()
75; CHECK-NOT: lifetime
76; CHECK: ret void
77 ret void
78}