263 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --version 52; RUN: opt < %s -disable-output "-passes=print<da>" 2>&1 \3; RUN: -da-disable-delinearization-checks | FileCheck %s4 5 6;; for (long int i = 0; i < 10; i++) {7;; for (long int j = 0; j < 10; j++) {8;; for (long int k = 0; k < 10; k++) {9;; for (long int l = 0; l < 10; l++)10;; A[i][j][k][l] = i;11;; }12;; for (long int k = 1; k < 11; k++) {13;; for (long int l = 0; l < 10; l++)14;; A[i + 4][j + 3][k + 2][l + 1] = l;15 16define void @samebd0(ptr %A) nounwind uwtable ssp {17; CHECK-LABEL: 'samebd0'18; CHECK-NEXT: Src: store i64 %i.013, ptr %arrayidx12, align 8 --> Dst: store i64 %i.013, ptr %arrayidx12, align 819; CHECK-NEXT: da analyze - none!20; CHECK-NEXT: Src: store i64 %i.013, ptr %arrayidx12, align 8 --> Dst: store i64 %l17.04, ptr %arrayidx24, align 821; CHECK-NEXT: da analyze - output [-4 -3] / assuming 2 loop level(s) fused: [-4 -3 -3 -1]!22; CHECK-NEXT: Src: store i64 %l17.04, ptr %arrayidx24, align 8 --> Dst: store i64 %l17.04, ptr %arrayidx24, align 823; CHECK-NEXT: da analyze - none!24;25entry:26 br label %for.cond1.preheader27 28for.cond1.preheader: ; preds = %entry, %for.inc3329 %i.013 = phi i64 [ %inc34, %for.inc33 ], [ 0, %entry ]30 br label %for.cond4.preheader31 32for.cond4.preheader: ; preds = %for.cond1.preheader, %for.inc3033 %j.09 = phi i64 [ %inc31, %for.inc30 ], [ 0, %for.cond1.preheader ]34 br label %for.cond7.preheader35 36for.cond7.preheader: ; preds = %for.cond4.preheader, %for.inc1237 %k.07 = phi i64 [ %inc13, %for.inc12 ], [ 0, %for.cond4.preheader ]38 br label %for.body939 40for.body9: ; preds = %for.cond7.preheader, %for.body941 %l.02 = phi i64 [ %inc11, %for.body9 ], [ 0, %for.cond7.preheader ]42 %arrayidx12 = getelementptr inbounds [100 x [100 x [100 x i64]]], ptr %A, i64 %i.013, i64 %j.09, i64 %k.07, i64 %l.0243 store i64 %i.013, ptr %arrayidx12, align 844 %inc11 = add nsw i64 %l.02, 145 %exitcond15 = icmp ne i64 %inc11, 1046 br i1 %exitcond15, label %for.body9, label %for.inc1247 48for.inc12: ; preds = %for.body949 %inc13 = add nsw i64 %k.07, 150 %exitcond16 = icmp ne i64 %inc13, 1051 br i1 %exitcond16, label %for.cond7.preheader, label %for.cond18.preheader52 53for.cond18.preheader: ; preds = %for.inc12, %for.inc2754 %k14.06 = phi i64 [ %inc28, %for.inc27 ], [ 1, %for.inc12 ]55 br label %for.body2056 57for.body20: ; preds = %for.cond18.preheader, %for.body2058 %l17.04 = phi i64 [ %inc25, %for.body20 ], [ 0, %for.cond18.preheader ]59 %add = add nsw i64 %l17.04, 160 %add21 = add nsw i64 %k14.06, 261 %add22 = add nsw i64 %j.09, 362 %add23 = add nsw i64 %i.013, 463 %arrayidx24 = getelementptr inbounds [100 x [100 x [100 x i64]]], ptr %A, i64 %add23, i64 %add22, i64 %add21, i64 %add64 store i64 %l17.04, ptr %arrayidx24, align 865 %inc25 = add nsw i64 %l17.04, 166 %exitcond = icmp ne i64 %inc25, 1067 br i1 %exitcond, label %for.body20, label %for.inc2768 69for.inc27: ; preds = %for.body2070 %inc28 = add nsw i64 %k14.06, 171 %exitcond17 = icmp ne i64 %inc28, 1172 br i1 %exitcond17, label %for.cond18.preheader, label %for.inc3073 74for.inc30: ; preds = %for.inc2775 %inc31 = add nsw i64 %j.09, 176 %exitcond18 = icmp ne i64 %inc31, 1077 br i1 %exitcond18, label %for.cond4.preheader, label %for.inc3378 79for.inc33: ; preds = %for.inc3080 %inc34 = add nsw i64 %i.013, 181 %exitcond19 = icmp ne i64 %inc34, 1082 br i1 %exitcond19, label %for.cond1.preheader, label %for.end3583 84for.end35: ; preds = %for.inc3385 ret void86}87 88 89;; for (long int i = 0; i < 10; i++)90;; A[4*i + 2] = i;91;; for (long int j = 0; j < 10; j++)92;; tmp = A[j + 2];93 94define void @samebd1(ptr %A) nounwind uwtable ssp {95; CHECK-LABEL: 'samebd1'96; CHECK-NEXT: Src: store i64 %i.03, ptr %arrayidx, align 4 --> Dst: store i64 %i.03, ptr %arrayidx, align 497; CHECK-NEXT: da analyze - none!98; CHECK-NEXT: Src: store i64 %i.03, ptr %arrayidx, align 4 --> Dst: %0 = load i64, ptr %arrayidx7, align 499; CHECK-NEXT: da analyze - flow [|<] / assuming 1 loop level(s) fused: [<=|<]!100; CHECK-NEXT: Src: %0 = load i64, ptr %arrayidx7, align 4 --> Dst: %0 = load i64, ptr %arrayidx7, align 4101; CHECK-NEXT: da analyze - none!102;103entry:104 br label %for.body105 106for.body: ; preds = %entry, %for.body107 %i.03 = phi i64 [ 0, %entry ], [ %inc, %for.body ]108 %mul = shl nsw i64 %i.03, 2109 %add = add nsw i64 %mul, 2110 111 %arrayidx = getelementptr inbounds i64, ptr %A, i64 %add112 store i64 %i.03, ptr %arrayidx, align 4113 %inc = add nsw i64 %i.03, 1114 %exitcond5 = icmp ne i64 %inc, 10115 br i1 %exitcond5, label %for.body, label %for.body4.preheader116 117for.body4.preheader: ; preds = %for.body118 br label %for.body4119 120for.body4: ; preds = %for.body4.preheader, %for.body4121 %j.02 = phi i64 [ %inc9, %for.body4 ], [ 0, %for.body4.preheader ]122 %add64 = add nsw i64 %j.02, 2123 %arrayidx7 = getelementptr inbounds i64, ptr %A, i64 %add64124 %0 = load i64, ptr %arrayidx7, align 4125 %inc9 = add nsw i64 %j.02, 1126 %exitcond = icmp ne i64 %inc9, 10127 br i1 %exitcond, label %for.body4, label %for.end10128 129for.end10: ; preds = %for.body4130 ret void131}132 133 134;; No information for SameSD loops is generated as MIV test is not supported135;; on separate loops yet.136;; for (long int i = 0; i < 10; i++) {137;; for (long int j = 0; j < 10; j++) {138;; for (long int k = 0; k < 10; k++) {139;; for (long int l = 0; l < 10; l++)140;; A[i][j][k][l] = i;141;; }142;; for (long int k = 1; k < 11; k++) {143;; for (long int l = 0; l < 10; l++)144;; A[i + 4][j + 3][k + 2][k + l] = l;145 146define void @non_samebd0(ptr %A) nounwind uwtable ssp {147; CHECK-LABEL: 'non_samebd0'148; CHECK-NEXT: Src: store i64 %i.013, ptr %arrayidx12, align 8 --> Dst: store i64 %i.013, ptr %arrayidx12, align 8149; CHECK-NEXT: da analyze - none!150; CHECK-NEXT: Src: store i64 %i.013, ptr %arrayidx12, align 8 --> Dst: store i64 %l17.04, ptr %arrayidx24, align 8151; CHECK-NEXT: da analyze - output [> *]!152; CHECK-NEXT: Src: store i64 %l17.04, ptr %arrayidx24, align 8 --> Dst: store i64 %l17.04, ptr %arrayidx24, align 8153; CHECK-NEXT: da analyze - none!154;155entry:156 br label %for.cond1.preheader157 158for.cond1.preheader: ; preds = %entry, %for.inc33159 %i.013 = phi i64 [ %inc34, %for.inc33 ], [ 0, %entry ]160 br label %for.cond4.preheader161 162for.cond4.preheader: ; preds = %for.cond1.preheader, %for.inc30163 %j.09 = phi i64 [ %inc31, %for.inc30 ], [ 0, %for.cond1.preheader ]164 br label %for.cond7.preheader165 166for.cond7.preheader: ; preds = %for.cond4.preheader, %for.inc12167 %k.07 = phi i64 [ %inc13, %for.inc12 ], [ 0, %for.cond4.preheader ]168 br label %for.body9169 170for.body9: ; preds = %for.cond7.preheader, %for.body9171 %l.02 = phi i64 [ %inc11, %for.body9 ], [ 0, %for.cond7.preheader ]172 %arrayidx12 = getelementptr inbounds [100 x [100 x [100 x i64]]], ptr %A, i64 %i.013, i64 %j.09, i64 %k.07, i64 %l.02173 store i64 %i.013, ptr %arrayidx12, align 8174 %inc11 = add nsw i64 %l.02, 1175 %exitcond15 = icmp ne i64 %inc11, 10176 br i1 %exitcond15, label %for.body9, label %for.inc12177 178for.inc12: ; preds = %for.body9179 %inc13 = add nsw i64 %k.07, 1180 %exitcond16 = icmp ne i64 %inc13, 10181 br i1 %exitcond16, label %for.cond7.preheader, label %for.cond18.preheader182 183for.cond18.preheader: ; preds = %for.inc12, %for.inc27184 %k14.06 = phi i64 [ %inc28, %for.inc27 ], [ 1, %for.inc12 ]185 br label %for.body20186 187for.body20: ; preds = %for.cond18.preheader, %for.body20188 %l17.04 = phi i64 [ %inc25, %for.body20 ], [ 0, %for.cond18.preheader ]189 %add = add nsw i64 %k14.06, %l17.04190 %add21 = add nsw i64 %k14.06, 2191 %add22 = add nsw i64 %j.09, 3192 %add23 = add nsw i64 %i.013, 4193 %arrayidx24 = getelementptr inbounds [100 x [100 x [100 x i64]]], ptr %A, i64 %add23, i64 %add22, i64 %add21, i64 %add194 store i64 %l17.04, ptr %arrayidx24, align 8195 %inc25 = add nsw i64 %l17.04, 1196 %exitcond = icmp ne i64 %inc25, 10197 br i1 %exitcond, label %for.body20, label %for.inc27198 199for.inc27: ; preds = %for.body20200 %inc28 = add nsw i64 %k14.06, 1201 %exitcond17 = icmp ne i64 %inc28, 11202 br i1 %exitcond17, label %for.cond18.preheader, label %for.inc30203 204for.inc30: ; preds = %for.inc27205 %inc31 = add nsw i64 %j.09, 1206 %exitcond18 = icmp ne i64 %inc31, 10207 br i1 %exitcond18, label %for.cond4.preheader, label %for.inc33208 209for.inc33: ; preds = %for.inc30210 %inc34 = add nsw i64 %i.013, 1211 %exitcond19 = icmp ne i64 %inc34, 10212 br i1 %exitcond19, label %for.cond1.preheader, label %for.end35213 214for.end35: ; preds = %for.inc33215 ret void216}217 218 219;; Loops with different tripcounts are not considered as SameBD220;; for (long int i = 0; i < 10; i++)221;; A[4*i + 2] = i;222;; for (long int j = 0; j < 11; j++)223;; tmp = A[j + 2];224 225define void @non_samebd1(ptr %A) nounwind uwtable ssp {226; CHECK-LABEL: 'non_samebd1'227; CHECK-NEXT: Src: store i64 %i.03, ptr %arrayidx, align 4 --> Dst: store i64 %i.03, ptr %arrayidx, align 4228; CHECK-NEXT: da analyze - none!229; CHECK-NEXT: Src: store i64 %i.03, ptr %arrayidx, align 4 --> Dst: %0 = load i64, ptr %arrayidx7, align 4230; CHECK-NEXT: da analyze - flow [|<]!231; CHECK-NEXT: Src: %0 = load i64, ptr %arrayidx7, align 4 --> Dst: %0 = load i64, ptr %arrayidx7, align 4232; CHECK-NEXT: da analyze - none!233;234entry:235 br label %for.body236 237for.body: ; preds = %entry, %for.body238 %i.03 = phi i64 [ 0, %entry ], [ %inc, %for.body ]239 %mul = shl nsw i64 %i.03, 2240 %add = add nsw i64 %mul, 2241 242 %arrayidx = getelementptr inbounds i64, ptr %A, i64 %add243 store i64 %i.03, ptr %arrayidx, align 4244 %inc = add nsw i64 %i.03, 1245 %exitcond5 = icmp ne i64 %inc, 10246 br i1 %exitcond5, label %for.body, label %for.body4.preheader247 248for.body4.preheader: ; preds = %for.body249 br label %for.body4250 251for.body4: ; preds = %for.body4.preheader, %for.body4252 %j.02 = phi i64 [ %inc9, %for.body4 ], [ 0, %for.body4.preheader ]253 %add64 = add nsw i64 %j.02, 2254 %arrayidx7 = getelementptr inbounds i64, ptr %A, i64 %add64255 %0 = load i64, ptr %arrayidx7, align 4256 %inc9 = add nsw i64 %j.02, 1257 %exitcond = icmp ne i64 %inc9, 11258 br i1 %exitcond, label %for.body4, label %for.end10259 260for.end10: ; preds = %for.body4261 ret void262}263