brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.7 KiB · 77bf5de Raw
244 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=dse -S | FileCheck %s3 4target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"5 6 7define void @test2(ptr noalias %P) {8; CHECK-LABEL: @test2(9; CHECK-NEXT:    br i1 true, label [[BB1:%.*]], label [[BB2:%.*]]10; CHECK:       bb1:11; CHECK-NEXT:    br label [[BB3:%.*]]12; CHECK:       bb2:13; CHECK-NEXT:    br label [[BB3]]14; CHECK:       bb3:15; CHECK-NEXT:    store i32 0, ptr [[P:%.*]], align 416; CHECK-NEXT:    ret void17;18  store i32 1, ptr %P19  br i1 true, label %bb1, label %bb220bb1:21  br label %bb322bb2:23  br label %bb324bb3:25  store i32 0, ptr %P26  ret void27}28 29define void @test3(ptr noalias %P) {30; CHECK-LABEL: @test3(31; CHECK-NEXT:    store i32 0, ptr [[P:%.*]], align 432; CHECK-NEXT:    br i1 true, label [[BB1:%.*]], label [[BB2:%.*]]33; CHECK:       bb1:34; CHECK-NEXT:    br label [[BB3:%.*]]35; CHECK:       bb2:36; CHECK-NEXT:    store i32 1, ptr [[P]], align 437; CHECK-NEXT:    br label [[BB3]]38; CHECK:       bb3:39; CHECK-NEXT:    ret void40;41  store i32 0, ptr %P42  br i1 true, label %bb1, label %bb243bb1:44  br label %bb345bb2:46  store i32 1, ptr %P47  br label %bb348bb3:49  ret void50}51 52 53define void @test7(ptr noalias %P, ptr noalias %Q) {54; CHECK-LABEL: @test7(55; CHECK-NEXT:    br i1 true, label [[BB1:%.*]], label [[BB2:%.*]]56; CHECK:       bb1:57; CHECK-NEXT:    [[TMP1:%.*]] = load i32, ptr [[P:%.*]], align 458; CHECK-NEXT:    br label [[BB3:%.*]]59; CHECK:       bb2:60; CHECK-NEXT:    br label [[BB3]]61; CHECK:       bb3:62; CHECK-NEXT:    store i32 0, ptr [[Q:%.*]], align 463; CHECK-NEXT:    store i32 0, ptr [[P]], align 464; CHECK-NEXT:    ret void65;66  store i32 1, ptr %Q67  br i1 true, label %bb1, label %bb268bb1:69  load i32, ptr %P70  br label %bb371bb2:72  br label %bb373bb3:74  store i32 0, ptr %Q75  store i32 0, ptr %P76  ret void77}78 79define i32 @test22(ptr %P, ptr noalias %Q, ptr %R) {80; CHECK-LABEL: @test22(81; CHECK-NEXT:    store i32 2, ptr [[P:%.*]], align 482; CHECK-NEXT:    store i32 3, ptr [[Q:%.*]], align 483; CHECK-NEXT:    [[L:%.*]] = load i32, ptr [[R:%.*]], align 484; CHECK-NEXT:    ret i32 [[L]]85;86  store i32 1, ptr %Q87  store i32 2, ptr %P88  store i32 3, ptr %Q89  %l = load i32, ptr %R90  ret i32 %l91}92 93define void @test9(ptr noalias %P) {94; CHECK-LABEL: @test9(95; CHECK-NEXT:    store i32 0, ptr [[P:%.*]], align 496; CHECK-NEXT:    br i1 true, label [[BB1:%.*]], label [[BB2:%.*]]97; CHECK:       bb1:98; CHECK-NEXT:    br label [[BB3:%.*]]99; CHECK:       bb2:100; CHECK-NEXT:    ret void101; CHECK:       bb3:102; CHECK-NEXT:    store i32 1, ptr [[P]], align 4103; CHECK-NEXT:    ret void104;105  store i32 0, ptr %P106  br i1 true, label %bb1, label %bb2107bb1:108  br label %bb3109bb2:110  ret void111bb3:112  store i32 1, ptr %P113  ret void114}115 116; We cannot eliminate `store i32 0, ptr %P`, as it is read by the later load.117; Make sure that we check the uses of `store i32 1, ptr %P.1 which does not118; alias %P. Note that uses point to the *first* def that may alias.119define void @overlapping_read(ptr %P) {120; CHECK-LABEL: @overlapping_read(121; CHECK-NEXT:    store i32 0, ptr [[P:%.*]], align 4122; CHECK-NEXT:    [[P_1:%.*]] = getelementptr i32, ptr [[P]], i32 1123; CHECK-NEXT:    store i32 1, ptr [[P_1]], align 4124; CHECK-NEXT:    [[LV:%.*]] = load i64, ptr [[P]], align 8125; CHECK-NEXT:    br i1 true, label [[BB1:%.*]], label [[BB2:%.*]]126; CHECK:       bb1:127; CHECK-NEXT:    br label [[BB3:%.*]]128; CHECK:       bb2:129; CHECK-NEXT:    br label [[BB3]]130; CHECK:       bb3:131; CHECK-NEXT:    store i32 2, ptr [[P]], align 4132; CHECK-NEXT:    ret void133;134  store i32 0, ptr %P135  %P.1 = getelementptr i32, ptr %P, i32 1136  store i32 1, ptr %P.1137 138  %lv = load i64, ptr %P139  br i1 true, label %bb1, label %bb2140bb1:141  br label %bb3142bb2:143  br label %bb3144bb3:145  store i32 2, ptr %P146  ret void147}148 149define void @test10(ptr %P) {150; CHECK-LABEL: @test10(151; CHECK-NEXT:    store i32 0, ptr [[P:%.*]], align 4152; CHECK-NEXT:    br i1 true, label [[BB1:%.*]], label [[BB2:%.*]]153; CHECK:       bb1:154; CHECK-NEXT:    store i32 1, ptr [[P]], align 4155; CHECK-NEXT:    br label [[BB3:%.*]]156; CHECK:       bb2:157; CHECK-NEXT:    ret void158; CHECK:       bb3:159; CHECK-NEXT:    ret void160;161  store i32 0, ptr %P162  br i1 true, label %bb1, label %bb2163bb1:164  store i32 1, ptr %P165  br label %bb3166bb2:167  ret void168bb3:169  ret void170}171 172 173define void @test11() {174; CHECK-LABEL: @test11(175; CHECK-NEXT:    br i1 true, label [[BB1:%.*]], label [[BB2:%.*]]176; CHECK:       bb1:177; CHECK-NEXT:    br label [[BB3:%.*]]178; CHECK:       bb2:179; CHECK-NEXT:    ret void180; CHECK:       bb3:181; CHECK-NEXT:    ret void182;183  %P = alloca i32184  store i32 0, ptr %P185  br i1 true, label %bb1, label %bb2186bb1:187  store i32 0, ptr %P188  br label %bb3189bb2:190  ret void191bb3:192  ret void193}194 195 196define void @test12(ptr %P) {197; CHECK-LABEL: @test12(198; CHECK-NEXT:    br i1 true, label [[BB1:%.*]], label [[BB2:%.*]]199; CHECK:       bb1:200; CHECK-NEXT:    store i32 1, ptr [[P:%.*]], align 4201; CHECK-NEXT:    br label [[BB3:%.*]]202; CHECK:       bb2:203; CHECK-NEXT:    store i32 1, ptr [[P]], align 4204; CHECK-NEXT:    ret void205; CHECK:       bb3:206; CHECK-NEXT:    ret void207;208  store i32 0, ptr %P209  br i1 true, label %bb1, label %bb2210bb1:211  store i32 1, ptr %P212  br label %bb3213bb2:214  store i32 1, ptr %P215  ret void216bb3:217  ret void218}219 220 221define void @test13(ptr %P) {222; CHECK-LABEL: @test13(223; CHECK-NEXT:    br i1 true, label [[BB1:%.*]], label [[BB2:%.*]]224; CHECK:       bb1:225; CHECK-NEXT:    store i32 1, ptr [[P:%.*]], align 4226; CHECK-NEXT:    br label [[BB3:%.*]]227; CHECK:       bb2:228; CHECK-NEXT:    store i32 1, ptr [[P]], align 4229; CHECK-NEXT:    br label [[BB3]]230; CHECK:       bb3:231; CHECK-NEXT:    ret void232;233  store i32 0, ptr %P234  br i1 true, label %bb1, label %bb2235bb1:236  store i32 1, ptr %P237  br label %bb3238bb2:239  store i32 1, ptr %P240  br label %bb3241bb3:242  ret void243}244