brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.5 KiB · 88271db Raw
122 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=dse -S | FileCheck %s3; RUN: opt < %s -aa-pipeline=basic-aa -passes=dse -S | FileCheck %s4 5declare void @use(ptr)6 7define void @test1() {8; CHECK-LABEL: @test1(9; CHECK-NEXT:    [[A:%.*]] = alloca i64, align 810; CHECK-NEXT:    call void @use(ptr [[A]])11; CHECK-NEXT:    [[PTR2:%.*]] = getelementptr i8, ptr [[A]], i32 112; CHECK-NEXT:    store i8 10, ptr [[A]], align 113; CHECK-NEXT:    store i8 20, ptr [[PTR2]], align 114; CHECK-NEXT:    [[LV:%.*]] = load i64, ptr [[A]], align 415; CHECK-NEXT:    store i8 0, ptr [[A]], align 116; CHECK-NEXT:    call void @use(ptr [[A]])17; CHECK-NEXT:    ret void18;19  %a = alloca i6420  call void @use(ptr %a)21  %ptr2 = getelementptr i8, ptr %a, i32 122 23  store i8 10, ptr %a24  store i8 20, ptr %ptr225  %lv = load i64, ptr %a26  store i8 0, ptr %a27 28  call void @use(ptr %a)29  ret void30}31 32define void @test2(i1 %arg) {33; CHECK-LABEL: @test2(34; CHECK-NEXT:    [[A:%.*]] = alloca i64, align 835; CHECK-NEXT:    call void @use(ptr [[A]])36; CHECK-NEXT:    [[PTR2:%.*]] = getelementptr i8, ptr [[A]], i32 137; CHECK-NEXT:    store i8 10, ptr [[A]], align 138; CHECK-NEXT:    store i8 20, ptr [[PTR2]], align 139; CHECK-NEXT:    br i1 %arg, label [[BB1:%.*]], label [[END:%.*]]40; CHECK:       bb1:41; CHECK-NEXT:    [[LV:%.*]] = load i64, ptr [[A]], align 442; CHECK-NEXT:    br label [[END]]43; CHECK:       end:44; CHECK-NEXT:    store i8 0, ptr [[A]], align 145; CHECK-NEXT:    call void @use(ptr [[A]])46; CHECK-NEXT:    ret void47;48  %a = alloca i6449  call void @use(ptr %a)50  %ptr2 = getelementptr i8, ptr %a, i32 151 52  store i8 10, ptr %a53  store i8 20, ptr %ptr254  br i1 %arg, label %bb1, label %end55 56bb1:57  %lv = load i64, ptr %a58  br label %end59 60end:61  store i8 0, ptr %a62  call void @use(ptr %a)63  ret void64}65 66; The store to %a0 is dead, because only %a1 is read later.67define void @test3(i1 %c) {68; CHECK-LABEL: @test3(69; CHECK-NEXT:    [[A:%.*]] = alloca [2 x i8], align 170; CHECK-NEXT:    [[A1:%.*]] = getelementptr [2 x i8], ptr [[A]], i32 0, i32 171; CHECK-NEXT:    br i1 [[C:%.*]], label [[IF:%.*]], label [[ELSE:%.*]]72; CHECK:       if:73; CHECK-NEXT:    store [2 x i8] zeroinitializer, ptr [[A]], align 174; CHECK-NEXT:    br label [[ELSE]]75; CHECK:       else:76; CHECK-NEXT:    [[TMP1:%.*]] = load i8, ptr [[A1]], align 177; CHECK-NEXT:    ret void78;79  %a = alloca [2 x i8]80  %a1 = getelementptr [2 x i8], ptr %a, i32 0, i32 181  store i8 1, ptr %a82  br i1 %c, label %if, label %else83 84if:85  store [2 x i8] zeroinitializer, ptr %a86  br label %else87 88else:89  load i8, ptr %a190  ret void91}92 93; Variation on the previous test case, where only the store to %a is dead,94; but not the one to %a1. This tests for a potential caching bug.95define void @test4(i1 %c) {96; CHECK-LABEL: @test4(97; CHECK-NEXT:    [[A:%.*]] = alloca [2 x i8], align 198; CHECK-NEXT:    [[A1:%.*]] = getelementptr [2 x i8], ptr [[A]], i32 0, i32 199; CHECK-NEXT:    store i8 1, ptr [[A1]], align 1100; CHECK-NEXT:    br i1 [[C:%.*]], label [[IF:%.*]], label [[ELSE:%.*]]101; CHECK:       if:102; CHECK-NEXT:    store [2 x i8] zeroinitializer, ptr [[A]], align 1103; CHECK-NEXT:    br label [[ELSE]]104; CHECK:       else:105; CHECK-NEXT:    [[TMP1:%.*]] = load i8, ptr [[A1]], align 1106; CHECK-NEXT:    ret void107;108  %a = alloca [2 x i8]109  %a1 = getelementptr [2 x i8], ptr %a, i32 0, i32 1110  store i8 1, ptr %a1111  store i8 1, ptr %a112  br i1 %c, label %if, label %else113 114if:115  store [2 x i8] zeroinitializer, ptr %a116  br label %else117 118else:119  load i8, ptr %a1120  ret void121}122