brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.3 KiB · e70bea2 Raw
202 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes='loop-mssa(simple-loop-unswitch<nontrivial>),loop-mssa(simple-loop-unswitch<nontrivial>),verify<loops>' -S < %s | FileCheck %s3 4; Below bugs have caused endless unswitch.5;6; https://bugs.llvm.org/show_bug.cgi?id=502797; https://bugs.llvm.org/show_bug.cgi?id=503028;9; This test's loop should be unswitched only one time even though we run10; SimpleLoopUnswitch pass two times.11 12@a = dso_local local_unnamed_addr global i32 0, align 413@c = dso_local local_unnamed_addr global i32 0, align 414@b = dso_local local_unnamed_addr global i8 0, align 115 16; Function Attrs: nofree norecurse nosync nounwind uwtable17define dso_local void @d() {18; CHECK-LABEL: @d(19; CHECK-NEXT:  entry:20; CHECK-NEXT:    br label [[FOR_COND:%.*]]21; CHECK:       for.cond:22; CHECK-NEXT:    br i1 false, label [[FOR_END:%.*]], label [[FOR_COND]]23; CHECK:       for.end:24; CHECK-NEXT:    [[TMP0:%.*]] = load i16, ptr null, align 225; CHECK-NEXT:    [[TMP1:%.*]] = icmp eq i16 [[TMP0]], 026; CHECK-NEXT:    br i1 [[TMP1]], label [[FOR_END_SPLIT:%.*]], label [[FOR_END_SPLIT_US:%.*]]27; CHECK:       for.end.split.us:28; CHECK-NEXT:    br label [[G_US:%.*]]29; CHECK:       g.us:30; CHECK-NEXT:    br label [[G_SPLIT_US6:%.*]]31; CHECK:       for.cond1.us1:32; CHECK-NEXT:    [[TMP2:%.*]] = load i16, ptr null, align 233; CHECK-NEXT:    [[TOBOOL4_NOT_US:%.*]] = icmp eq i16 [[TMP2]], 034; CHECK-NEXT:    br i1 [[TOBOOL4_NOT_US]], label [[FOR_COND5_PREHEADER_US4:%.*]], label [[G_LOOPEXIT_US:%.*]]35; CHECK:       for.cond5.us2:36; CHECK-NEXT:    br i1 false, label [[FOR_COND1_LOOPEXIT_US5:%.*]], label [[FOR_INC_US3:%.*]]37; CHECK:       for.inc.us3:38; CHECK-NEXT:    store i8 0, ptr @b, align 139; CHECK-NEXT:    br label [[FOR_COND5_US2:%.*]]40; CHECK:       for.cond5.preheader.us4:41; CHECK-NEXT:    br label [[FOR_COND5_US2]]42; CHECK:       for.cond1.loopexit.us5:43; CHECK-NEXT:    br label [[FOR_COND1_US1:%.*]], !llvm.loop [[LOOP0:![0-9]+]]44; CHECK:       g.loopexit.us:45; CHECK-NEXT:    br label [[G_US]]46; CHECK:       g.split.us6:47; CHECK-NEXT:    br label [[FOR_COND1_US1]]48; CHECK:       for.end.split:49; CHECK-NEXT:    br label [[G:%.*]]50; CHECK:       g.loopexit:51; CHECK-NEXT:    br label [[G]], !llvm.loop [[LOOP2:![0-9]+]]52; CHECK:       g:53; CHECK-NEXT:    [[TMP3:%.*]] = load i16, ptr null, align 254; CHECK-NEXT:    [[TMP4:%.*]] = icmp eq i16 [[TMP3]], 055; CHECK-NEXT:    br i1 [[TMP4]], label [[G_SPLIT_US:%.*]], label [[G_SPLIT:%.*]]56; CHECK:       g.split.us:57; CHECK-NEXT:    br label [[FOR_COND1_US:%.*]]58; CHECK:       for.cond1.us:59; CHECK-NEXT:    br label [[FOR_COND5_PREHEADER_US:%.*]]60; CHECK:       for.cond5.us:61; CHECK-NEXT:    br i1 false, label [[FOR_COND1_LOOPEXIT_US:%.*]], label [[FOR_INC_US:%.*]]62; CHECK:       for.inc.us:63; CHECK-NEXT:    store i8 0, ptr @b, align 164; CHECK-NEXT:    br label [[FOR_COND5_US:%.*]]65; CHECK:       for.cond5.preheader.us:66; CHECK-NEXT:    br label [[FOR_COND5_US]]67; CHECK:       for.cond1.loopexit.us:68; CHECK-NEXT:    br label [[FOR_COND1_US]]69; CHECK:       g.split:70; CHECK-NEXT:    br label [[FOR_COND1:%.*]]71; CHECK:       for.cond1.loopexit:72; CHECK-NEXT:    br label [[FOR_COND1]], !llvm.loop [[LOOP0]]73; CHECK:       for.cond1:74; CHECK-NEXT:    [[TMP5:%.*]] = load i16, ptr null, align 275; CHECK-NEXT:    [[TOBOOL4_NOT:%.*]] = icmp eq i16 [[TMP5]], 076; CHECK-NEXT:    br i1 [[TOBOOL4_NOT]], label [[FOR_COND5_PREHEADER:%.*]], label [[G_LOOPEXIT:%.*]]77; CHECK:       for.cond5.preheader:78; CHECK-NEXT:    br label [[FOR_COND5:%.*]]79; CHECK:       for.cond5:80; CHECK-NEXT:    br i1 false, label [[FOR_COND1_LOOPEXIT:%.*]], label [[FOR_INC:%.*]]81; CHECK:       for.inc:82; CHECK-NEXT:    store i8 0, ptr @b, align 183; CHECK-NEXT:    br label [[FOR_COND5]]84;85entry:86  br label %for.cond87 88for.cond:                                         ; preds = %for.cond, %entry89  br i1 false, label %for.end, label %for.cond90 91for.end:                                          ; preds = %for.cond92  br label %g93 94g:                                                ; preds = %for.cond1, %for.end95  br label %for.cond196 97for.cond1:                                        ; preds = %for.cond5, %g98  %0 = load i16, ptr null, align 299  %tobool4.not = icmp eq i16 %0, 0100  br i1 %tobool4.not, label %for.cond5, label %g101 102for.cond5:                                        ; preds = %for.inc, %for.cond1103  br i1 false, label %for.cond1, label %for.inc104 105for.inc:                                          ; preds = %for.cond5106  store i8 0, ptr @b, align 1107  br label %for.cond5108}109 110define void @e(ptr %p) {111; CHECK-LABEL: @e(112; CHECK-NEXT:  entry:113; CHECK-NEXT:    br label [[FOR_COND:%.*]]114; CHECK:       for.cond:115; CHECK-NEXT:    br i1 false, label [[FOR_END:%.*]], label [[FOR_COND]]116; CHECK:       for.end:117; CHECK-NEXT:    [[TMP0:%.*]] = load i16, ptr [[P:%.*]], align 2118; CHECK-NEXT:    [[TMP1:%.*]] = trunc i16 [[TMP0]] to i1119; CHECK-NEXT:    br i1 [[TMP1]], label [[FOR_END_SPLIT:%.*]], label [[FOR_END_SPLIT_US:%.*]]120; CHECK:       for.end.split.us:121; CHECK-NEXT:    br label [[G_US:%.*]]122; CHECK:       g.us:123; CHECK-NEXT:    br label [[G_SPLIT_US6:%.*]]124; CHECK:       for.cond1.us1:125; CHECK-NEXT:    [[TMP2:%.*]] = load i16, ptr [[P]], align 2126; CHECK-NEXT:    [[TOBOOL4_NOT_US:%.*]] = trunc i16 [[TMP2]] to i1127; CHECK-NEXT:    br i1 [[TOBOOL4_NOT_US]], label [[FOR_COND5_PREHEADER_US4:%.*]], label [[G_LOOPEXIT_US:%.*]]128; CHECK:       for.cond5.us2:129; CHECK-NEXT:    br i1 false, label [[FOR_COND1_LOOPEXIT_US5:%.*]], label [[FOR_INC_US3:%.*]]130; CHECK:       for.inc.us3:131; CHECK-NEXT:    store i8 0, ptr @b, align 1132; CHECK-NEXT:    br label [[FOR_COND5_US2:%.*]]133; CHECK:       for.cond5.preheader.us4:134; CHECK-NEXT:    br label [[FOR_COND5_US2]]135; CHECK:       for.cond1.loopexit.us5:136; CHECK-NEXT:    br label [[FOR_COND1_US1:%.*]], !llvm.loop [[LOOP3:![0-9]+]]137; CHECK:       g.loopexit.us:138; CHECK-NEXT:    br label [[G_US]]139; CHECK:       g.split.us6:140; CHECK-NEXT:    br label [[FOR_COND1_US1]]141; CHECK:       for.end.split:142; CHECK-NEXT:    br label [[G:%.*]]143; CHECK:       g.loopexit:144; CHECK-NEXT:    br label [[G]], !llvm.loop [[LOOP4:![0-9]+]]145; CHECK:       g:146; CHECK-NEXT:    [[TMP3:%.*]] = load i16, ptr [[P]], align 2147; CHECK-NEXT:    [[TMP4:%.*]] = trunc i16 [[TMP3]] to i1148; CHECK-NEXT:    br i1 [[TMP4]], label [[G_SPLIT_US:%.*]], label [[G_SPLIT:%.*]]149; CHECK:       g.split.us:150; CHECK-NEXT:    br label [[FOR_COND1_US:%.*]]151; CHECK:       for.cond1.us:152; CHECK-NEXT:    br label [[FOR_COND5_PREHEADER_US:%.*]]153; CHECK:       for.cond5.us:154; CHECK-NEXT:    br i1 false, label [[FOR_COND1_LOOPEXIT_US:%.*]], label [[FOR_INC_US:%.*]]155; CHECK:       for.inc.us:156; CHECK-NEXT:    store i8 0, ptr @b, align 1157; CHECK-NEXT:    br label [[FOR_COND5_US:%.*]]158; CHECK:       for.cond5.preheader.us:159; CHECK-NEXT:    br label [[FOR_COND5_US]]160; CHECK:       for.cond1.loopexit.us:161; CHECK-NEXT:    br label [[FOR_COND1_US]]162; CHECK:       g.split:163; CHECK-NEXT:    br label [[FOR_COND1:%.*]]164; CHECK:       for.cond1.loopexit:165; CHECK-NEXT:    br label [[FOR_COND1]], !llvm.loop [[LOOP3]]166; CHECK:       for.cond1:167; CHECK-NEXT:    [[TMP5:%.*]] = load i16, ptr [[P]], align 2168; CHECK-NEXT:    [[TOBOOL4_NOT:%.*]] = trunc i16 [[TMP5]] to i1169; CHECK-NEXT:    br i1 [[TOBOOL4_NOT]], label [[FOR_COND5_PREHEADER:%.*]], label [[G_LOOPEXIT:%.*]]170; CHECK:       for.cond5.preheader:171; CHECK-NEXT:    br label [[FOR_COND5:%.*]]172; CHECK:       for.cond5:173; CHECK-NEXT:    br i1 false, label [[FOR_COND1_LOOPEXIT:%.*]], label [[FOR_INC:%.*]]174; CHECK:       for.inc:175; CHECK-NEXT:    store i8 0, ptr @b, align 1176; CHECK-NEXT:    br label [[FOR_COND5]]177;178entry:179  br label %for.cond180 181for.cond:                                         ; preds = %for.cond, %entry182  br i1 false, label %for.end, label %for.cond183 184for.end:                                          ; preds = %for.cond185  br label %g186 187g:                                                ; preds = %for.cond1, %for.end188  br label %for.cond1189 190for.cond1:                                        ; preds = %for.cond5, %g191  %0 = load i16, ptr %p, align 2192  %tobool4.not = trunc i16 %0 to i1193  br i1 %tobool4.not, label %for.cond5, label %g194 195for.cond5:                                        ; preds = %for.inc, %for.cond1196  br i1 false, label %for.cond1, label %for.inc197 198for.inc:                                          ; preds = %for.cond5199  store i8 0, ptr @b, align 1200  br label %for.cond5201}202