78 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 52; RUN: opt -S -passes=gvn-sink < %s | FileCheck %s3 4; Make sure we do not sink lifetime markers if this would introduce a5; lifetime with non-alloca operand.6 7define void @test_cant_sink(i1 %c) {8; CHECK-LABEL: define void @test_cant_sink(9; CHECK-SAME: i1 [[C:%.*]]) {10; CHECK-NEXT: [[A:%.*]] = alloca i8, align 111; CHECK-NEXT: [[B:%.*]] = alloca i8, align 112; CHECK-NEXT: call void @llvm.lifetime.start.p0(ptr [[A]])13; CHECK-NEXT: call void @llvm.lifetime.start.p0(ptr [[B]])14; CHECK-NEXT: br i1 [[C]], label %[[IF:.*]], label %[[ELSE:.*]]15; CHECK: [[IF]]:16; CHECK-NEXT: store i64 1, ptr [[A]], align 417; CHECK-NEXT: call void @llvm.lifetime.end.p0(ptr [[A]])18; CHECK-NEXT: br label %[[JOIN:.*]]19; CHECK: [[ELSE]]:20; CHECK-NEXT: store i64 1, ptr [[B]], align 421; CHECK-NEXT: call void @llvm.lifetime.end.p0(ptr [[B]])22; CHECK-NEXT: br label %[[JOIN]]23; CHECK: [[JOIN]]:24; CHECK-NEXT: ret void25;26 %a = alloca i827 %b = alloca i828 call void @llvm.lifetime.start(ptr %a)29 call void @llvm.lifetime.start(ptr %b)30 br i1 %c, label %if, label %else31 32if:33 store i64 1, ptr %a34 call void @llvm.lifetime.end(ptr %a)35 br label %join36 37else:38 store i64 1, ptr %b39 call void @llvm.lifetime.end(ptr %b)40 br label %join41 42join:43 ret void44}45 46define void @test_can_sink(i1 %c) {47; CHECK-LABEL: define void @test_can_sink(48; CHECK-SAME: i1 [[C:%.*]]) {49; CHECK-NEXT: [[A:%.*]] = alloca i8, align 150; CHECK-NEXT: call void @llvm.lifetime.start.p0(ptr [[A]])51; CHECK-NEXT: br i1 [[C]], label %[[IF:.*]], label %[[ELSE:.*]]52; CHECK: [[IF]]:53; CHECK-NEXT: br label %[[JOIN:.*]]54; CHECK: [[ELSE]]:55; CHECK-NEXT: br label %[[JOIN]]56; CHECK: [[JOIN]]:57; CHECK-NEXT: store i64 1, ptr [[A]], align 458; CHECK-NEXT: call void @llvm.lifetime.end.p0(ptr [[A]])59; CHECK-NEXT: ret void60;61 %a = alloca i862 call void @llvm.lifetime.start(ptr %a)63 br i1 %c, label %if, label %else64 65if:66 store i64 1, ptr %a67 call void @llvm.lifetime.end(ptr %a)68 br label %join69 70else:71 store i64 1, ptr %a72 call void @llvm.lifetime.end(ptr %a)73 br label %join74 75join:76 ret void77}78