1 ; RUN: opt -inline %s -S -o - | FileCheck %s 2 3 declare void @llvm.lifetime.start(i64, i8*) 4 declare void @llvm.lifetime.end(i64, i8*) 5 6 define 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 13 define 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. 27 declare void @use(i8* %a) 28 29 define 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. 37 define 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 54 define 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 63 define 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 } 79