brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.2 KiB · f8731e5 Raw
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