712 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>" -aa-pipeline=basic-aa 2>&1 \3; RUN: | FileCheck %s4 5; ModuleID = 'ExactRDIV.bc'6target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"7target triple = "x86_64-apple-macosx10.6.0"8 9 10;; for (long int i = 0; i < 10; i++)11;; A[4*i + 10] = i;12;; for (long int j = 0; j < 10; j++)13;; *B++ = A[2*j + 1];14 15define void @rdiv0(ptr %A, ptr %B) nounwind uwtable ssp {16; CHECK-LABEL: 'rdiv0'17; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 418; CHECK-NEXT: da analyze - none!19; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx7, align 420; CHECK-NEXT: da analyze - none!21; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 422; CHECK-NEXT: da analyze - confused!23; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx7, align 4 --> Dst: %0 = load i32, ptr %arrayidx7, align 424; CHECK-NEXT: da analyze - none!25; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx7, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 426; CHECK-NEXT: da analyze - confused!27; CHECK-NEXT: Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 428; CHECK-NEXT: da analyze - none!29;30entry:31 br label %for.body32 33for.body: ; preds = %entry, %for.body34 %i.03 = phi i64 [ 0, %entry ], [ %inc, %for.body ]35 %conv = trunc i64 %i.03 to i3236 %mul = shl nsw i64 %i.03, 237 %add = add nsw i64 %mul, 1038 %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add39 store i32 %conv, ptr %arrayidx, align 440 %inc = add nsw i64 %i.03, 141 %exitcond5 = icmp ne i64 %inc, 1042 br i1 %exitcond5, label %for.body, label %for.body4.preheader43 44for.body4.preheader: ; preds = %for.body45 br label %for.body446 47for.body4: ; preds = %for.body4.preheader, %for.body448 %j.02 = phi i64 [ %inc9, %for.body4 ], [ 0, %for.body4.preheader ]49 %B.addr.01 = phi ptr [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]50 %mul5 = shl nsw i64 %j.02, 151 %add64 = or disjoint i64 %mul5, 152 %arrayidx7 = getelementptr inbounds i32, ptr %A, i64 %add6453 %0 = load i32, ptr %arrayidx7, align 454 %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 155 store i32 %0, ptr %B.addr.01, align 456 %inc9 = add nsw i64 %j.02, 157 %exitcond = icmp ne i64 %inc9, 1058 br i1 %exitcond, label %for.body4, label %for.end1059 60for.end10: ; preds = %for.body461 ret void62}63 64 65;; for (long int i = 0; i < 5; i++)66;; A[11*i - 45] = i;67;; for (long int j = 0; j < 10; j++)68;; *B++ = A[j];69 70define void @rdiv1(ptr %A, ptr %B) nounwind uwtable ssp {71; CHECK-LABEL: 'rdiv1'72; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 473; CHECK-NEXT: da analyze - none!74; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx5, align 475; CHECK-NEXT: da analyze - none!76; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 477; CHECK-NEXT: da analyze - confused!78; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx5, align 4 --> Dst: %0 = load i32, ptr %arrayidx5, align 479; CHECK-NEXT: da analyze - none!80; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx5, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 481; CHECK-NEXT: da analyze - confused!82; CHECK-NEXT: Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 483; CHECK-NEXT: da analyze - none!84;85entry:86 br label %for.body87 88for.body: ; preds = %entry, %for.body89 %i.03 = phi i64 [ 0, %entry ], [ %inc, %for.body ]90 %conv = trunc i64 %i.03 to i3291 %mul = mul nsw i64 %i.03, 1192 %sub = add nsw i64 %mul, -4593 %arrayidx = getelementptr inbounds i32, ptr %A, i64 %sub94 store i32 %conv, ptr %arrayidx, align 495 %inc = add nsw i64 %i.03, 196 %exitcond4 = icmp ne i64 %inc, 597 br i1 %exitcond4, label %for.body, label %for.body4.preheader98 99for.body4.preheader: ; preds = %for.body100 br label %for.body4101 102for.body4: ; preds = %for.body4.preheader, %for.body4103 %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]104 %B.addr.01 = phi ptr [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]105 %arrayidx5 = getelementptr inbounds i32, ptr %A, i64 %j.02106 %0 = load i32, ptr %arrayidx5, align 4107 %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1108 store i32 %0, ptr %B.addr.01, align 4109 %inc7 = add nsw i64 %j.02, 1110 %exitcond = icmp ne i64 %inc7, 10111 br i1 %exitcond, label %for.body4, label %for.end8112 113for.end8: ; preds = %for.body4114 ret void115}116 117 118;; for (long int i = 0; i <= 5; i++)119;; A[11*i - 45] = i;120;; for (long int j = 0; j < 10; j++)121;; *B++ = A[j];122 123define void @rdiv2(ptr %A, ptr %B) nounwind uwtable ssp {124; CHECK-LABEL: 'rdiv2'125; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4126; CHECK-NEXT: da analyze - none!127; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx5, align 4128; CHECK-NEXT: da analyze - none!129; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4130; CHECK-NEXT: da analyze - confused!131; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx5, align 4 --> Dst: %0 = load i32, ptr %arrayidx5, align 4132; CHECK-NEXT: da analyze - none!133; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx5, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4134; CHECK-NEXT: da analyze - confused!135; CHECK-NEXT: Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4136; CHECK-NEXT: da analyze - none!137;138entry:139 br label %for.body140 141for.body: ; preds = %entry, %for.body142 %i.03 = phi i64 [ 0, %entry ], [ %inc, %for.body ]143 %conv = trunc i64 %i.03 to i32144 %mul = mul nsw i64 %i.03, 11145 %sub = add nsw i64 %mul, -45146 %arrayidx = getelementptr inbounds i32, ptr %A, i64 %sub147 store i32 %conv, ptr %arrayidx, align 4148 %inc = add nsw i64 %i.03, 1149 %exitcond4 = icmp ne i64 %inc, 6150 br i1 %exitcond4, label %for.body, label %for.body4.preheader151 152for.body4.preheader: ; preds = %for.body153 br label %for.body4154 155for.body4: ; preds = %for.body4.preheader, %for.body4156 %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]157 %B.addr.01 = phi ptr [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]158 %arrayidx5 = getelementptr inbounds i32, ptr %A, i64 %j.02159 %0 = load i32, ptr %arrayidx5, align 4160 %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1161 store i32 %0, ptr %B.addr.01, align 4162 %inc7 = add nsw i64 %j.02, 1163 %exitcond = icmp ne i64 %inc7, 10164 br i1 %exitcond, label %for.body4, label %for.end8165 166for.end8: ; preds = %for.body4167 ret void168}169 170 171;; for (long int i = 0; i < 5; i++)172;; A[11*i - 45] = i;173;; for (long int j = 0; j <= 10; j++)174;; *B++ = A[j];175 176define void @rdiv3(ptr %A, ptr %B) nounwind uwtable ssp {177; CHECK-LABEL: 'rdiv3'178; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4179; CHECK-NEXT: da analyze - none!180; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx5, align 4181; CHECK-NEXT: da analyze - none!182; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4183; CHECK-NEXT: da analyze - confused!184; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx5, align 4 --> Dst: %0 = load i32, ptr %arrayidx5, align 4185; CHECK-NEXT: da analyze - none!186; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx5, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4187; CHECK-NEXT: da analyze - confused!188; CHECK-NEXT: Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4189; CHECK-NEXT: da analyze - none!190;191entry:192 br label %for.body193 194for.body: ; preds = %entry, %for.body195 %i.03 = phi i64 [ 0, %entry ], [ %inc, %for.body ]196 %conv = trunc i64 %i.03 to i32197 %mul = mul nsw i64 %i.03, 11198 %sub = add nsw i64 %mul, -45199 %arrayidx = getelementptr inbounds i32, ptr %A, i64 %sub200 store i32 %conv, ptr %arrayidx, align 4201 %inc = add nsw i64 %i.03, 1202 %exitcond4 = icmp ne i64 %inc, 5203 br i1 %exitcond4, label %for.body, label %for.body4.preheader204 205for.body4.preheader: ; preds = %for.body206 br label %for.body4207 208for.body4: ; preds = %for.body4.preheader, %for.body4209 %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]210 %B.addr.01 = phi ptr [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]211 %arrayidx5 = getelementptr inbounds i32, ptr %A, i64 %j.02212 %0 = load i32, ptr %arrayidx5, align 4213 %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1214 store i32 %0, ptr %B.addr.01, align 4215 %inc7 = add nsw i64 %j.02, 1216 %exitcond = icmp ne i64 %inc7, 11217 br i1 %exitcond, label %for.body4, label %for.end8218 219for.end8: ; preds = %for.body4220 ret void221}222 223 224;; for (long int i = 0; i <= 5; i++)225;; A[11*i - 45] = i;226;; for (long int j = 0; j <= 10; j++)227;; *B++ = A[j];228 229define void @rdiv4(ptr %A, ptr %B) nounwind uwtable ssp {230; CHECK-LABEL: 'rdiv4'231; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4232; CHECK-NEXT: da analyze - none!233; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx5, align 4234; CHECK-NEXT: da analyze - flow [|<]!235; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4236; CHECK-NEXT: da analyze - confused!237; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx5, align 4 --> Dst: %0 = load i32, ptr %arrayidx5, align 4238; CHECK-NEXT: da analyze - none!239; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx5, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4240; CHECK-NEXT: da analyze - confused!241; CHECK-NEXT: Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4242; CHECK-NEXT: da analyze - none!243;244entry:245 br label %for.body246 247for.body: ; preds = %entry, %for.body248 %i.03 = phi i64 [ 0, %entry ], [ %inc, %for.body ]249 %conv = trunc i64 %i.03 to i32250 %mul = mul nsw i64 %i.03, 11251 %sub = add nsw i64 %mul, -45252 %arrayidx = getelementptr inbounds i32, ptr %A, i64 %sub253 store i32 %conv, ptr %arrayidx, align 4254 %inc = add nsw i64 %i.03, 1255 %exitcond4 = icmp ne i64 %inc, 6256 br i1 %exitcond4, label %for.body, label %for.body4.preheader257 258for.body4.preheader: ; preds = %for.body259 br label %for.body4260 261for.body4: ; preds = %for.body4.preheader, %for.body4262 %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]263 %B.addr.01 = phi ptr [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]264 %arrayidx5 = getelementptr inbounds i32, ptr %A, i64 %j.02265 %0 = load i32, ptr %arrayidx5, align 4266 %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1267 store i32 %0, ptr %B.addr.01, align 4268 %inc7 = add nsw i64 %j.02, 1269 %exitcond = icmp ne i64 %inc7, 11270 br i1 %exitcond, label %for.body4, label %for.end8271 272for.end8: ; preds = %for.body4273 ret void274}275 276 277;; for (long int i = 0; i < 5; i++)278;; A[-11*i + 45] = i;279;; for (long int j = 0; j < 10; j++)280;; *B++ = A[-j];281 282define void @rdiv5(ptr %A, ptr %B) nounwind uwtable ssp {283; CHECK-LABEL: 'rdiv5'284; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4285; CHECK-NEXT: da analyze - none!286; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx5, align 4287; CHECK-NEXT: da analyze - none!288; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4289; CHECK-NEXT: da analyze - confused!290; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx5, align 4 --> Dst: %0 = load i32, ptr %arrayidx5, align 4291; CHECK-NEXT: da analyze - none!292; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx5, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4293; CHECK-NEXT: da analyze - confused!294; CHECK-NEXT: Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4295; CHECK-NEXT: da analyze - none!296;297entry:298 br label %for.body299 300for.body: ; preds = %entry, %for.body301 %i.03 = phi i64 [ 0, %entry ], [ %inc, %for.body ]302 %conv = trunc i64 %i.03 to i32303 %mul = mul nsw i64 %i.03, -11304 %add = add nsw i64 %mul, 45305 %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add306 store i32 %conv, ptr %arrayidx, align 4307 %inc = add nsw i64 %i.03, 1308 %exitcond4 = icmp ne i64 %inc, 5309 br i1 %exitcond4, label %for.body, label %for.body4.preheader310 311for.body4.preheader: ; preds = %for.body312 br label %for.body4313 314for.body4: ; preds = %for.body4.preheader, %for.body4315 %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]316 %B.addr.01 = phi ptr [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]317 %sub = sub nsw i64 0, %j.02318 %arrayidx5 = getelementptr inbounds i32, ptr %A, i64 %sub319 %0 = load i32, ptr %arrayidx5, align 4320 %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1321 store i32 %0, ptr %B.addr.01, align 4322 %inc7 = add nsw i64 %j.02, 1323 %exitcond = icmp ne i64 %inc7, 10324 br i1 %exitcond, label %for.body4, label %for.end8325 326for.end8: ; preds = %for.body4327 ret void328}329 330 331;; for (long int i = 0; i <= 5; i++)332;; A[-11*i + 45] = i;333;; for (long int j = 0; j < 10; j++)334;; *B++ = A[-j];335 336define void @rdiv6(ptr %A, ptr %B) nounwind uwtable ssp {337; CHECK-LABEL: 'rdiv6'338; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4339; CHECK-NEXT: da analyze - none!340; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx5, align 4341; CHECK-NEXT: da analyze - none!342; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4343; CHECK-NEXT: da analyze - confused!344; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx5, align 4 --> Dst: %0 = load i32, ptr %arrayidx5, align 4345; CHECK-NEXT: da analyze - none!346; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx5, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4347; CHECK-NEXT: da analyze - confused!348; CHECK-NEXT: Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4349; CHECK-NEXT: da analyze - none!350;351entry:352 br label %for.body353 354for.body: ; preds = %entry, %for.body355 %i.03 = phi i64 [ 0, %entry ], [ %inc, %for.body ]356 %conv = trunc i64 %i.03 to i32357 %mul = mul nsw i64 %i.03, -11358 %add = add nsw i64 %mul, 45359 %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add360 store i32 %conv, ptr %arrayidx, align 4361 %inc = add nsw i64 %i.03, 1362 %exitcond4 = icmp ne i64 %inc, 6363 br i1 %exitcond4, label %for.body, label %for.body4.preheader364 365for.body4.preheader: ; preds = %for.body366 br label %for.body4367 368for.body4: ; preds = %for.body4.preheader, %for.body4369 %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]370 %B.addr.01 = phi ptr [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]371 %sub = sub nsw i64 0, %j.02372 %arrayidx5 = getelementptr inbounds i32, ptr %A, i64 %sub373 %0 = load i32, ptr %arrayidx5, align 4374 %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1375 store i32 %0, ptr %B.addr.01, align 4376 %inc7 = add nsw i64 %j.02, 1377 %exitcond = icmp ne i64 %inc7, 10378 br i1 %exitcond, label %for.body4, label %for.end8379 380for.end8: ; preds = %for.body4381 ret void382}383 384 385;; for (long int i = 0; i < 5; i++)386;; A[-11*i + 45] = i;387;; for (long int j = 0; j <= 10; j++)388;; *B++ = A[-j];389 390define void @rdiv7(ptr %A, ptr %B) nounwind uwtable ssp {391; CHECK-LABEL: 'rdiv7'392; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4393; CHECK-NEXT: da analyze - none!394; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx5, align 4395; CHECK-NEXT: da analyze - none!396; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4397; CHECK-NEXT: da analyze - confused!398; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx5, align 4 --> Dst: %0 = load i32, ptr %arrayidx5, align 4399; CHECK-NEXT: da analyze - none!400; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx5, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4401; CHECK-NEXT: da analyze - confused!402; CHECK-NEXT: Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4403; CHECK-NEXT: da analyze - none!404;405entry:406 br label %for.body407 408for.body: ; preds = %entry, %for.body409 %i.03 = phi i64 [ 0, %entry ], [ %inc, %for.body ]410 %conv = trunc i64 %i.03 to i32411 %mul = mul nsw i64 %i.03, -11412 %add = add nsw i64 %mul, 45413 %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add414 store i32 %conv, ptr %arrayidx, align 4415 %inc = add nsw i64 %i.03, 1416 %exitcond4 = icmp ne i64 %inc, 5417 br i1 %exitcond4, label %for.body, label %for.body4.preheader418 419for.body4.preheader: ; preds = %for.body420 br label %for.body4421 422for.body4: ; preds = %for.body4.preheader, %for.body4423 %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]424 %B.addr.01 = phi ptr [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]425 %sub = sub nsw i64 0, %j.02426 %arrayidx5 = getelementptr inbounds i32, ptr %A, i64 %sub427 %0 = load i32, ptr %arrayidx5, align 4428 %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1429 store i32 %0, ptr %B.addr.01, align 4430 %inc7 = add nsw i64 %j.02, 1431 %exitcond = icmp ne i64 %inc7, 11432 br i1 %exitcond, label %for.body4, label %for.end8433 434for.end8: ; preds = %for.body4435 ret void436}437 438 439;; for (long int i = 0; i <= 5; i++)440;; A[-11*i + 45] = i;441;; for (long int j = 0; j <= 10; j++)442;; *B++ = A[-j];443 444define void @rdiv8(ptr %A, ptr %B) nounwind uwtable ssp {445; CHECK-LABEL: 'rdiv8'446; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4447; CHECK-NEXT: da analyze - none!448; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx5, align 4449; CHECK-NEXT: da analyze - flow [|<]!450; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4451; CHECK-NEXT: da analyze - confused!452; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx5, align 4 --> Dst: %0 = load i32, ptr %arrayidx5, align 4453; CHECK-NEXT: da analyze - none!454; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx5, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4455; CHECK-NEXT: da analyze - confused!456; CHECK-NEXT: Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4457; CHECK-NEXT: da analyze - none!458;459entry:460 br label %for.body461 462for.body: ; preds = %entry, %for.body463 %i.03 = phi i64 [ 0, %entry ], [ %inc, %for.body ]464 %conv = trunc i64 %i.03 to i32465 %mul = mul nsw i64 %i.03, -11466 %add = add nsw i64 %mul, 45467 %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add468 store i32 %conv, ptr %arrayidx, align 4469 %inc = add nsw i64 %i.03, 1470 %exitcond4 = icmp ne i64 %inc, 6471 br i1 %exitcond4, label %for.body, label %for.body4.preheader472 473for.body4.preheader: ; preds = %for.body474 br label %for.body4475 476for.body4: ; preds = %for.body4.preheader, %for.body4477 %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]478 %B.addr.01 = phi ptr [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]479 %sub = sub nsw i64 0, %j.02480 %arrayidx5 = getelementptr inbounds i32, ptr %A, i64 %sub481 %0 = load i32, ptr %arrayidx5, align 4482 %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1483 store i32 %0, ptr %B.addr.01, align 4484 %inc7 = add nsw i64 %j.02, 1485 %exitcond = icmp ne i64 %inc7, 11486 br i1 %exitcond, label %for.body4, label %for.end8487 488for.end8: ; preds = %for.body4489 ret void490}491 492 493;; for (long int i = 0; i < 5; i++)494;; for (long int j = 0; j < 10; j++) {495;; A[11*i - j] = i;496;; *B++ = A[45];497 498define void @rdiv9(ptr %A, ptr %B) nounwind uwtable ssp {499; CHECK-LABEL: 'rdiv9'500; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4501; CHECK-NEXT: da analyze - none!502; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx4, align 4503; CHECK-NEXT: da analyze - none!504; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4505; CHECK-NEXT: da analyze - confused!506; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx4, align 4 --> Dst: %0 = load i32, ptr %arrayidx4, align 4507; CHECK-NEXT: da analyze - consistent input [S S]!508; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx4, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4509; CHECK-NEXT: da analyze - confused!510; CHECK-NEXT: Src: store i32 %0, ptr %B.addr.11, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4511; CHECK-NEXT: da analyze - none!512;513entry:514 br label %for.cond1.preheader515 516for.cond1.preheader: ; preds = %entry, %for.inc5517 %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc5 ]518 %i.03 = phi i64 [ 0, %entry ], [ %inc6, %for.inc5 ]519 br label %for.body3520 521for.body3: ; preds = %for.cond1.preheader, %for.body3522 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]523 %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]524 %conv = trunc i64 %i.03 to i32525 %mul = mul nsw i64 %i.03, 11526 %sub = sub nsw i64 %mul, %j.02527 %arrayidx = getelementptr inbounds i32, ptr %A, i64 %sub528 store i32 %conv, ptr %arrayidx, align 4529 %arrayidx4 = getelementptr inbounds i32, ptr %A, i64 45530 %0 = load i32, ptr %arrayidx4, align 4531 %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.11, i64 1532 store i32 %0, ptr %B.addr.11, align 4533 %inc = add nsw i64 %j.02, 1534 %exitcond = icmp ne i64 %inc, 10535 br i1 %exitcond, label %for.body3, label %for.inc5536 537for.inc5: ; preds = %for.body3538 %scevgep = getelementptr i32, ptr %B.addr.04, i64 10539 %inc6 = add nsw i64 %i.03, 1540 %exitcond5 = icmp ne i64 %inc6, 5541 br i1 %exitcond5, label %for.cond1.preheader, label %for.end7542 543for.end7: ; preds = %for.inc5544 ret void545}546 547 548 549;; for (long int i = 0; i <= 5; i++)550;; for (long int j = 0; j < 10; j++) {551;; A[11*i - j] = i;552;; *B++ = A[45];553 554define void @rdiv10(ptr %A, ptr %B) nounwind uwtable ssp {555; CHECK-LABEL: 'rdiv10'556; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4557; CHECK-NEXT: da analyze - none!558; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx4, align 4559; CHECK-NEXT: da analyze - none!560; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4561; CHECK-NEXT: da analyze - confused!562; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx4, align 4 --> Dst: %0 = load i32, ptr %arrayidx4, align 4563; CHECK-NEXT: da analyze - consistent input [S S]!564; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx4, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4565; CHECK-NEXT: da analyze - confused!566; CHECK-NEXT: Src: store i32 %0, ptr %B.addr.11, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4567; CHECK-NEXT: da analyze - none!568;569entry:570 br label %for.cond1.preheader571 572for.cond1.preheader: ; preds = %entry, %for.inc5573 %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc5 ]574 %i.03 = phi i64 [ 0, %entry ], [ %inc6, %for.inc5 ]575 br label %for.body3576 577for.body3: ; preds = %for.cond1.preheader, %for.body3578 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]579 %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]580 %conv = trunc i64 %i.03 to i32581 %mul = mul nsw i64 %i.03, 11582 %sub = sub nsw i64 %mul, %j.02583 %arrayidx = getelementptr inbounds i32, ptr %A, i64 %sub584 store i32 %conv, ptr %arrayidx, align 4585 %arrayidx4 = getelementptr inbounds i32, ptr %A, i64 45586 %0 = load i32, ptr %arrayidx4, align 4587 %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.11, i64 1588 store i32 %0, ptr %B.addr.11, align 4589 %inc = add nsw i64 %j.02, 1590 %exitcond = icmp ne i64 %inc, 10591 br i1 %exitcond, label %for.body3, label %for.inc5592 593for.inc5: ; preds = %for.body3594 %scevgep = getelementptr i32, ptr %B.addr.04, i64 10595 %inc6 = add nsw i64 %i.03, 1596 %exitcond5 = icmp ne i64 %inc6, 6597 br i1 %exitcond5, label %for.cond1.preheader, label %for.end7598 599for.end7: ; preds = %for.inc5600 ret void601}602 603 604;; for (long int i = 0; i < 5; i++)605;; for (long int j = 0; j <= 10; j++) {606;; A[11*i - j] = i;607;; *B++ = A[45];608 609define void @rdiv11(ptr %A, ptr %B) nounwind uwtable ssp {610; CHECK-LABEL: 'rdiv11'611; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4612; CHECK-NEXT: da analyze - none!613; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx4, align 4614; CHECK-NEXT: da analyze - none!615; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4616; CHECK-NEXT: da analyze - confused!617; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx4, align 4 --> Dst: %0 = load i32, ptr %arrayidx4, align 4618; CHECK-NEXT: da analyze - consistent input [S S]!619; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx4, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4620; CHECK-NEXT: da analyze - confused!621; CHECK-NEXT: Src: store i32 %0, ptr %B.addr.11, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4622; CHECK-NEXT: da analyze - none!623;624entry:625 br label %for.cond1.preheader626 627for.cond1.preheader: ; preds = %entry, %for.inc5628 %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc5 ]629 %i.03 = phi i64 [ 0, %entry ], [ %inc6, %for.inc5 ]630 br label %for.body3631 632for.body3: ; preds = %for.cond1.preheader, %for.body3633 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]634 %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]635 %conv = trunc i64 %i.03 to i32636 %mul = mul nsw i64 %i.03, 11637 %sub = sub nsw i64 %mul, %j.02638 %arrayidx = getelementptr inbounds i32, ptr %A, i64 %sub639 store i32 %conv, ptr %arrayidx, align 4640 %arrayidx4 = getelementptr inbounds i32, ptr %A, i64 45641 %0 = load i32, ptr %arrayidx4, align 4642 %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.11, i64 1643 store i32 %0, ptr %B.addr.11, align 4644 %inc = add nsw i64 %j.02, 1645 %exitcond = icmp ne i64 %inc, 11646 br i1 %exitcond, label %for.body3, label %for.inc5647 648for.inc5: ; preds = %for.body3649 %scevgep = getelementptr i32, ptr %B.addr.04, i64 11650 %inc6 = add nsw i64 %i.03, 1651 %exitcond5 = icmp ne i64 %inc6, 5652 br i1 %exitcond5, label %for.cond1.preheader, label %for.end7653 654for.end7: ; preds = %for.inc5655 ret void656}657 658 659;; for (long int i = 0; i <= 5; i++)660;; for (long int j = 0; j <= 10; j++) {661;; A[11*i - j] = i;662;; *B++ = A[45];663 664define void @rdiv12(ptr %A, ptr %B) nounwind uwtable ssp {665; CHECK-LABEL: 'rdiv12'666; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4667; CHECK-NEXT: da analyze - none!668; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx4, align 4669; CHECK-NEXT: da analyze - flow [* *|<]!670; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4671; CHECK-NEXT: da analyze - confused!672; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx4, align 4 --> Dst: %0 = load i32, ptr %arrayidx4, align 4673; CHECK-NEXT: da analyze - consistent input [S S]!674; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx4, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4675; CHECK-NEXT: da analyze - confused!676; CHECK-NEXT: Src: store i32 %0, ptr %B.addr.11, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4677; CHECK-NEXT: da analyze - none!678;679entry:680 br label %for.cond1.preheader681 682for.cond1.preheader: ; preds = %entry, %for.inc5683 %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc5 ]684 %i.03 = phi i64 [ 0, %entry ], [ %inc6, %for.inc5 ]685 br label %for.body3686 687for.body3: ; preds = %for.cond1.preheader, %for.body3688 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]689 %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]690 %conv = trunc i64 %i.03 to i32691 %mul = mul nsw i64 %i.03, 11692 %sub = sub nsw i64 %mul, %j.02693 %arrayidx = getelementptr inbounds i32, ptr %A, i64 %sub694 store i32 %conv, ptr %arrayidx, align 4695 %arrayidx4 = getelementptr inbounds i32, ptr %A, i64 45696 %0 = load i32, ptr %arrayidx4, align 4697 %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.11, i64 1698 store i32 %0, ptr %B.addr.11, align 4699 %inc = add nsw i64 %j.02, 1700 %exitcond = icmp ne i64 %inc, 11701 br i1 %exitcond, label %for.body3, label %for.inc5702 703for.inc5: ; preds = %for.body3704 %scevgep = getelementptr i32, ptr %B.addr.04, i64 11705 %inc6 = add nsw i64 %i.03, 1706 %exitcond5 = icmp ne i64 %inc6, 6707 br i1 %exitcond5, label %for.cond1.preheader, label %for.end7708 709for.end7: ; preds = %for.inc5710 ret void711}712