1*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -analyze -basicaa -da | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker; ModuleID = 'ExactSIV.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 unsigned i = 0; i < 10; i++) { 9*9880d681SAndroid Build Coastguard Worker;; A[i + 10] = i; 10*9880d681SAndroid Build Coastguard Worker;; *B++ = A[2*i + 1]; 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Workerdefine void @exact0(i32* %A, i32* %B) nounwind uwtable ssp { 13*9880d681SAndroid Build Coastguard Workerentry: 14*9880d681SAndroid Build Coastguard Worker br label %for.body 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 17*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - flow [<=|<]! 18*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 19*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 20*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 21*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %entry, %for.body 24*9880d681SAndroid Build Coastguard Worker %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ] 25*9880d681SAndroid Build Coastguard Worker %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ] 26*9880d681SAndroid Build Coastguard Worker %conv = trunc i64 %i.02 to i32 27*9880d681SAndroid Build Coastguard Worker %add = add i64 %i.02, 10 28*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add 29*9880d681SAndroid Build Coastguard Worker store i32 %conv, i32* %arrayidx, align 4 30*9880d681SAndroid Build Coastguard Worker %mul = shl i64 %i.02, 1 31*9880d681SAndroid Build Coastguard Worker %add13 = or i64 %mul, 1 32*9880d681SAndroid Build Coastguard Worker %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %add13 33*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %arrayidx2, align 4 34*9880d681SAndroid Build Coastguard Worker %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1 35*9880d681SAndroid Build Coastguard Worker store i32 %0, i32* %B.addr.01, align 4 36*9880d681SAndroid Build Coastguard Worker %inc = add i64 %i.02, 1 37*9880d681SAndroid Build Coastguard Worker %exitcond = icmp ne i64 %inc, 10 38*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %for.body, label %for.end 39*9880d681SAndroid Build Coastguard Worker 40*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %for.body 41*9880d681SAndroid Build Coastguard Worker ret void 42*9880d681SAndroid Build Coastguard Worker} 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Worker 45*9880d681SAndroid Build Coastguard Worker;; for (long unsigned i = 0; i < 10; i++) { 46*9880d681SAndroid Build Coastguard Worker;; A[4*i + 10] = i; 47*9880d681SAndroid Build Coastguard Worker;; *B++ = A[2*i + 1]; 48*9880d681SAndroid Build Coastguard Worker 49*9880d681SAndroid Build Coastguard Workerdefine void @exact1(i32* %A, i32* %B) nounwind uwtable ssp { 50*9880d681SAndroid Build Coastguard Workerentry: 51*9880d681SAndroid Build Coastguard Worker br label %for.body 52*9880d681SAndroid Build Coastguard Worker 53*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 54*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 55*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 56*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 57*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 58*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 59*9880d681SAndroid Build Coastguard Worker 60*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %entry, %for.body 61*9880d681SAndroid Build Coastguard Worker %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ] 62*9880d681SAndroid Build Coastguard Worker %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ] 63*9880d681SAndroid Build Coastguard Worker %conv = trunc i64 %i.02 to i32 64*9880d681SAndroid Build Coastguard Worker %mul = shl i64 %i.02, 2 65*9880d681SAndroid Build Coastguard Worker %add = add i64 %mul, 10 66*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add 67*9880d681SAndroid Build Coastguard Worker store i32 %conv, i32* %arrayidx, align 4 68*9880d681SAndroid Build Coastguard Worker %mul1 = shl i64 %i.02, 1 69*9880d681SAndroid Build Coastguard Worker %add23 = or i64 %mul1, 1 70*9880d681SAndroid Build Coastguard Worker %arrayidx3 = getelementptr inbounds i32, i32* %A, i64 %add23 71*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %arrayidx3, align 4 72*9880d681SAndroid Build Coastguard Worker %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1 73*9880d681SAndroid Build Coastguard Worker store i32 %0, i32* %B.addr.01, align 4 74*9880d681SAndroid Build Coastguard Worker %inc = add i64 %i.02, 1 75*9880d681SAndroid Build Coastguard Worker %exitcond = icmp ne i64 %inc, 10 76*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %for.body, label %for.end 77*9880d681SAndroid Build Coastguard Worker 78*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %for.body 79*9880d681SAndroid Build Coastguard Worker ret void 80*9880d681SAndroid Build Coastguard Worker} 81*9880d681SAndroid Build Coastguard Worker 82*9880d681SAndroid Build Coastguard Worker 83*9880d681SAndroid Build Coastguard Worker;; for (long unsigned i = 0; i < 10; i++) { 84*9880d681SAndroid Build Coastguard Worker;; A[6*i] = i; 85*9880d681SAndroid Build Coastguard Worker;; *B++ = A[i + 60]; 86*9880d681SAndroid Build Coastguard Worker 87*9880d681SAndroid Build Coastguard Workerdefine void @exact2(i32* %A, i32* %B) nounwind uwtable ssp { 88*9880d681SAndroid Build Coastguard Workerentry: 89*9880d681SAndroid Build Coastguard Worker br label %for.body 90*9880d681SAndroid Build Coastguard Worker 91*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 92*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 93*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 94*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 95*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 96*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 97*9880d681SAndroid Build Coastguard Worker 98*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %entry, %for.body 99*9880d681SAndroid Build Coastguard Worker %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ] 100*9880d681SAndroid Build Coastguard Worker %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ] 101*9880d681SAndroid Build Coastguard Worker %conv = trunc i64 %i.02 to i32 102*9880d681SAndroid Build Coastguard Worker %mul = mul i64 %i.02, 6 103*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul 104*9880d681SAndroid Build Coastguard Worker store i32 %conv, i32* %arrayidx, align 4 105*9880d681SAndroid Build Coastguard Worker %add = add i64 %i.02, 60 106*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %add 107*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %arrayidx1, align 4 108*9880d681SAndroid Build Coastguard Worker %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1 109*9880d681SAndroid Build Coastguard Worker store i32 %0, i32* %B.addr.01, align 4 110*9880d681SAndroid Build Coastguard Worker %inc = add i64 %i.02, 1 111*9880d681SAndroid Build Coastguard Worker %exitcond = icmp ne i64 %inc, 10 112*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %for.body, label %for.end 113*9880d681SAndroid Build Coastguard Worker 114*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %for.body 115*9880d681SAndroid Build Coastguard Worker ret void 116*9880d681SAndroid Build Coastguard Worker} 117*9880d681SAndroid Build Coastguard Worker 118*9880d681SAndroid Build Coastguard Worker 119*9880d681SAndroid Build Coastguard Worker;; for (long unsigned i = 0; i <= 10; i++) { 120*9880d681SAndroid Build Coastguard Worker;; A[6*i] = i; 121*9880d681SAndroid Build Coastguard Worker;; *B++ = A[i + 60]; 122*9880d681SAndroid Build Coastguard Worker 123*9880d681SAndroid Build Coastguard Workerdefine void @exact3(i32* %A, i32* %B) nounwind uwtable ssp { 124*9880d681SAndroid Build Coastguard Workerentry: 125*9880d681SAndroid Build Coastguard Worker br label %for.body 126*9880d681SAndroid Build Coastguard Worker 127*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 128*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - flow [>]! 129*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 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 134*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %entry, %for.body 135*9880d681SAndroid Build Coastguard Worker %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ] 136*9880d681SAndroid Build Coastguard Worker %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ] 137*9880d681SAndroid Build Coastguard Worker %conv = trunc i64 %i.02 to i32 138*9880d681SAndroid Build Coastguard Worker %mul = mul i64 %i.02, 6 139*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul 140*9880d681SAndroid Build Coastguard Worker store i32 %conv, i32* %arrayidx, align 4 141*9880d681SAndroid Build Coastguard Worker %add = add i64 %i.02, 60 142*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %add 143*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %arrayidx1, align 4 144*9880d681SAndroid Build Coastguard Worker %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1 145*9880d681SAndroid Build Coastguard Worker store i32 %0, i32* %B.addr.01, align 4 146*9880d681SAndroid Build Coastguard Worker %inc = add i64 %i.02, 1 147*9880d681SAndroid Build Coastguard Worker %exitcond = icmp ne i64 %inc, 11 148*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %for.body, label %for.end 149*9880d681SAndroid Build Coastguard Worker 150*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %for.body 151*9880d681SAndroid Build Coastguard Worker ret void 152*9880d681SAndroid Build Coastguard Worker} 153*9880d681SAndroid Build Coastguard Worker 154*9880d681SAndroid Build Coastguard Worker 155*9880d681SAndroid Build Coastguard Worker;; for (long unsigned i = 0; i < 12; i++) { 156*9880d681SAndroid Build Coastguard Worker;; A[6*i] = i; 157*9880d681SAndroid Build Coastguard Worker;; *B++ = A[i + 60]; 158*9880d681SAndroid Build Coastguard Worker 159*9880d681SAndroid Build Coastguard Workerdefine void @exact4(i32* %A, i32* %B) nounwind uwtable ssp { 160*9880d681SAndroid Build Coastguard Workerentry: 161*9880d681SAndroid Build Coastguard Worker br label %for.body 162*9880d681SAndroid Build Coastguard Worker 163*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 164*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - flow [>]! 165*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 166*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 167*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 168*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 169*9880d681SAndroid Build Coastguard Worker 170*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %entry, %for.body 171*9880d681SAndroid Build Coastguard Worker %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ] 172*9880d681SAndroid Build Coastguard Worker %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ] 173*9880d681SAndroid Build Coastguard Worker %conv = trunc i64 %i.02 to i32 174*9880d681SAndroid Build Coastguard Worker %mul = mul i64 %i.02, 6 175*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul 176*9880d681SAndroid Build Coastguard Worker store i32 %conv, i32* %arrayidx, align 4 177*9880d681SAndroid Build Coastguard Worker %add = add i64 %i.02, 60 178*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %add 179*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %arrayidx1, align 4 180*9880d681SAndroid Build Coastguard Worker %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1 181*9880d681SAndroid Build Coastguard Worker store i32 %0, i32* %B.addr.01, align 4 182*9880d681SAndroid Build Coastguard Worker %inc = add i64 %i.02, 1 183*9880d681SAndroid Build Coastguard Worker %exitcond = icmp ne i64 %inc, 12 184*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %for.body, label %for.end 185*9880d681SAndroid Build Coastguard Worker 186*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %for.body 187*9880d681SAndroid Build Coastguard Worker ret void 188*9880d681SAndroid Build Coastguard Worker} 189*9880d681SAndroid Build Coastguard Worker 190*9880d681SAndroid Build Coastguard Worker 191*9880d681SAndroid Build Coastguard Worker;; for (long unsigned i = 0; i <= 12; i++) { 192*9880d681SAndroid Build Coastguard Worker;; A[6*i] = i; 193*9880d681SAndroid Build Coastguard Worker;; *B++ = A[i + 60]; 194*9880d681SAndroid Build Coastguard Worker 195*9880d681SAndroid Build Coastguard Workerdefine void @exact5(i32* %A, i32* %B) nounwind uwtable ssp { 196*9880d681SAndroid Build Coastguard Workerentry: 197*9880d681SAndroid Build Coastguard Worker br label %for.body 198*9880d681SAndroid Build Coastguard Worker 199*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 200*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - flow [=>|<]! 201*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 202*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 203*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 204*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 205*9880d681SAndroid Build Coastguard Worker 206*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %entry, %for.body 207*9880d681SAndroid Build Coastguard Worker %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ] 208*9880d681SAndroid Build Coastguard Worker %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ] 209*9880d681SAndroid Build Coastguard Worker %conv = trunc i64 %i.02 to i32 210*9880d681SAndroid Build Coastguard Worker %mul = mul i64 %i.02, 6 211*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul 212*9880d681SAndroid Build Coastguard Worker store i32 %conv, i32* %arrayidx, align 4 213*9880d681SAndroid Build Coastguard Worker %add = add i64 %i.02, 60 214*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %add 215*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %arrayidx1, align 4 216*9880d681SAndroid Build Coastguard Worker %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1 217*9880d681SAndroid Build Coastguard Worker store i32 %0, i32* %B.addr.01, align 4 218*9880d681SAndroid Build Coastguard Worker %inc = add i64 %i.02, 1 219*9880d681SAndroid Build Coastguard Worker %exitcond = icmp ne i64 %inc, 13 220*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %for.body, label %for.end 221*9880d681SAndroid Build Coastguard Worker 222*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %for.body 223*9880d681SAndroid Build Coastguard Worker ret void 224*9880d681SAndroid Build Coastguard Worker} 225*9880d681SAndroid Build Coastguard Worker 226*9880d681SAndroid Build Coastguard Worker 227*9880d681SAndroid Build Coastguard Worker;; for (long unsigned i = 0; i < 18; i++) { 228*9880d681SAndroid Build Coastguard Worker;; A[6*i] = i; 229*9880d681SAndroid Build Coastguard Worker;; *B++ = A[i + 60]; 230*9880d681SAndroid Build Coastguard Worker 231*9880d681SAndroid Build Coastguard Workerdefine void @exact6(i32* %A, i32* %B) nounwind uwtable ssp { 232*9880d681SAndroid Build Coastguard Workerentry: 233*9880d681SAndroid Build Coastguard Worker br label %for.body 234*9880d681SAndroid Build Coastguard Worker 235*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 236*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - flow [=>|<]! 237*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 238*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 239*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 240*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 241*9880d681SAndroid Build Coastguard Worker 242*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %entry, %for.body 243*9880d681SAndroid Build Coastguard Worker %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ] 244*9880d681SAndroid Build Coastguard Worker %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ] 245*9880d681SAndroid Build Coastguard Worker %conv = trunc i64 %i.02 to i32 246*9880d681SAndroid Build Coastguard Worker %mul = mul i64 %i.02, 6 247*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul 248*9880d681SAndroid Build Coastguard Worker store i32 %conv, i32* %arrayidx, align 4 249*9880d681SAndroid Build Coastguard Worker %add = add i64 %i.02, 60 250*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %add 251*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %arrayidx1, align 4 252*9880d681SAndroid Build Coastguard Worker %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1 253*9880d681SAndroid Build Coastguard Worker store i32 %0, i32* %B.addr.01, align 4 254*9880d681SAndroid Build Coastguard Worker %inc = add i64 %i.02, 1 255*9880d681SAndroid Build Coastguard Worker %exitcond = icmp ne i64 %inc, 18 256*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %for.body, label %for.end 257*9880d681SAndroid Build Coastguard Worker 258*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %for.body 259*9880d681SAndroid Build Coastguard Worker ret void 260*9880d681SAndroid Build Coastguard Worker} 261*9880d681SAndroid Build Coastguard Worker 262*9880d681SAndroid Build Coastguard Worker 263*9880d681SAndroid Build Coastguard Worker;; for (long unsigned i = 0; i <= 18; i++) { 264*9880d681SAndroid Build Coastguard Worker;; A[6*i] = i; 265*9880d681SAndroid Build Coastguard Worker;; *B++ = A[i + 60]; 266*9880d681SAndroid Build Coastguard Worker 267*9880d681SAndroid Build Coastguard Workerdefine void @exact7(i32* %A, i32* %B) nounwind uwtable ssp { 268*9880d681SAndroid Build Coastguard Workerentry: 269*9880d681SAndroid Build Coastguard Worker br label %for.body 270*9880d681SAndroid Build Coastguard Worker 271*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 272*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - flow [*|<]! 273*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 274*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 275*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 276*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 277*9880d681SAndroid Build Coastguard Worker 278*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %entry, %for.body 279*9880d681SAndroid Build Coastguard Worker %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ] 280*9880d681SAndroid Build Coastguard Worker %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ] 281*9880d681SAndroid Build Coastguard Worker %conv = trunc i64 %i.02 to i32 282*9880d681SAndroid Build Coastguard Worker %mul = mul i64 %i.02, 6 283*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul 284*9880d681SAndroid Build Coastguard Worker store i32 %conv, i32* %arrayidx, align 4 285*9880d681SAndroid Build Coastguard Worker %add = add i64 %i.02, 60 286*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %add 287*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %arrayidx1, align 4 288*9880d681SAndroid Build Coastguard Worker %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1 289*9880d681SAndroid Build Coastguard Worker store i32 %0, i32* %B.addr.01, align 4 290*9880d681SAndroid Build Coastguard Worker %inc = add i64 %i.02, 1 291*9880d681SAndroid Build Coastguard Worker %exitcond = icmp ne i64 %inc, 19 292*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %for.body, label %for.end 293*9880d681SAndroid Build Coastguard Worker 294*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %for.body 295*9880d681SAndroid Build Coastguard Worker ret void 296*9880d681SAndroid Build Coastguard Worker} 297*9880d681SAndroid Build Coastguard Worker 298*9880d681SAndroid Build Coastguard Worker 299*9880d681SAndroid Build Coastguard Worker;; for (long unsigned i = 0; i < 10; i++) { 300*9880d681SAndroid Build Coastguard Worker;; A[-6*i] = i; 301*9880d681SAndroid Build Coastguard Worker;; *B++ = A[-i - 60]; 302*9880d681SAndroid Build Coastguard Worker 303*9880d681SAndroid Build Coastguard Workerdefine void @exact8(i32* %A, i32* %B) nounwind uwtable ssp { 304*9880d681SAndroid Build Coastguard Workerentry: 305*9880d681SAndroid Build Coastguard Worker br label %for.body 306*9880d681SAndroid Build Coastguard Worker 307*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 308*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 309*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 310*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 311*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 312*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 313*9880d681SAndroid Build Coastguard Worker 314*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %entry, %for.body 315*9880d681SAndroid Build Coastguard Worker %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ] 316*9880d681SAndroid Build Coastguard Worker %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ] 317*9880d681SAndroid Build Coastguard Worker %conv = trunc i64 %i.02 to i32 318*9880d681SAndroid Build Coastguard Worker %mul = mul i64 %i.02, -6 319*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul 320*9880d681SAndroid Build Coastguard Worker store i32 %conv, i32* %arrayidx, align 4 321*9880d681SAndroid Build Coastguard Worker %sub1 = sub i64 -60, %i.02 322*9880d681SAndroid Build Coastguard Worker %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %sub1 323*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %arrayidx2, align 4 324*9880d681SAndroid Build Coastguard Worker %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1 325*9880d681SAndroid Build Coastguard Worker store i32 %0, i32* %B.addr.01, align 4 326*9880d681SAndroid Build Coastguard Worker %inc = add i64 %i.02, 1 327*9880d681SAndroid Build Coastguard Worker %exitcond = icmp ne i64 %inc, 10 328*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %for.body, label %for.end 329*9880d681SAndroid Build Coastguard Worker 330*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %for.body 331*9880d681SAndroid Build Coastguard Worker ret void 332*9880d681SAndroid Build Coastguard Worker} 333*9880d681SAndroid Build Coastguard Worker 334*9880d681SAndroid Build Coastguard Worker 335*9880d681SAndroid Build Coastguard Worker;; for (long unsigned i = 0; i <= 10; i++) { 336*9880d681SAndroid Build Coastguard Worker;; A[-6*i] = i; 337*9880d681SAndroid Build Coastguard Worker;; *B++ = A[-i - 60]; 338*9880d681SAndroid Build Coastguard Worker 339*9880d681SAndroid Build Coastguard Workerdefine void @exact9(i32* %A, i32* %B) nounwind uwtable ssp { 340*9880d681SAndroid Build Coastguard Workerentry: 341*9880d681SAndroid Build Coastguard Worker br label %for.body 342*9880d681SAndroid Build Coastguard Worker 343*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 344*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - flow [>]! 345*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 346*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 347*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 348*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 349*9880d681SAndroid Build Coastguard Worker 350*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %entry, %for.body 351*9880d681SAndroid Build Coastguard Worker %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ] 352*9880d681SAndroid Build Coastguard Worker %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ] 353*9880d681SAndroid Build Coastguard Worker %conv = trunc i64 %i.02 to i32 354*9880d681SAndroid Build Coastguard Worker %mul = mul i64 %i.02, -6 355*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul 356*9880d681SAndroid Build Coastguard Worker store i32 %conv, i32* %arrayidx, align 4 357*9880d681SAndroid Build Coastguard Worker %sub1 = sub i64 -60, %i.02 358*9880d681SAndroid Build Coastguard Worker %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %sub1 359*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %arrayidx2, align 4 360*9880d681SAndroid Build Coastguard Worker %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1 361*9880d681SAndroid Build Coastguard Worker store i32 %0, i32* %B.addr.01, align 4 362*9880d681SAndroid Build Coastguard Worker %inc = add i64 %i.02, 1 363*9880d681SAndroid Build Coastguard Worker %exitcond = icmp ne i64 %inc, 11 364*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %for.body, label %for.end 365*9880d681SAndroid Build Coastguard Worker 366*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %for.body 367*9880d681SAndroid Build Coastguard Worker ret void 368*9880d681SAndroid Build Coastguard Worker} 369*9880d681SAndroid Build Coastguard Worker 370*9880d681SAndroid Build Coastguard Worker 371*9880d681SAndroid Build Coastguard Worker;; for (long unsigned i = 0; i < 12; i++) { 372*9880d681SAndroid Build Coastguard Worker;; A[-6*i] = i; 373*9880d681SAndroid Build Coastguard Worker;; *B++ = A[-i - 60]; 374*9880d681SAndroid Build Coastguard Worker 375*9880d681SAndroid Build Coastguard Workerdefine void @exact10(i32* %A, i32* %B) nounwind uwtable ssp { 376*9880d681SAndroid Build Coastguard Workerentry: 377*9880d681SAndroid Build Coastguard Worker br label %for.body 378*9880d681SAndroid Build Coastguard Worker 379*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 380*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - flow [>]! 381*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 382*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 383*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 384*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 385*9880d681SAndroid Build Coastguard Worker 386*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %entry, %for.body 387*9880d681SAndroid Build Coastguard Worker %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ] 388*9880d681SAndroid Build Coastguard Worker %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ] 389*9880d681SAndroid Build Coastguard Worker %conv = trunc i64 %i.02 to i32 390*9880d681SAndroid Build Coastguard Worker %mul = mul i64 %i.02, -6 391*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul 392*9880d681SAndroid Build Coastguard Worker store i32 %conv, i32* %arrayidx, align 4 393*9880d681SAndroid Build Coastguard Worker %sub1 = sub i64 -60, %i.02 394*9880d681SAndroid Build Coastguard Worker %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %sub1 395*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %arrayidx2, align 4 396*9880d681SAndroid Build Coastguard Worker %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1 397*9880d681SAndroid Build Coastguard Worker store i32 %0, i32* %B.addr.01, align 4 398*9880d681SAndroid Build Coastguard Worker %inc = add i64 %i.02, 1 399*9880d681SAndroid Build Coastguard Worker %exitcond = icmp ne i64 %inc, 12 400*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %for.body, label %for.end 401*9880d681SAndroid Build Coastguard Worker 402*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %for.body 403*9880d681SAndroid Build Coastguard Worker ret void 404*9880d681SAndroid Build Coastguard Worker} 405*9880d681SAndroid Build Coastguard Worker 406*9880d681SAndroid Build Coastguard Worker 407*9880d681SAndroid Build Coastguard Worker;; for (long unsigned i = 0; i <= 12; i++) { 408*9880d681SAndroid Build Coastguard Worker;; A[-6*i] = i; 409*9880d681SAndroid Build Coastguard Worker;; *B++ = A[-i - 60]; 410*9880d681SAndroid Build Coastguard Worker 411*9880d681SAndroid Build Coastguard Workerdefine void @exact11(i32* %A, i32* %B) nounwind uwtable ssp { 412*9880d681SAndroid Build Coastguard Workerentry: 413*9880d681SAndroid Build Coastguard Worker br label %for.body 414*9880d681SAndroid Build Coastguard Worker 415*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 416*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - flow [=>|<]! 417*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 418*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 419*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 420*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 421*9880d681SAndroid Build Coastguard Worker 422*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %entry, %for.body 423*9880d681SAndroid Build Coastguard Worker %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ] 424*9880d681SAndroid Build Coastguard Worker %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ] 425*9880d681SAndroid Build Coastguard Worker %conv = trunc i64 %i.02 to i32 426*9880d681SAndroid Build Coastguard Worker %mul = mul i64 %i.02, -6 427*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul 428*9880d681SAndroid Build Coastguard Worker store i32 %conv, i32* %arrayidx, align 4 429*9880d681SAndroid Build Coastguard Worker %sub1 = sub i64 -60, %i.02 430*9880d681SAndroid Build Coastguard Worker %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %sub1 431*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %arrayidx2, align 4 432*9880d681SAndroid Build Coastguard Worker %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1 433*9880d681SAndroid Build Coastguard Worker store i32 %0, i32* %B.addr.01, align 4 434*9880d681SAndroid Build Coastguard Worker %inc = add i64 %i.02, 1 435*9880d681SAndroid Build Coastguard Worker %exitcond = icmp ne i64 %inc, 13 436*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %for.body, label %for.end 437*9880d681SAndroid Build Coastguard Worker 438*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %for.body 439*9880d681SAndroid Build Coastguard Worker ret void 440*9880d681SAndroid Build Coastguard Worker} 441*9880d681SAndroid Build Coastguard Worker 442*9880d681SAndroid Build Coastguard Worker 443*9880d681SAndroid Build Coastguard Worker;; for (long unsigned i = 0; i < 18; i++) { 444*9880d681SAndroid Build Coastguard Worker;; A[-6*i] = i; 445*9880d681SAndroid Build Coastguard Worker;; *B++ = A[-i - 60]; 446*9880d681SAndroid Build Coastguard Worker 447*9880d681SAndroid Build Coastguard Workerdefine void @exact12(i32* %A, i32* %B) nounwind uwtable ssp { 448*9880d681SAndroid Build Coastguard Workerentry: 449*9880d681SAndroid Build Coastguard Worker br label %for.body 450*9880d681SAndroid Build Coastguard Worker 451*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 452*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - flow [=>|<]! 453*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 454*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 455*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 456*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 457*9880d681SAndroid Build Coastguard Worker 458*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %entry, %for.body 459*9880d681SAndroid Build Coastguard Worker %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ] 460*9880d681SAndroid Build Coastguard Worker %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ] 461*9880d681SAndroid Build Coastguard Worker %conv = trunc i64 %i.02 to i32 462*9880d681SAndroid Build Coastguard Worker %mul = mul i64 %i.02, -6 463*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul 464*9880d681SAndroid Build Coastguard Worker store i32 %conv, i32* %arrayidx, align 4 465*9880d681SAndroid Build Coastguard Worker %sub1 = sub i64 -60, %i.02 466*9880d681SAndroid Build Coastguard Worker %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %sub1 467*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %arrayidx2, align 4 468*9880d681SAndroid Build Coastguard Worker %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1 469*9880d681SAndroid Build Coastguard Worker store i32 %0, i32* %B.addr.01, align 4 470*9880d681SAndroid Build Coastguard Worker %inc = add i64 %i.02, 1 471*9880d681SAndroid Build Coastguard Worker %exitcond = icmp ne i64 %inc, 18 472*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %for.body, label %for.end 473*9880d681SAndroid Build Coastguard Worker 474*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %for.body 475*9880d681SAndroid Build Coastguard Worker ret void 476*9880d681SAndroid Build Coastguard Worker} 477*9880d681SAndroid Build Coastguard Worker 478*9880d681SAndroid Build Coastguard Worker 479*9880d681SAndroid Build Coastguard Worker;; for (long unsigned i = 0; i <= 18; i++) { 480*9880d681SAndroid Build Coastguard Worker;; A[-6*i] = i; 481*9880d681SAndroid Build Coastguard Worker;; *B++ = A[-i - 60]; 482*9880d681SAndroid Build Coastguard Worker 483*9880d681SAndroid Build Coastguard Workerdefine void @exact13(i32* %A, i32* %B) nounwind uwtable ssp { 484*9880d681SAndroid Build Coastguard Workerentry: 485*9880d681SAndroid Build Coastguard Worker br label %for.body 486*9880d681SAndroid Build Coastguard Worker 487*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 488*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - flow [*|<]! 489*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 490*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 491*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 492*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 493*9880d681SAndroid Build Coastguard Worker 494*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %entry, %for.body 495*9880d681SAndroid Build Coastguard Worker %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ] 496*9880d681SAndroid Build Coastguard Worker %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ] 497*9880d681SAndroid Build Coastguard Worker %conv = trunc i64 %i.02 to i32 498*9880d681SAndroid Build Coastguard Worker %mul = mul i64 %i.02, -6 499*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul 500*9880d681SAndroid Build Coastguard Worker store i32 %conv, i32* %arrayidx, align 4 501*9880d681SAndroid Build Coastguard Worker %sub1 = sub i64 -60, %i.02 502*9880d681SAndroid Build Coastguard Worker %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %sub1 503*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %arrayidx2, align 4 504*9880d681SAndroid Build Coastguard Worker %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1 505*9880d681SAndroid Build Coastguard Worker store i32 %0, i32* %B.addr.01, align 4 506*9880d681SAndroid Build Coastguard Worker %inc = add i64 %i.02, 1 507*9880d681SAndroid Build Coastguard Worker %exitcond = icmp ne i64 %inc, 19 508*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %for.body, label %for.end 509*9880d681SAndroid Build Coastguard Worker 510*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %for.body 511*9880d681SAndroid Build Coastguard Worker ret void 512*9880d681SAndroid Build Coastguard Worker} 513