brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.2 KiB · a5af300 Raw
268 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --version 52; RUN: opt < %s -passes='print<delinearization>' -disable-output 2>&1 | FileCheck %s3;4; a, b, c, d, g, h;5; char *f;6; static fn1(p1) {7;   char *e = p1;8;   for (; d;) {9;     a = 0;10;     for (;; ++a)11;       for (; b; ++b)12;         c = e[b + a];13;   }14; }15;16; fn2() {17;   for (;;)18;     fn1(&f[g * h]);19; }20 21@g = common global i32 0, align 422@h = common global i32 0, align 423@f = common global ptr null, align 424@a = common global i32 0, align 425@b = common global i32 0, align 426@c = common global i32 0, align 427@d = common global i32 0, align 428 29define i32 @fn2() {30; CHECK-LABEL: 'fn2'31; CHECK-NEXT:  Inst: store i32 %storemerge.i, ptr @a, align 432; CHECK-NEXT:  AccessFunction: 033; CHECK-NEXT:  failed to delinearize34; CHECK-EMPTY:35; CHECK-NEXT:  Inst: %9 = load i8, ptr %arrayidx.i, align 136; CHECK-NEXT:  AccessFunction: (sext i32 {({(%1 * %2),+,1}<nw><%for.cond2thread-pre-split.i> + %.pr.i),+,8}<nw><%for.body4.i> to i64)37; CHECK-NEXT:  failed to delinearize38; CHECK-EMPTY:39; CHECK-NEXT:  Inst: store i32 %conv.i, ptr @c, align 440; CHECK-NEXT:  AccessFunction: 041; CHECK-NEXT:  failed to delinearize42; CHECK-EMPTY:43; CHECK-NEXT:  Inst: store i32 %inc.i, ptr @b, align 444; CHECK-NEXT:  AccessFunction: 045; CHECK-NEXT:  failed to delinearize46; CHECK-EMPTY:47; CHECK-NEXT:  Inst: %10 = load i8, ptr %arrayidx.1.i, align 148; CHECK-NEXT:  AccessFunction: (sext i32 {({(1 + (%1 * %2)),+,1}<nw><%for.cond2thread-pre-split.i> + %.pr.i),+,8}<nw><%for.body4.i> to i64)49; CHECK-NEXT:  failed to delinearize50; CHECK-EMPTY:51; CHECK-NEXT:  Inst: store i32 %conv.1.i, ptr @c, align 452; CHECK-NEXT:  AccessFunction: 053; CHECK-NEXT:  failed to delinearize54; CHECK-EMPTY:55; CHECK-NEXT:  Inst: store i32 %inc.1.i, ptr @b, align 456; CHECK-NEXT:  AccessFunction: 057; CHECK-NEXT:  failed to delinearize58; CHECK-EMPTY:59; CHECK-NEXT:  Inst: %11 = load i8, ptr %arrayidx.2.i, align 160; CHECK-NEXT:  AccessFunction: (sext i32 {({(2 + (%1 * %2)),+,1}<nw><%for.cond2thread-pre-split.i> + %.pr.i),+,8}<nw><%for.body4.i> to i64)61; CHECK-NEXT:  failed to delinearize62; CHECK-EMPTY:63; CHECK-NEXT:  Inst: store i32 %conv.2.i, ptr @c, align 464; CHECK-NEXT:  AccessFunction: 065; CHECK-NEXT:  failed to delinearize66; CHECK-EMPTY:67; CHECK-NEXT:  Inst: store i32 %inc.2.i, ptr @b, align 468; CHECK-NEXT:  AccessFunction: 069; CHECK-NEXT:  failed to delinearize70; CHECK-EMPTY:71; CHECK-NEXT:  Inst: %12 = load i8, ptr %arrayidx.3.i, align 172; CHECK-NEXT:  AccessFunction: (sext i32 {({(3 + (%1 * %2)),+,1}<nw><%for.cond2thread-pre-split.i> + %.pr.i),+,8}<nw><%for.body4.i> to i64)73; CHECK-NEXT:  failed to delinearize74; CHECK-EMPTY:75; CHECK-NEXT:  Inst: store i32 %conv.3.i, ptr @c, align 476; CHECK-NEXT:  AccessFunction: 077; CHECK-NEXT:  failed to delinearize78; CHECK-EMPTY:79; CHECK-NEXT:  Inst: store i32 %inc.3.i, ptr @b, align 480; CHECK-NEXT:  AccessFunction: 081; CHECK-NEXT:  failed to delinearize82; CHECK-EMPTY:83; CHECK-NEXT:  Inst: %13 = load i8, ptr %arrayidx.4.i, align 184; CHECK-NEXT:  AccessFunction: (sext i32 {({(4 + (%1 * %2)),+,1}<nw><%for.cond2thread-pre-split.i> + %.pr.i),+,8}<nw><%for.body4.i> to i64)85; CHECK-NEXT:  failed to delinearize86; CHECK-EMPTY:87; CHECK-NEXT:  Inst: store i32 %conv.4.i, ptr @c, align 488; CHECK-NEXT:  AccessFunction: 089; CHECK-NEXT:  failed to delinearize90; CHECK-EMPTY:91; CHECK-NEXT:  Inst: store i32 %inc.4.i, ptr @b, align 492; CHECK-NEXT:  AccessFunction: 093; CHECK-NEXT:  failed to delinearize94; CHECK-EMPTY:95; CHECK-NEXT:  Inst: %14 = load i8, ptr %arrayidx.5.i, align 196; CHECK-NEXT:  AccessFunction: (sext i32 {({(5 + (%1 * %2)),+,1}<nw><%for.cond2thread-pre-split.i> + %.pr.i),+,8}<nw><%for.body4.i> to i64)97; CHECK-NEXT:  failed to delinearize98; CHECK-EMPTY:99; CHECK-NEXT:  Inst: store i32 %conv.5.i, ptr @c, align 4100; CHECK-NEXT:  AccessFunction: 0101; CHECK-NEXT:  failed to delinearize102; CHECK-EMPTY:103; CHECK-NEXT:  Inst: store i32 %inc.5.i, ptr @b, align 4104; CHECK-NEXT:  AccessFunction: 0105; CHECK-NEXT:  failed to delinearize106; CHECK-EMPTY:107; CHECK-NEXT:  Inst: %15 = load i8, ptr %arrayidx.6.i, align 1108; CHECK-NEXT:  AccessFunction: (sext i32 {({(6 + (%1 * %2)),+,1}<nw><%for.cond2thread-pre-split.i> + %.pr.i),+,8}<nw><%for.body4.i> to i64)109; CHECK-NEXT:  failed to delinearize110; CHECK-EMPTY:111; CHECK-NEXT:  Inst: store i32 %conv.6.i, ptr @c, align 4112; CHECK-NEXT:  AccessFunction: 0113; CHECK-NEXT:  failed to delinearize114; CHECK-EMPTY:115; CHECK-NEXT:  Inst: store i32 %inc.6.i, ptr @b, align 4116; CHECK-NEXT:  AccessFunction: 0117; CHECK-NEXT:  failed to delinearize118; CHECK-EMPTY:119; CHECK-NEXT:  Inst: %16 = load i8, ptr %arrayidx.7.i, align 1120; CHECK-NEXT:  AccessFunction: (sext i32 {({(7 + (%1 * %2)),+,1}<nw><%for.cond2thread-pre-split.i> + %.pr.i),+,8}<nw><%for.body4.i> to i64)121; CHECK-NEXT:  failed to delinearize122; CHECK-EMPTY:123; CHECK-NEXT:  Inst: store i32 %conv.7.i, ptr @c, align 4124; CHECK-NEXT:  AccessFunction: 0125; CHECK-NEXT:  failed to delinearize126; CHECK-EMPTY:127; CHECK-NEXT:  Inst: store i32 %inc.7.i, ptr @b, align 4128; CHECK-NEXT:  AccessFunction: 0129; CHECK-NEXT:  failed to delinearize130; CHECK-EMPTY:131; CHECK-NEXT:  Inst: %21 = load i8, ptr %arrayidx.ur.i, align 1132; CHECK-NEXT:  AccessFunction: (sext i32 {({(%1 * %2),+,1}<nw><%for.cond2thread-pre-split.i> + %.ph),+,1}<nw><%for.body4.ur.i> to i64)133; CHECK-NEXT:  failed to delinearize134; CHECK-EMPTY:135; CHECK-NEXT:  Inst: store i32 %conv.ur.i, ptr @c, align 4136; CHECK-NEXT:  AccessFunction: 0137; CHECK-NEXT:  failed to delinearize138; CHECK-EMPTY:139; CHECK-NEXT:  Inst: store i32 %inc.ur.i, ptr @b, align 4140; CHECK-NEXT:  AccessFunction: 0141; CHECK-NEXT:  failed to delinearize142;143entry:144  %.pr = load i32, ptr @d, align 4145  %phitmp = icmp eq i32 %.pr, 0146  br label %for.cond147 148for.cond:149  %0 = phi i1 [ true, %for.cond ], [ %phitmp, %entry ]150  br i1 %0, label %for.cond, label %for.cond2thread-pre-split.preheader.i151 152for.cond2thread-pre-split.preheader.i:153  %1 = load i32, ptr @g, align 4154  %2 = load i32, ptr @h, align 4155  %mul = mul nsw i32 %2, %1156  %3 = load ptr, ptr @f, align 4157  %.pr.pre.i = load i32, ptr @b, align 4158  br label %for.cond2thread-pre-split.i159 160for.cond2thread-pre-split.i:161  %.pr.i = phi i32 [ 0, %for.inc5.i ], [ %.pr.pre.i, %for.cond2thread-pre-split.preheader.i ]162  %storemerge.i = phi i32 [ %inc6.i, %for.inc5.i ], [ 0, %for.cond2thread-pre-split.preheader.i ]163  store i32 %storemerge.i, ptr @a, align 4164  %tobool31.i = icmp eq i32 %.pr.i, 0165  br i1 %tobool31.i, label %for.inc5.i, label %for.body4.preheader.i166 167for.body4.preheader.i:168  %4 = icmp slt i32 %.pr.i, -7169  %add.i = add i32 %storemerge.i, %mul170  br i1 %4, label %for.body4.i.preheader, label %for.body4.ur.i.preheader171 172for.body4.i.preheader:173  %5 = sub i32 -8, %.pr.i174  %6 = lshr i32 %5, 3175  %7 = mul i32 %6, 8176  br label %for.body4.i177 178for.body4.i:179  %8 = phi i32 [ %inc.7.i, %for.body4.i ], [ %.pr.i, %for.body4.i.preheader ]180  %arrayidx.sum1 = add i32 %add.i, %8181  %arrayidx.i = getelementptr inbounds i8, ptr %3, i32 %arrayidx.sum1182  %9 = load i8, ptr %arrayidx.i, align 1183  %conv.i = sext i8 %9 to i32184  store i32 %conv.i, ptr @c, align 4185  %inc.i = add nsw i32 %8, 1186  store i32 %inc.i, ptr @b, align 4187  %arrayidx.sum2 = add i32 %add.i, %inc.i188  %arrayidx.1.i = getelementptr inbounds i8, ptr %3, i32 %arrayidx.sum2189  %10 = load i8, ptr %arrayidx.1.i, align 1190  %conv.1.i = sext i8 %10 to i32191  store i32 %conv.1.i, ptr @c, align 4192  %inc.1.i = add nsw i32 %8, 2193  store i32 %inc.1.i, ptr @b, align 4194  %arrayidx.sum3 = add i32 %add.i, %inc.1.i195  %arrayidx.2.i = getelementptr inbounds i8, ptr %3, i32 %arrayidx.sum3196  %11 = load i8, ptr %arrayidx.2.i, align 1197  %conv.2.i = sext i8 %11 to i32198  store i32 %conv.2.i, ptr @c, align 4199  %inc.2.i = add nsw i32 %8, 3200  store i32 %inc.2.i, ptr @b, align 4201  %arrayidx.sum4 = add i32 %add.i, %inc.2.i202  %arrayidx.3.i = getelementptr inbounds i8, ptr %3, i32 %arrayidx.sum4203  %12 = load i8, ptr %arrayidx.3.i, align 1204  %conv.3.i = sext i8 %12 to i32205  store i32 %conv.3.i, ptr @c, align 4206  %inc.3.i = add nsw i32 %8, 4207  store i32 %inc.3.i, ptr @b, align 4208  %arrayidx.sum5 = add i32 %add.i, %inc.3.i209  %arrayidx.4.i = getelementptr inbounds i8, ptr %3, i32 %arrayidx.sum5210  %13 = load i8, ptr %arrayidx.4.i, align 1211  %conv.4.i = sext i8 %13 to i32212  store i32 %conv.4.i, ptr @c, align 4213  %inc.4.i = add nsw i32 %8, 5214  store i32 %inc.4.i, ptr @b, align 4215  %arrayidx.sum6 = add i32 %add.i, %inc.4.i216  %arrayidx.5.i = getelementptr inbounds i8, ptr %3, i32 %arrayidx.sum6217  %14 = load i8, ptr %arrayidx.5.i, align 1218  %conv.5.i = sext i8 %14 to i32219  store i32 %conv.5.i, ptr @c, align 4220  %inc.5.i = add nsw i32 %8, 6221  store i32 %inc.5.i, ptr @b, align 4222  %arrayidx.sum7 = add i32 %add.i, %inc.5.i223  %arrayidx.6.i = getelementptr inbounds i8, ptr %3, i32 %arrayidx.sum7224  %15 = load i8, ptr %arrayidx.6.i, align 1225  %conv.6.i = sext i8 %15 to i32226  store i32 %conv.6.i, ptr @c, align 4227  %inc.6.i = add nsw i32 %8, 7228  store i32 %inc.6.i, ptr @b, align 4229  %arrayidx.sum8 = add i32 %add.i, %inc.6.i230  %arrayidx.7.i = getelementptr inbounds i8, ptr %3, i32 %arrayidx.sum8231  %16 = load i8, ptr %arrayidx.7.i, align 1232  %conv.7.i = sext i8 %16 to i32233  store i32 %conv.7.i, ptr @c, align 4234  %inc.7.i = add nsw i32 %8, 8235  store i32 %inc.7.i, ptr @b, align 4236  %tobool3.7.i = icmp sgt i32 %inc.7.i, -8237  br i1 %tobool3.7.i, label %for.inc5.loopexit.ur-lcssa.i, label %for.body4.i238 239for.inc5.loopexit.ur-lcssa.i:240  %17 = add i32 %.pr.i, 8241  %18 = add i32 %17, %7242  %19 = icmp eq i32 %18, 0243  br i1 %19, label %for.inc5.i, label %for.body4.ur.i.preheader244 245for.body4.ur.i.preheader:246  %.ph = phi i32 [ %18, %for.inc5.loopexit.ur-lcssa.i ], [ %.pr.i, %for.body4.preheader.i ]247  br label %for.body4.ur.i248 249for.body4.ur.i:250  %20 = phi i32 [ %inc.ur.i, %for.body4.ur.i ], [ %.ph, %for.body4.ur.i.preheader ]251  %arrayidx.sum = add i32 %add.i, %20252  %arrayidx.ur.i = getelementptr inbounds i8, ptr %3, i32 %arrayidx.sum253  %21 = load i8, ptr %arrayidx.ur.i, align 1254  %conv.ur.i = sext i8 %21 to i32255  store i32 %conv.ur.i, ptr @c, align 4256  %inc.ur.i = add nsw i32 %20, 1257  store i32 %inc.ur.i, ptr @b, align 4258  %tobool3.ur.i = icmp eq i32 %inc.ur.i, 0259  br i1 %tobool3.ur.i, label %for.inc5.i.loopexit, label %for.body4.ur.i260 261for.inc5.i.loopexit:262  br label %for.inc5.i263 264for.inc5.i:265  %inc6.i = add nsw i32 %storemerge.i, 1266  br label %for.cond2thread-pre-split.i267}268