1*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -analyze -basicaa -da | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker; ModuleID = 'Propagating.bc' 4*9880d681SAndroid Build Coastguard Workertarget 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" 5*9880d681SAndroid Build Coastguard Workertarget triple = "x86_64-apple-macosx10.6.0" 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Worker;; for (long int i = 0; i < 100; i++) 9*9880d681SAndroid Build Coastguard Worker;; for (long int j = 0; j < 100; j++) { 10*9880d681SAndroid Build Coastguard Worker;; A[i + 1][i + j] = i; 11*9880d681SAndroid Build Coastguard Worker;; *B++ = A[i][i + j]; 12*9880d681SAndroid Build Coastguard Worker 13*9880d681SAndroid Build Coastguard Workerdefine void @prop0([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp { 14*9880d681SAndroid Build Coastguard Workerentry: 15*9880d681SAndroid Build Coastguard Worker br label %for.cond1.preheader 16*9880d681SAndroid Build Coastguard Worker 17*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 18*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - consistent flow [1 -1]! 19*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 20*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 21*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 22*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Workerfor.cond1.preheader: ; preds = %entry, %for.inc9 25*9880d681SAndroid Build Coastguard Worker %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc9 ] 26*9880d681SAndroid Build Coastguard Worker %i.03 = phi i64 [ 0, %entry ], [ %inc10, %for.inc9 ] 27*9880d681SAndroid Build Coastguard Worker br label %for.body3 28*9880d681SAndroid Build Coastguard Worker 29*9880d681SAndroid Build Coastguard Workerfor.body3: ; preds = %for.cond1.preheader, %for.body3 30*9880d681SAndroid Build Coastguard Worker %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ] 31*9880d681SAndroid Build Coastguard Worker %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ] 32*9880d681SAndroid Build Coastguard Worker %conv = trunc i64 %i.03 to i32 33*9880d681SAndroid Build Coastguard Worker %add = add nsw i64 %i.03, %j.02 34*9880d681SAndroid Build Coastguard Worker %add4 = add nsw i64 %i.03, 1 35*9880d681SAndroid Build Coastguard Worker %arrayidx5 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %add4, i64 %add 36*9880d681SAndroid Build Coastguard Worker store i32 %conv, i32* %arrayidx5, align 4 37*9880d681SAndroid Build Coastguard Worker %add6 = add nsw i64 %i.03, %j.02 38*9880d681SAndroid Build Coastguard Worker %arrayidx8 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.03, i64 %add6 39*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %arrayidx8, align 4 40*9880d681SAndroid Build Coastguard Worker %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1 41*9880d681SAndroid Build Coastguard Worker store i32 %0, i32* %B.addr.11, align 4 42*9880d681SAndroid Build Coastguard Worker %inc = add nsw i64 %j.02, 1 43*9880d681SAndroid Build Coastguard Worker %exitcond = icmp ne i64 %inc, 100 44*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %for.body3, label %for.inc9 45*9880d681SAndroid Build Coastguard Worker 46*9880d681SAndroid Build Coastguard Workerfor.inc9: ; preds = %for.body3 47*9880d681SAndroid Build Coastguard Worker %scevgep = getelementptr i32, i32* %B.addr.04, i64 100 48*9880d681SAndroid Build Coastguard Worker %inc10 = add nsw i64 %i.03, 1 49*9880d681SAndroid Build Coastguard Worker %exitcond5 = icmp ne i64 %inc10, 100 50*9880d681SAndroid Build Coastguard Worker br i1 %exitcond5, label %for.cond1.preheader, label %for.end11 51*9880d681SAndroid Build Coastguard Worker 52*9880d681SAndroid Build Coastguard Workerfor.end11: ; preds = %for.inc9 53*9880d681SAndroid Build Coastguard Worker ret void 54*9880d681SAndroid Build Coastguard Worker} 55*9880d681SAndroid Build Coastguard Worker 56*9880d681SAndroid Build Coastguard Worker 57*9880d681SAndroid Build Coastguard Worker;; for (long int i = 0; i < 100; i++) 58*9880d681SAndroid Build Coastguard Worker;; for (long int j = 0; j < 100; j++) 59*9880d681SAndroid Build Coastguard Worker;; for (long int k = 0; k < 100; k++) { 60*9880d681SAndroid Build Coastguard Worker;; A[j - i][i + 1][j + k] = i; 61*9880d681SAndroid Build Coastguard Worker;; *B++ = A[j - i][i][j + k]; 62*9880d681SAndroid Build Coastguard Worker 63*9880d681SAndroid Build Coastguard Workerdefine void @prop1([100 x [100 x i32]]* %A, i32* %B, i32 %n) nounwind uwtable ssp { 64*9880d681SAndroid Build Coastguard Workerentry: 65*9880d681SAndroid Build Coastguard Worker br label %for.cond1.preheader 66*9880d681SAndroid Build Coastguard Worker 67*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 68*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - consistent flow [1 1 -1]! 69*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 70*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 71*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 72*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 73*9880d681SAndroid Build Coastguard Worker 74*9880d681SAndroid Build Coastguard Workerfor.cond1.preheader: ; preds = %entry, %for.inc18 75*9880d681SAndroid Build Coastguard Worker %B.addr.06 = phi i32* [ %B, %entry ], [ %scevgep7, %for.inc18 ] 76*9880d681SAndroid Build Coastguard Worker %i.05 = phi i64 [ 0, %entry ], [ %inc19, %for.inc18 ] 77*9880d681SAndroid Build Coastguard Worker br label %for.cond4.preheader 78*9880d681SAndroid Build Coastguard Worker 79*9880d681SAndroid Build Coastguard Workerfor.cond4.preheader: ; preds = %for.cond1.preheader, %for.inc15 80*9880d681SAndroid Build Coastguard Worker %B.addr.14 = phi i32* [ %B.addr.06, %for.cond1.preheader ], [ %scevgep, %for.inc15 ] 81*9880d681SAndroid Build Coastguard Worker %j.03 = phi i64 [ 0, %for.cond1.preheader ], [ %inc16, %for.inc15 ] 82*9880d681SAndroid Build Coastguard Worker br label %for.body6 83*9880d681SAndroid Build Coastguard Worker 84*9880d681SAndroid Build Coastguard Workerfor.body6: ; preds = %for.cond4.preheader, %for.body6 85*9880d681SAndroid Build Coastguard Worker %k.02 = phi i64 [ 0, %for.cond4.preheader ], [ %inc, %for.body6 ] 86*9880d681SAndroid Build Coastguard Worker %B.addr.21 = phi i32* [ %B.addr.14, %for.cond4.preheader ], [ %incdec.ptr, %for.body6 ] 87*9880d681SAndroid Build Coastguard Worker %conv = trunc i64 %i.05 to i32 88*9880d681SAndroid Build Coastguard Worker %add = add nsw i64 %j.03, %k.02 89*9880d681SAndroid Build Coastguard Worker %add7 = add nsw i64 %i.05, 1 90*9880d681SAndroid Build Coastguard Worker %sub = sub nsw i64 %j.03, %i.05 91*9880d681SAndroid Build Coastguard Worker %arrayidx9 = getelementptr inbounds [100 x [100 x i32]], [100 x [100 x i32]]* %A, i64 %sub, i64 %add7, i64 %add 92*9880d681SAndroid Build Coastguard Worker store i32 %conv, i32* %arrayidx9, align 4 93*9880d681SAndroid Build Coastguard Worker %add10 = add nsw i64 %j.03, %k.02 94*9880d681SAndroid Build Coastguard Worker %sub11 = sub nsw i64 %j.03, %i.05 95*9880d681SAndroid Build Coastguard Worker %arrayidx14 = getelementptr inbounds [100 x [100 x i32]], [100 x [100 x i32]]* %A, i64 %sub11, i64 %i.05, i64 %add10 96*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %arrayidx14, align 4 97*9880d681SAndroid Build Coastguard Worker %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.21, i64 1 98*9880d681SAndroid Build Coastguard Worker store i32 %0, i32* %B.addr.21, align 4 99*9880d681SAndroid Build Coastguard Worker %inc = add nsw i64 %k.02, 1 100*9880d681SAndroid Build Coastguard Worker %exitcond = icmp ne i64 %inc, 100 101*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %for.body6, label %for.inc15 102*9880d681SAndroid Build Coastguard Worker 103*9880d681SAndroid Build Coastguard Workerfor.inc15: ; preds = %for.body6 104*9880d681SAndroid Build Coastguard Worker %scevgep = getelementptr i32, i32* %B.addr.14, i64 100 105*9880d681SAndroid Build Coastguard Worker %inc16 = add nsw i64 %j.03, 1 106*9880d681SAndroid Build Coastguard Worker %exitcond8 = icmp ne i64 %inc16, 100 107*9880d681SAndroid Build Coastguard Worker br i1 %exitcond8, label %for.cond4.preheader, label %for.inc18 108*9880d681SAndroid Build Coastguard Worker 109*9880d681SAndroid Build Coastguard Workerfor.inc18: ; preds = %for.inc15 110*9880d681SAndroid Build Coastguard Worker %scevgep7 = getelementptr i32, i32* %B.addr.06, i64 10000 111*9880d681SAndroid Build Coastguard Worker %inc19 = add nsw i64 %i.05, 1 112*9880d681SAndroid Build Coastguard Worker %exitcond9 = icmp ne i64 %inc19, 100 113*9880d681SAndroid Build Coastguard Worker br i1 %exitcond9, label %for.cond1.preheader, label %for.end20 114*9880d681SAndroid Build Coastguard Worker 115*9880d681SAndroid Build Coastguard Workerfor.end20: ; preds = %for.inc18 116*9880d681SAndroid Build Coastguard Worker ret void 117*9880d681SAndroid Build Coastguard Worker} 118*9880d681SAndroid Build Coastguard Worker 119*9880d681SAndroid Build Coastguard Worker 120*9880d681SAndroid Build Coastguard Worker;; for (long int i = 0; i < 100; i++) 121*9880d681SAndroid Build Coastguard Worker;; for (long int j = 0; j < 100; j++) { 122*9880d681SAndroid Build Coastguard Worker;; A[i - 1][2*i] = i; 123*9880d681SAndroid Build Coastguard Worker;; *B++ = A[i][i + j + 110]; 124*9880d681SAndroid Build Coastguard Worker 125*9880d681SAndroid Build Coastguard Workerdefine void @prop2([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp { 126*9880d681SAndroid Build Coastguard Workerentry: 127*9880d681SAndroid Build Coastguard Worker br label %for.cond1.preheader 128*9880d681SAndroid Build Coastguard Worker 129*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - consistent output [0 S]! 130*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 131*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 132*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 133*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 134*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 135*9880d681SAndroid Build Coastguard Worker 136*9880d681SAndroid Build Coastguard Workerfor.cond1.preheader: ; preds = %entry, %for.inc8 137*9880d681SAndroid Build Coastguard Worker %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc8 ] 138*9880d681SAndroid Build Coastguard Worker %i.03 = phi i64 [ 0, %entry ], [ %inc9, %for.inc8 ] 139*9880d681SAndroid Build Coastguard Worker br label %for.body3 140*9880d681SAndroid Build Coastguard Worker 141*9880d681SAndroid Build Coastguard Workerfor.body3: ; preds = %for.cond1.preheader, %for.body3 142*9880d681SAndroid Build Coastguard Worker %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ] 143*9880d681SAndroid Build Coastguard Worker %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ] 144*9880d681SAndroid Build Coastguard Worker %conv = trunc i64 %i.03 to i32 145*9880d681SAndroid Build Coastguard Worker %mul = shl nsw i64 %i.03, 1 146*9880d681SAndroid Build Coastguard Worker %sub = add nsw i64 %i.03, -1 147*9880d681SAndroid Build Coastguard Worker %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub, i64 %mul 148*9880d681SAndroid Build Coastguard Worker store i32 %conv, i32* %arrayidx4, align 4 149*9880d681SAndroid Build Coastguard Worker %add = add nsw i64 %i.03, %j.02 150*9880d681SAndroid Build Coastguard Worker %add5 = add nsw i64 %add, 110 151*9880d681SAndroid Build Coastguard Worker %arrayidx7 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.03, i64 %add5 152*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %arrayidx7, align 4 153*9880d681SAndroid Build Coastguard Worker %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1 154*9880d681SAndroid Build Coastguard Worker store i32 %0, i32* %B.addr.11, align 4 155*9880d681SAndroid Build Coastguard Worker %inc = add nsw i64 %j.02, 1 156*9880d681SAndroid Build Coastguard Worker %exitcond = icmp ne i64 %inc, 100 157*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %for.body3, label %for.inc8 158*9880d681SAndroid Build Coastguard Worker 159*9880d681SAndroid Build Coastguard Workerfor.inc8: ; preds = %for.body3 160*9880d681SAndroid Build Coastguard Worker %scevgep = getelementptr i32, i32* %B.addr.04, i64 100 161*9880d681SAndroid Build Coastguard Worker %inc9 = add nsw i64 %i.03, 1 162*9880d681SAndroid Build Coastguard Worker %exitcond5 = icmp ne i64 %inc9, 100 163*9880d681SAndroid Build Coastguard Worker br i1 %exitcond5, label %for.cond1.preheader, label %for.end10 164*9880d681SAndroid Build Coastguard Worker 165*9880d681SAndroid Build Coastguard Workerfor.end10: ; preds = %for.inc8 166*9880d681SAndroid Build Coastguard Worker ret void 167*9880d681SAndroid Build Coastguard Worker} 168*9880d681SAndroid Build Coastguard Worker 169*9880d681SAndroid Build Coastguard Worker 170*9880d681SAndroid Build Coastguard Worker;; for (long int i = 0; i < 100; i++) 171*9880d681SAndroid Build Coastguard Worker;; for (long int j = 0; j < 100; j++) { 172*9880d681SAndroid Build Coastguard Worker;; A[i][2*j + i] = i; 173*9880d681SAndroid Build Coastguard Worker;; *B++ = A[i][2*j - i + 5]; 174*9880d681SAndroid Build Coastguard Worker 175*9880d681SAndroid Build Coastguard Workerdefine void @prop3([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp { 176*9880d681SAndroid Build Coastguard Workerentry: 177*9880d681SAndroid Build Coastguard Worker br label %for.cond1.preheader 178*9880d681SAndroid Build Coastguard Worker 179*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 180*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 181*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 182*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 183*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 184*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 185*9880d681SAndroid Build Coastguard Worker 186*9880d681SAndroid Build Coastguard Workerfor.cond1.preheader: ; preds = %entry, %for.inc9 187*9880d681SAndroid Build Coastguard Worker %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc9 ] 188*9880d681SAndroid Build Coastguard Worker %i.03 = phi i64 [ 0, %entry ], [ %inc10, %for.inc9 ] 189*9880d681SAndroid Build Coastguard Worker br label %for.body3 190*9880d681SAndroid Build Coastguard Worker 191*9880d681SAndroid Build Coastguard Workerfor.body3: ; preds = %for.cond1.preheader, %for.body3 192*9880d681SAndroid Build Coastguard Worker %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ] 193*9880d681SAndroid Build Coastguard Worker %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ] 194*9880d681SAndroid Build Coastguard Worker %conv = trunc i64 %i.03 to i32 195*9880d681SAndroid Build Coastguard Worker %mul = shl nsw i64 %j.02, 1 196*9880d681SAndroid Build Coastguard Worker %add = add nsw i64 %mul, %i.03 197*9880d681SAndroid Build Coastguard Worker %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.03, i64 %add 198*9880d681SAndroid Build Coastguard Worker store i32 %conv, i32* %arrayidx4, align 4 199*9880d681SAndroid Build Coastguard Worker %mul5 = shl nsw i64 %j.02, 1 200*9880d681SAndroid Build Coastguard Worker %sub = sub nsw i64 %mul5, %i.03 201*9880d681SAndroid Build Coastguard Worker %add6 = add nsw i64 %sub, 5 202*9880d681SAndroid Build Coastguard Worker %arrayidx8 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.03, i64 %add6 203*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %arrayidx8, align 4 204*9880d681SAndroid Build Coastguard Worker %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1 205*9880d681SAndroid Build Coastguard Worker store i32 %0, i32* %B.addr.11, align 4 206*9880d681SAndroid Build Coastguard Worker %inc = add nsw i64 %j.02, 1 207*9880d681SAndroid Build Coastguard Worker %exitcond = icmp ne i64 %inc, 100 208*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %for.body3, label %for.inc9 209*9880d681SAndroid Build Coastguard Worker 210*9880d681SAndroid Build Coastguard Workerfor.inc9: ; preds = %for.body3 211*9880d681SAndroid Build Coastguard Worker %scevgep = getelementptr i32, i32* %B.addr.04, i64 100 212*9880d681SAndroid Build Coastguard Worker %inc10 = add nsw i64 %i.03, 1 213*9880d681SAndroid Build Coastguard Worker %exitcond5 = icmp ne i64 %inc10, 100 214*9880d681SAndroid Build Coastguard Worker br i1 %exitcond5, label %for.cond1.preheader, label %for.end11 215*9880d681SAndroid Build Coastguard Worker 216*9880d681SAndroid Build Coastguard Workerfor.end11: ; preds = %for.inc9 217*9880d681SAndroid Build Coastguard Worker ret void 218*9880d681SAndroid Build Coastguard Worker} 219*9880d681SAndroid Build Coastguard Worker 220*9880d681SAndroid Build Coastguard Worker 221*9880d681SAndroid Build Coastguard Worker;; for (long int i = 0; i < 100; i++) 222*9880d681SAndroid Build Coastguard Worker;; for (long int j = 0; j < 100; j++) { 223*9880d681SAndroid Build Coastguard Worker;; A[i + 2][2*i + j + 1] = i; 224*9880d681SAndroid Build Coastguard Worker;; *B++ = A[i][2*i + j]; 225*9880d681SAndroid Build Coastguard Worker 226*9880d681SAndroid Build Coastguard Workerdefine void @prop4([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp { 227*9880d681SAndroid Build Coastguard Workerentry: 228*9880d681SAndroid Build Coastguard Worker br label %for.cond1.preheader 229*9880d681SAndroid Build Coastguard Worker 230*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 231*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - consistent flow [2 -3]! 232*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 233*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 234*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 235*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 236*9880d681SAndroid Build Coastguard Worker 237*9880d681SAndroid Build Coastguard Workerfor.cond1.preheader: ; preds = %entry, %for.inc11 238*9880d681SAndroid Build Coastguard Worker %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc11 ] 239*9880d681SAndroid Build Coastguard Worker %i.03 = phi i64 [ 0, %entry ], [ %inc12, %for.inc11 ] 240*9880d681SAndroid Build Coastguard Worker br label %for.body3 241*9880d681SAndroid Build Coastguard Worker 242*9880d681SAndroid Build Coastguard Workerfor.body3: ; preds = %for.cond1.preheader, %for.body3 243*9880d681SAndroid Build Coastguard Worker %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ] 244*9880d681SAndroid Build Coastguard Worker %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ] 245*9880d681SAndroid Build Coastguard Worker %conv = trunc i64 %i.03 to i32 246*9880d681SAndroid Build Coastguard Worker %mul = shl nsw i64 %i.03, 1 247*9880d681SAndroid Build Coastguard Worker %add = add nsw i64 %mul, %j.02 248*9880d681SAndroid Build Coastguard Worker %add4 = add nsw i64 %add, 1 249*9880d681SAndroid Build Coastguard Worker %add5 = add nsw i64 %i.03, 2 250*9880d681SAndroid Build Coastguard Worker %arrayidx6 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %add5, i64 %add4 251*9880d681SAndroid Build Coastguard Worker store i32 %conv, i32* %arrayidx6, align 4 252*9880d681SAndroid Build Coastguard Worker %mul7 = shl nsw i64 %i.03, 1 253*9880d681SAndroid Build Coastguard Worker %add8 = add nsw i64 %mul7, %j.02 254*9880d681SAndroid Build Coastguard Worker %arrayidx10 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.03, i64 %add8 255*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %arrayidx10, align 4 256*9880d681SAndroid Build Coastguard Worker %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1 257*9880d681SAndroid Build Coastguard Worker store i32 %0, i32* %B.addr.11, align 4 258*9880d681SAndroid Build Coastguard Worker %inc = add nsw i64 %j.02, 1 259*9880d681SAndroid Build Coastguard Worker %exitcond = icmp ne i64 %inc, 100 260*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %for.body3, label %for.inc11 261*9880d681SAndroid Build Coastguard Worker 262*9880d681SAndroid Build Coastguard Workerfor.inc11: ; preds = %for.body3 263*9880d681SAndroid Build Coastguard Worker %scevgep = getelementptr i32, i32* %B.addr.04, i64 100 264*9880d681SAndroid Build Coastguard Worker %inc12 = add nsw i64 %i.03, 1 265*9880d681SAndroid Build Coastguard Worker %exitcond5 = icmp ne i64 %inc12, 100 266*9880d681SAndroid Build Coastguard Worker br i1 %exitcond5, label %for.cond1.preheader, label %for.end13 267*9880d681SAndroid Build Coastguard Worker 268*9880d681SAndroid Build Coastguard Workerfor.end13: ; preds = %for.inc11 269*9880d681SAndroid Build Coastguard Worker ret void 270*9880d681SAndroid Build Coastguard Worker} 271*9880d681SAndroid Build Coastguard Worker 272*9880d681SAndroid Build Coastguard Worker 273*9880d681SAndroid Build Coastguard Worker;; for (long int i = 0; i < 100; i++) 274*9880d681SAndroid Build Coastguard Worker;; for (long int j = 0; j < 100; j++) { 275*9880d681SAndroid Build Coastguard Worker;; A[3*i - 18][22 - i][2*i + j] = i; 276*9880d681SAndroid Build Coastguard Worker;; *B++ = A[i][i][3*i + j]; 277*9880d681SAndroid Build Coastguard Worker 278*9880d681SAndroid Build Coastguard Workerdefine void @prop5([100 x [100 x i32]]* %A, i32* %B, i32 %n) nounwind uwtable ssp { 279*9880d681SAndroid Build Coastguard Workerentry: 280*9880d681SAndroid Build Coastguard Worker br label %for.cond1.preheader 281*9880d681SAndroid Build Coastguard Worker 282*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 283*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - flow [< -16] splitable! 284*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - split level = 1, iteration = 11! 285*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 286*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 287*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 288*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 289*9880d681SAndroid Build Coastguard Worker 290*9880d681SAndroid Build Coastguard Workerfor.cond1.preheader: ; preds = %entry, %for.inc13 291*9880d681SAndroid Build Coastguard Worker %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc13 ] 292*9880d681SAndroid Build Coastguard Worker %i.03 = phi i64 [ 0, %entry ], [ %inc14, %for.inc13 ] 293*9880d681SAndroid Build Coastguard Worker br label %for.body3 294*9880d681SAndroid Build Coastguard Worker 295*9880d681SAndroid Build Coastguard Workerfor.body3: ; preds = %for.cond1.preheader, %for.body3 296*9880d681SAndroid Build Coastguard Worker %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ] 297*9880d681SAndroid Build Coastguard Worker %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ] 298*9880d681SAndroid Build Coastguard Worker %conv = trunc i64 %i.03 to i32 299*9880d681SAndroid Build Coastguard Worker %mul = shl nsw i64 %i.03, 1 300*9880d681SAndroid Build Coastguard Worker %add = add nsw i64 %mul, %j.02 301*9880d681SAndroid Build Coastguard Worker %sub = sub nsw i64 22, %i.03 302*9880d681SAndroid Build Coastguard Worker %mul4 = mul nsw i64 %i.03, 3 303*9880d681SAndroid Build Coastguard Worker %sub5 = add nsw i64 %mul4, -18 304*9880d681SAndroid Build Coastguard Worker %arrayidx7 = getelementptr inbounds [100 x [100 x i32]], [100 x [100 x i32]]* %A, i64 %sub5, i64 %sub, i64 %add 305*9880d681SAndroid Build Coastguard Worker store i32 %conv, i32* %arrayidx7, align 4 306*9880d681SAndroid Build Coastguard Worker %mul8 = mul nsw i64 %i.03, 3 307*9880d681SAndroid Build Coastguard Worker %add9 = add nsw i64 %mul8, %j.02 308*9880d681SAndroid Build Coastguard Worker %arrayidx12 = getelementptr inbounds [100 x [100 x i32]], [100 x [100 x i32]]* %A, i64 %i.03, i64 %i.03, i64 %add9 309*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %arrayidx12, align 4 310*9880d681SAndroid Build Coastguard Worker %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1 311*9880d681SAndroid Build Coastguard Worker store i32 %0, i32* %B.addr.11, align 4 312*9880d681SAndroid Build Coastguard Worker %inc = add nsw i64 %j.02, 1 313*9880d681SAndroid Build Coastguard Worker %exitcond = icmp ne i64 %inc, 100 314*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %for.body3, label %for.inc13 315*9880d681SAndroid Build Coastguard Worker 316*9880d681SAndroid Build Coastguard Workerfor.inc13: ; preds = %for.body3 317*9880d681SAndroid Build Coastguard Worker %scevgep = getelementptr i32, i32* %B.addr.04, i64 100 318*9880d681SAndroid Build Coastguard Worker %inc14 = add nsw i64 %i.03, 1 319*9880d681SAndroid Build Coastguard Worker %exitcond5 = icmp ne i64 %inc14, 100 320*9880d681SAndroid Build Coastguard Worker br i1 %exitcond5, label %for.cond1.preheader, label %for.end15 321*9880d681SAndroid Build Coastguard Worker 322*9880d681SAndroid Build Coastguard Workerfor.end15: ; preds = %for.inc13 323*9880d681SAndroid Build Coastguard Worker ret void 324*9880d681SAndroid Build Coastguard Worker} 325*9880d681SAndroid Build Coastguard Worker 326*9880d681SAndroid Build Coastguard Worker 327*9880d681SAndroid Build Coastguard Worker;; for (long int i = 0; i < 100; i++) 328*9880d681SAndroid Build Coastguard Worker;; for (long int j = 0; j < 100; j++) { 329*9880d681SAndroid Build Coastguard Worker;; A[i + 1][4*i + j + 2] = i; 330*9880d681SAndroid Build Coastguard Worker;; *B++ = A[2*i][8*i + j]; 331*9880d681SAndroid Build Coastguard Worker 332*9880d681SAndroid Build Coastguard Workerdefine void @prop6([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp { 333*9880d681SAndroid Build Coastguard Workerentry: 334*9880d681SAndroid Build Coastguard Worker br label %for.cond1.preheader 335*9880d681SAndroid Build Coastguard Worker 336*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 337*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - flow [=> -2]! 338*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 339*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 340*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 341*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 342*9880d681SAndroid Build Coastguard Worker 343*9880d681SAndroid Build Coastguard Workerfor.cond1.preheader: ; preds = %entry, %for.inc12 344*9880d681SAndroid Build Coastguard Worker %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc12 ] 345*9880d681SAndroid Build Coastguard Worker %i.03 = phi i64 [ 0, %entry ], [ %inc13, %for.inc12 ] 346*9880d681SAndroid Build Coastguard Worker br label %for.body3 347*9880d681SAndroid Build Coastguard Worker 348*9880d681SAndroid Build Coastguard Workerfor.body3: ; preds = %for.cond1.preheader, %for.body3 349*9880d681SAndroid Build Coastguard Worker %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ] 350*9880d681SAndroid Build Coastguard Worker %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ] 351*9880d681SAndroid Build Coastguard Worker %conv = trunc i64 %i.03 to i32 352*9880d681SAndroid Build Coastguard Worker %mul = shl nsw i64 %i.03, 2 353*9880d681SAndroid Build Coastguard Worker %add = add nsw i64 %mul, %j.02 354*9880d681SAndroid Build Coastguard Worker %add4 = add nsw i64 %add, 2 355*9880d681SAndroid Build Coastguard Worker %add5 = add nsw i64 %i.03, 1 356*9880d681SAndroid Build Coastguard Worker %arrayidx6 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %add5, i64 %add4 357*9880d681SAndroid Build Coastguard Worker store i32 %conv, i32* %arrayidx6, align 4 358*9880d681SAndroid Build Coastguard Worker %mul7 = shl nsw i64 %i.03, 3 359*9880d681SAndroid Build Coastguard Worker %add8 = add nsw i64 %mul7, %j.02 360*9880d681SAndroid Build Coastguard Worker %mul9 = shl nsw i64 %i.03, 1 361*9880d681SAndroid Build Coastguard Worker %arrayidx11 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %mul9, i64 %add8 362*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %arrayidx11, align 4 363*9880d681SAndroid Build Coastguard Worker %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1 364*9880d681SAndroid Build Coastguard Worker store i32 %0, i32* %B.addr.11, align 4 365*9880d681SAndroid Build Coastguard Worker %inc = add nsw i64 %j.02, 1 366*9880d681SAndroid Build Coastguard Worker %exitcond = icmp ne i64 %inc, 100 367*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %for.body3, label %for.inc12 368*9880d681SAndroid Build Coastguard Worker 369*9880d681SAndroid Build Coastguard Workerfor.inc12: ; preds = %for.body3 370*9880d681SAndroid Build Coastguard Worker %scevgep = getelementptr i32, i32* %B.addr.04, i64 100 371*9880d681SAndroid Build Coastguard Worker %inc13 = add nsw i64 %i.03, 1 372*9880d681SAndroid Build Coastguard Worker %exitcond5 = icmp ne i64 %inc13, 100 373*9880d681SAndroid Build Coastguard Worker br i1 %exitcond5, label %for.cond1.preheader, label %for.end14 374*9880d681SAndroid Build Coastguard Worker 375*9880d681SAndroid Build Coastguard Workerfor.end14: ; preds = %for.inc12 376*9880d681SAndroid Build Coastguard Worker ret void 377*9880d681SAndroid Build Coastguard Worker} 378*9880d681SAndroid Build Coastguard Worker 379*9880d681SAndroid Build Coastguard Worker 380*9880d681SAndroid Build Coastguard Worker;; for (long int i = 0; i < 100; i++) 381*9880d681SAndroid Build Coastguard Worker;; for (long int j = 0; j < 100; j++) { 382*9880d681SAndroid Build Coastguard Worker;; A[2*i + 4][-5*i + j + 2] = i; 383*9880d681SAndroid Build Coastguard Worker;; *B++ = A[-2*i + 20][5*i + j]; 384*9880d681SAndroid Build Coastguard Worker 385*9880d681SAndroid Build Coastguard Workerdefine void @prop7([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp { 386*9880d681SAndroid Build Coastguard Workerentry: 387*9880d681SAndroid Build Coastguard Worker br label %for.cond1.preheader 388*9880d681SAndroid Build Coastguard Worker 389*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 390*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - flow [* -38] splitable! 391*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - split level = 1, iteration = 4! 392*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 393*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 394*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 395*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 396*9880d681SAndroid Build Coastguard Worker 397*9880d681SAndroid Build Coastguard Workerfor.cond1.preheader: ; preds = %entry, %for.inc14 398*9880d681SAndroid Build Coastguard Worker %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc14 ] 399*9880d681SAndroid Build Coastguard Worker %i.03 = phi i64 [ 0, %entry ], [ %inc15, %for.inc14 ] 400*9880d681SAndroid Build Coastguard Worker br label %for.body3 401*9880d681SAndroid Build Coastguard Worker 402*9880d681SAndroid Build Coastguard Workerfor.body3: ; preds = %for.cond1.preheader, %for.body3 403*9880d681SAndroid Build Coastguard Worker %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ] 404*9880d681SAndroid Build Coastguard Worker %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ] 405*9880d681SAndroid Build Coastguard Worker %conv = trunc i64 %i.03 to i32 406*9880d681SAndroid Build Coastguard Worker %mul = mul nsw i64 %i.03, -5 407*9880d681SAndroid Build Coastguard Worker %add = add nsw i64 %mul, %j.02 408*9880d681SAndroid Build Coastguard Worker %add4 = add nsw i64 %add, 2 409*9880d681SAndroid Build Coastguard Worker %mul5 = shl nsw i64 %i.03, 1 410*9880d681SAndroid Build Coastguard Worker %add6 = add nsw i64 %mul5, 4 411*9880d681SAndroid Build Coastguard Worker %arrayidx7 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %add6, i64 %add4 412*9880d681SAndroid Build Coastguard Worker store i32 %conv, i32* %arrayidx7, align 4 413*9880d681SAndroid Build Coastguard Worker %mul8 = mul nsw i64 %i.03, 5 414*9880d681SAndroid Build Coastguard Worker %add9 = add nsw i64 %mul8, %j.02 415*9880d681SAndroid Build Coastguard Worker %mul10 = mul nsw i64 %i.03, -2 416*9880d681SAndroid Build Coastguard Worker %add11 = add nsw i64 %mul10, 20 417*9880d681SAndroid Build Coastguard Worker %arrayidx13 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %add11, i64 %add9 418*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %arrayidx13, align 4 419*9880d681SAndroid Build Coastguard Worker %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1 420*9880d681SAndroid Build Coastguard Worker store i32 %0, i32* %B.addr.11, align 4 421*9880d681SAndroid Build Coastguard Worker %inc = add nsw i64 %j.02, 1 422*9880d681SAndroid Build Coastguard Worker %exitcond = icmp ne i64 %inc, 100 423*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %for.body3, label %for.inc14 424*9880d681SAndroid Build Coastguard Worker 425*9880d681SAndroid Build Coastguard Workerfor.inc14: ; preds = %for.body3 426*9880d681SAndroid Build Coastguard Worker %scevgep = getelementptr i32, i32* %B.addr.04, i64 100 427*9880d681SAndroid Build Coastguard Worker %inc15 = add nsw i64 %i.03, 1 428*9880d681SAndroid Build Coastguard Worker %exitcond5 = icmp ne i64 %inc15, 100 429*9880d681SAndroid Build Coastguard Worker br i1 %exitcond5, label %for.cond1.preheader, label %for.end16 430*9880d681SAndroid Build Coastguard Worker 431*9880d681SAndroid Build Coastguard Workerfor.end16: ; preds = %for.inc14 432*9880d681SAndroid Build Coastguard Worker ret void 433*9880d681SAndroid Build Coastguard Worker} 434*9880d681SAndroid Build Coastguard Worker 435*9880d681SAndroid Build Coastguard Worker 436*9880d681SAndroid Build Coastguard Worker;; for (long int i = 0; i < 100; i++) 437*9880d681SAndroid Build Coastguard Worker;; for (long int j = 0; j < 100; j++) { 438*9880d681SAndroid Build Coastguard Worker;; A[4][j + 2] = i; 439*9880d681SAndroid Build Coastguard Worker;; *B++ = A[-2*i + 4][5*i + j]; 440*9880d681SAndroid Build Coastguard Worker 441*9880d681SAndroid Build Coastguard Workerdefine void @prop8([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp { 442*9880d681SAndroid Build Coastguard Workerentry: 443*9880d681SAndroid Build Coastguard Worker br label %for.cond1.preheader 444*9880d681SAndroid Build Coastguard Worker 445*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - consistent output [S 0]! 446*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - flow [p<= 2]! 447*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 448*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 449*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 450*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 451*9880d681SAndroid Build Coastguard Worker 452*9880d681SAndroid Build Coastguard Workerfor.cond1.preheader: ; preds = %entry, %for.inc10 453*9880d681SAndroid Build Coastguard Worker %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc10 ] 454*9880d681SAndroid Build Coastguard Worker %i.03 = phi i64 [ 0, %entry ], [ %inc11, %for.inc10 ] 455*9880d681SAndroid Build Coastguard Worker br label %for.body3 456*9880d681SAndroid Build Coastguard Worker 457*9880d681SAndroid Build Coastguard Workerfor.body3: ; preds = %for.cond1.preheader, %for.body3 458*9880d681SAndroid Build Coastguard Worker %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ] 459*9880d681SAndroid Build Coastguard Worker %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ] 460*9880d681SAndroid Build Coastguard Worker %conv = trunc i64 %i.03 to i32 461*9880d681SAndroid Build Coastguard Worker %add = add nsw i64 %j.02, 2 462*9880d681SAndroid Build Coastguard Worker %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 4, i64 %add 463*9880d681SAndroid Build Coastguard Worker store i32 %conv, i32* %arrayidx4, align 4 464*9880d681SAndroid Build Coastguard Worker %mul = mul nsw i64 %i.03, 5 465*9880d681SAndroid Build Coastguard Worker %add5 = add nsw i64 %mul, %j.02 466*9880d681SAndroid Build Coastguard Worker %mul6 = mul nsw i64 %i.03, -2 467*9880d681SAndroid Build Coastguard Worker %add7 = add nsw i64 %mul6, 4 468*9880d681SAndroid Build Coastguard Worker %arrayidx9 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %add7, i64 %add5 469*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %arrayidx9, align 4 470*9880d681SAndroid Build Coastguard Worker %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1 471*9880d681SAndroid Build Coastguard Worker store i32 %0, i32* %B.addr.11, align 4 472*9880d681SAndroid Build Coastguard Worker %inc = add nsw i64 %j.02, 1 473*9880d681SAndroid Build Coastguard Worker %exitcond = icmp ne i64 %inc, 100 474*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %for.body3, label %for.inc10 475*9880d681SAndroid Build Coastguard Worker 476*9880d681SAndroid Build Coastguard Workerfor.inc10: ; preds = %for.body3 477*9880d681SAndroid Build Coastguard Worker %scevgep = getelementptr i32, i32* %B.addr.04, i64 100 478*9880d681SAndroid Build Coastguard Worker %inc11 = add nsw i64 %i.03, 1 479*9880d681SAndroid Build Coastguard Worker %exitcond5 = icmp ne i64 %inc11, 100 480*9880d681SAndroid Build Coastguard Worker br i1 %exitcond5, label %for.cond1.preheader, label %for.end12 481*9880d681SAndroid Build Coastguard Worker 482*9880d681SAndroid Build Coastguard Workerfor.end12: ; preds = %for.inc10 483*9880d681SAndroid Build Coastguard Worker ret void 484*9880d681SAndroid Build Coastguard Worker} 485*9880d681SAndroid Build Coastguard Worker 486*9880d681SAndroid Build Coastguard Worker 487*9880d681SAndroid Build Coastguard Worker;; for (long int i = 0; i < 100; i++) 488*9880d681SAndroid Build Coastguard Worker;; for (long int j = 0; j < 100; j++) { 489*9880d681SAndroid Build Coastguard Worker;; A[2*i + 4][5*i + j + 2] = i; 490*9880d681SAndroid Build Coastguard Worker;; *B++ = A[4][j]; 491*9880d681SAndroid Build Coastguard Worker 492*9880d681SAndroid Build Coastguard Workerdefine void @prop9([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp { 493*9880d681SAndroid Build Coastguard Workerentry: 494*9880d681SAndroid Build Coastguard Worker br label %for.cond1.preheader 495*9880d681SAndroid Build Coastguard Worker 496*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 497*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - flow [p<= 2]! 498*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 499*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - consistent input [S 0]! 500*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 501*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 502*9880d681SAndroid Build Coastguard Worker 503*9880d681SAndroid Build Coastguard Workerfor.cond1.preheader: ; preds = %entry, %for.inc10 504*9880d681SAndroid Build Coastguard Worker %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc10 ] 505*9880d681SAndroid Build Coastguard Worker %i.03 = phi i64 [ 0, %entry ], [ %inc11, %for.inc10 ] 506*9880d681SAndroid Build Coastguard Worker br label %for.body3 507*9880d681SAndroid Build Coastguard Worker 508*9880d681SAndroid Build Coastguard Workerfor.body3: ; preds = %for.cond1.preheader, %for.body3 509*9880d681SAndroid Build Coastguard Worker %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ] 510*9880d681SAndroid Build Coastguard Worker %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ] 511*9880d681SAndroid Build Coastguard Worker %conv = trunc i64 %i.03 to i32 512*9880d681SAndroid Build Coastguard Worker %mul = mul nsw i64 %i.03, 5 513*9880d681SAndroid Build Coastguard Worker %add = add nsw i64 %mul, %j.02 514*9880d681SAndroid Build Coastguard Worker %add4 = add nsw i64 %add, 2 515*9880d681SAndroid Build Coastguard Worker %mul5 = shl nsw i64 %i.03, 1 516*9880d681SAndroid Build Coastguard Worker %add6 = add nsw i64 %mul5, 4 517*9880d681SAndroid Build Coastguard Worker %arrayidx7 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %add6, i64 %add4 518*9880d681SAndroid Build Coastguard Worker store i32 %conv, i32* %arrayidx7, align 4 519*9880d681SAndroid Build Coastguard Worker %arrayidx9 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 4, i64 %j.02 520*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %arrayidx9, align 4 521*9880d681SAndroid Build Coastguard Worker %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1 522*9880d681SAndroid Build Coastguard Worker store i32 %0, i32* %B.addr.11, align 4 523*9880d681SAndroid Build Coastguard Worker %inc = add nsw i64 %j.02, 1 524*9880d681SAndroid Build Coastguard Worker %exitcond = icmp ne i64 %inc, 100 525*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %for.body3, label %for.inc10 526*9880d681SAndroid Build Coastguard Worker 527*9880d681SAndroid Build Coastguard Workerfor.inc10: ; preds = %for.body3 528*9880d681SAndroid Build Coastguard Worker %scevgep = getelementptr i32, i32* %B.addr.04, i64 100 529*9880d681SAndroid Build Coastguard Worker %inc11 = add nsw i64 %i.03, 1 530*9880d681SAndroid Build Coastguard Worker %exitcond5 = icmp ne i64 %inc11, 100 531*9880d681SAndroid Build Coastguard Worker br i1 %exitcond5, label %for.cond1.preheader, label %for.end12 532*9880d681SAndroid Build Coastguard Worker 533*9880d681SAndroid Build Coastguard Workerfor.end12: ; preds = %for.inc10 534*9880d681SAndroid Build Coastguard Worker ret void 535*9880d681SAndroid Build Coastguard Worker} 536