1*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -analyze -basicaa -da | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker; ModuleID = 'StrongSIV.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 (int i = 0; i < n; i++) { 9*9880d681SAndroid Build Coastguard Worker;; A[i + 2] = i; 10*9880d681SAndroid Build Coastguard Worker;; *B++ = A[i]; 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Workerdefine void @strong0(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp { 13*9880d681SAndroid Build Coastguard Workerentry: 14*9880d681SAndroid Build Coastguard Worker %cmp1 = icmp sgt i64 %n, 0 15*9880d681SAndroid Build Coastguard Worker br i1 %cmp1, label %for.body.preheader, label %for.end 16*9880d681SAndroid Build Coastguard Worker 17*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 18*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - consistent flow [2]! 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.body.preheader: ; preds = %entry 25*9880d681SAndroid Build Coastguard Worker br label %for.body 26*9880d681SAndroid Build Coastguard Worker 27*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %for.body.preheader, %for.body 28*9880d681SAndroid Build Coastguard Worker %indvars.iv = phi i64 [ 0, %for.body.preheader ], [ %indvars.iv.next, %for.body ] 29*9880d681SAndroid Build Coastguard Worker %B.addr.02 = phi i32* [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ] 30*9880d681SAndroid Build Coastguard Worker %0 = add nsw i64 %indvars.iv, 2 31*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i32, i32* %A, i64 %0 32*9880d681SAndroid Build Coastguard Worker %1 = trunc i64 %indvars.iv to i32 33*9880d681SAndroid Build Coastguard Worker store i32 %1, i32* %arrayidx, align 4 34*9880d681SAndroid Build Coastguard Worker %arrayidx3 = getelementptr inbounds i32, i32* %A, i64 %indvars.iv 35*9880d681SAndroid Build Coastguard Worker %2 = load i32, i32* %arrayidx3, align 4 36*9880d681SAndroid Build Coastguard Worker %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1 37*9880d681SAndroid Build Coastguard Worker store i32 %2, i32* %B.addr.02, align 4 38*9880d681SAndroid Build Coastguard Worker %indvars.iv.next = add i64 %indvars.iv, 1 39*9880d681SAndroid Build Coastguard Worker %exitcond = icmp ne i64 %indvars.iv.next, %n 40*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %for.body, label %for.end.loopexit 41*9880d681SAndroid Build Coastguard Worker 42*9880d681SAndroid Build Coastguard Workerfor.end.loopexit: ; preds = %for.body 43*9880d681SAndroid Build Coastguard Worker br label %for.end 44*9880d681SAndroid Build Coastguard Worker 45*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %for.end.loopexit, %entry 46*9880d681SAndroid Build Coastguard Worker ret void 47*9880d681SAndroid Build Coastguard Worker} 48*9880d681SAndroid Build Coastguard Worker 49*9880d681SAndroid Build Coastguard Worker 50*9880d681SAndroid Build Coastguard Worker;; for (long int i = 0; i < n; i++) { 51*9880d681SAndroid Build Coastguard Worker;; A[i + 2] = i; 52*9880d681SAndroid Build Coastguard Worker;; *B++ = A[i]; 53*9880d681SAndroid Build Coastguard Worker 54*9880d681SAndroid Build Coastguard Workerdefine void @strong1(i32* %A, i32* %B, i32 %n) nounwind uwtable ssp { 55*9880d681SAndroid Build Coastguard Workerentry: 56*9880d681SAndroid Build Coastguard Worker %cmp1 = icmp sgt i32 %n, 0 57*9880d681SAndroid Build Coastguard Worker br i1 %cmp1, label %for.body.preheader, label %for.end 58*9880d681SAndroid Build Coastguard Worker 59*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 60*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - consistent flow [2]! 61*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 62*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 63*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 64*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 65*9880d681SAndroid Build Coastguard Worker 66*9880d681SAndroid Build Coastguard Workerfor.body.preheader: ; preds = %entry 67*9880d681SAndroid Build Coastguard Worker %0 = sext i32 %n to i64 68*9880d681SAndroid Build Coastguard Worker br label %for.body 69*9880d681SAndroid Build Coastguard Worker 70*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %for.body.preheader, %for.body 71*9880d681SAndroid Build Coastguard Worker %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ] 72*9880d681SAndroid Build Coastguard Worker %B.addr.02 = phi i32* [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ] 73*9880d681SAndroid Build Coastguard Worker %conv2 = trunc i64 %i.03 to i32 74*9880d681SAndroid Build Coastguard Worker %add = add nsw i64 %i.03, 2 75*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add 76*9880d681SAndroid Build Coastguard Worker store i32 %conv2, i32* %arrayidx, align 4 77*9880d681SAndroid Build Coastguard Worker %arrayidx3 = getelementptr inbounds i32, i32* %A, i64 %i.03 78*9880d681SAndroid Build Coastguard Worker %1 = load i32, i32* %arrayidx3, align 4 79*9880d681SAndroid Build Coastguard Worker %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1 80*9880d681SAndroid Build Coastguard Worker store i32 %1, i32* %B.addr.02, align 4 81*9880d681SAndroid Build Coastguard Worker %inc = add nsw i64 %i.03, 1 82*9880d681SAndroid Build Coastguard Worker %exitcond = icmp ne i64 %inc, %0 83*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %for.body, label %for.end.loopexit 84*9880d681SAndroid Build Coastguard Worker 85*9880d681SAndroid Build Coastguard Workerfor.end.loopexit: ; preds = %for.body 86*9880d681SAndroid Build Coastguard Worker br label %for.end 87*9880d681SAndroid Build Coastguard Worker 88*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %for.end.loopexit, %entry 89*9880d681SAndroid Build Coastguard Worker ret void 90*9880d681SAndroid Build Coastguard Worker} 91*9880d681SAndroid Build Coastguard Worker 92*9880d681SAndroid Build Coastguard Worker 93*9880d681SAndroid Build Coastguard Worker;; for (long unsigned i = 0; i < n; i++) { 94*9880d681SAndroid Build Coastguard Worker;; A[i + 2] = i; 95*9880d681SAndroid Build Coastguard Worker;; *B++ = A[i]; 96*9880d681SAndroid Build Coastguard Worker 97*9880d681SAndroid Build Coastguard Workerdefine void @strong2(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp { 98*9880d681SAndroid Build Coastguard Workerentry: 99*9880d681SAndroid Build Coastguard Worker %cmp1 = icmp eq i64 %n, 0 100*9880d681SAndroid Build Coastguard Worker br i1 %cmp1, label %for.end, label %for.body.preheader 101*9880d681SAndroid Build Coastguard Worker 102*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 103*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - consistent flow [2]! 104*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 105*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 106*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 107*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 108*9880d681SAndroid Build Coastguard Worker 109*9880d681SAndroid Build Coastguard Workerfor.body.preheader: ; preds = %entry 110*9880d681SAndroid Build Coastguard Worker br label %for.body 111*9880d681SAndroid Build Coastguard Worker 112*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %for.body.preheader, %for.body 113*9880d681SAndroid Build Coastguard Worker %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ] 114*9880d681SAndroid Build Coastguard Worker %B.addr.02 = phi i32* [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ] 115*9880d681SAndroid Build Coastguard Worker %conv = trunc i64 %i.03 to i32 116*9880d681SAndroid Build Coastguard Worker %add = add i64 %i.03, 2 117*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add 118*9880d681SAndroid Build Coastguard Worker store i32 %conv, i32* %arrayidx, align 4 119*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %i.03 120*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %arrayidx1, align 4 121*9880d681SAndroid Build Coastguard Worker %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1 122*9880d681SAndroid Build Coastguard Worker store i32 %0, i32* %B.addr.02, align 4 123*9880d681SAndroid Build Coastguard Worker %inc = add i64 %i.03, 1 124*9880d681SAndroid Build Coastguard Worker %exitcond = icmp ne i64 %inc, %n 125*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %for.body, label %for.end.loopexit 126*9880d681SAndroid Build Coastguard Worker 127*9880d681SAndroid Build Coastguard Workerfor.end.loopexit: ; preds = %for.body 128*9880d681SAndroid Build Coastguard Worker br label %for.end 129*9880d681SAndroid Build Coastguard Worker 130*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %for.end.loopexit, %entry 131*9880d681SAndroid Build Coastguard Worker ret void 132*9880d681SAndroid Build Coastguard Worker} 133*9880d681SAndroid Build Coastguard Worker 134*9880d681SAndroid Build Coastguard Worker 135*9880d681SAndroid Build Coastguard Worker;; for (int i = 0; i < n; i++) { 136*9880d681SAndroid Build Coastguard Worker;; A[i + 2] = i; 137*9880d681SAndroid Build Coastguard Worker;; *B++ = A[i]; 138*9880d681SAndroid Build Coastguard Worker 139*9880d681SAndroid Build Coastguard Workerdefine void @strong3(i32* %A, i32* %B, i32 %n) nounwind uwtable ssp { 140*9880d681SAndroid Build Coastguard Workerentry: 141*9880d681SAndroid Build Coastguard Worker %cmp1 = icmp sgt i32 %n, 0 142*9880d681SAndroid Build Coastguard Worker br i1 %cmp1, label %for.body.preheader, label %for.end 143*9880d681SAndroid Build Coastguard Worker 144*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 145*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - consistent flow [2]! 146*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 147*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 148*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 149*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 150*9880d681SAndroid Build Coastguard Worker 151*9880d681SAndroid Build Coastguard Workerfor.body.preheader: ; preds = %entry 152*9880d681SAndroid Build Coastguard Worker br label %for.body 153*9880d681SAndroid Build Coastguard Worker 154*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %for.body.preheader, %for.body 155*9880d681SAndroid Build Coastguard Worker %indvars.iv = phi i64 [ 0, %for.body.preheader ], [ %indvars.iv.next, %for.body ] 156*9880d681SAndroid Build Coastguard Worker %B.addr.02 = phi i32* [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ] 157*9880d681SAndroid Build Coastguard Worker %0 = add nsw i64 %indvars.iv, 2 158*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i32, i32* %A, i64 %0 159*9880d681SAndroid Build Coastguard Worker %1 = trunc i64 %indvars.iv to i32 160*9880d681SAndroid Build Coastguard Worker store i32 %1, i32* %arrayidx, align 4 161*9880d681SAndroid Build Coastguard Worker %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %indvars.iv 162*9880d681SAndroid Build Coastguard Worker %2 = load i32, i32* %arrayidx2, align 4 163*9880d681SAndroid Build Coastguard Worker %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1 164*9880d681SAndroid Build Coastguard Worker store i32 %2, i32* %B.addr.02, align 4 165*9880d681SAndroid Build Coastguard Worker %indvars.iv.next = add i64 %indvars.iv, 1 166*9880d681SAndroid Build Coastguard Worker %lftr.wideiv = trunc i64 %indvars.iv.next to i32 167*9880d681SAndroid Build Coastguard Worker %exitcond = icmp ne i32 %lftr.wideiv, %n 168*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %for.body, label %for.end.loopexit 169*9880d681SAndroid Build Coastguard Worker 170*9880d681SAndroid Build Coastguard Workerfor.end.loopexit: ; preds = %for.body 171*9880d681SAndroid Build Coastguard Worker br label %for.end 172*9880d681SAndroid Build Coastguard Worker 173*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %for.end.loopexit, %entry 174*9880d681SAndroid Build Coastguard Worker ret void 175*9880d681SAndroid Build Coastguard Worker} 176*9880d681SAndroid Build Coastguard Worker 177*9880d681SAndroid Build Coastguard Worker 178*9880d681SAndroid Build Coastguard Worker;; for (long unsigned i = 0; i < 19; i++) { 179*9880d681SAndroid Build Coastguard Worker;; A[i + 19] = i; 180*9880d681SAndroid Build Coastguard Worker;; *B++ = A[i]; 181*9880d681SAndroid Build Coastguard Worker 182*9880d681SAndroid Build Coastguard Workerdefine void @strong4(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp { 183*9880d681SAndroid Build Coastguard Workerentry: 184*9880d681SAndroid Build Coastguard Worker br label %for.body 185*9880d681SAndroid Build Coastguard Worker 186*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 187*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 188*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 189*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 190*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 191*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 192*9880d681SAndroid Build Coastguard Worker 193*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %entry, %for.body 194*9880d681SAndroid Build Coastguard Worker %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ] 195*9880d681SAndroid Build Coastguard Worker %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ] 196*9880d681SAndroid Build Coastguard Worker %conv = trunc i64 %i.02 to i32 197*9880d681SAndroid Build Coastguard Worker %add = add i64 %i.02, 19 198*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add 199*9880d681SAndroid Build Coastguard Worker store i32 %conv, i32* %arrayidx, align 4 200*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %i.02 201*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %arrayidx1, align 4 202*9880d681SAndroid Build Coastguard Worker %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1 203*9880d681SAndroid Build Coastguard Worker store i32 %0, i32* %B.addr.01, align 4 204*9880d681SAndroid Build Coastguard Worker %inc = add i64 %i.02, 1 205*9880d681SAndroid Build Coastguard Worker %exitcond = icmp ne i64 %inc, 19 206*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %for.body, label %for.end 207*9880d681SAndroid Build Coastguard Worker 208*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %for.body 209*9880d681SAndroid Build Coastguard Worker ret void 210*9880d681SAndroid Build Coastguard Worker} 211*9880d681SAndroid Build Coastguard Worker 212*9880d681SAndroid Build Coastguard Worker 213*9880d681SAndroid Build Coastguard Worker;; for (long unsigned i = 0; i < 20; i++) { 214*9880d681SAndroid Build Coastguard Worker;; A[i + 19] = i; 215*9880d681SAndroid Build Coastguard Worker;; *B++ = A[i]; 216*9880d681SAndroid Build Coastguard Worker 217*9880d681SAndroid Build Coastguard Workerdefine void @strong5(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp { 218*9880d681SAndroid Build Coastguard Workerentry: 219*9880d681SAndroid Build Coastguard Worker br label %for.body 220*9880d681SAndroid Build Coastguard Worker 221*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 222*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - consistent flow [19]! 223*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 224*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 225*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 226*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 227*9880d681SAndroid Build Coastguard Worker 228*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %entry, %for.body 229*9880d681SAndroid Build Coastguard Worker %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ] 230*9880d681SAndroid Build Coastguard Worker %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ] 231*9880d681SAndroid Build Coastguard Worker %conv = trunc i64 %i.02 to i32 232*9880d681SAndroid Build Coastguard Worker %add = add i64 %i.02, 19 233*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add 234*9880d681SAndroid Build Coastguard Worker store i32 %conv, i32* %arrayidx, align 4 235*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %i.02 236*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %arrayidx1, align 4 237*9880d681SAndroid Build Coastguard Worker %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1 238*9880d681SAndroid Build Coastguard Worker store i32 %0, i32* %B.addr.01, align 4 239*9880d681SAndroid Build Coastguard Worker %inc = add i64 %i.02, 1 240*9880d681SAndroid Build Coastguard Worker %exitcond = icmp ne i64 %inc, 20 241*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %for.body, label %for.end 242*9880d681SAndroid Build Coastguard Worker 243*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %for.body 244*9880d681SAndroid Build Coastguard Worker ret void 245*9880d681SAndroid Build Coastguard Worker} 246*9880d681SAndroid Build Coastguard Worker 247*9880d681SAndroid Build Coastguard Worker 248*9880d681SAndroid Build Coastguard Worker;; for (long unsigned i = 0; i < 20; i++) { 249*9880d681SAndroid Build Coastguard Worker;; A[2*i + 6] = i; 250*9880d681SAndroid Build Coastguard Worker;; *B++ = A[2*i]; 251*9880d681SAndroid Build Coastguard Worker 252*9880d681SAndroid Build Coastguard Workerdefine void @strong6(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp { 253*9880d681SAndroid Build Coastguard Workerentry: 254*9880d681SAndroid Build Coastguard Worker br label %for.body 255*9880d681SAndroid Build Coastguard Worker 256*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 257*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - consistent flow [3]! 258*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 259*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 260*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 261*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 262*9880d681SAndroid Build Coastguard Worker 263*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %entry, %for.body 264*9880d681SAndroid Build Coastguard Worker %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ] 265*9880d681SAndroid Build Coastguard Worker %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ] 266*9880d681SAndroid Build Coastguard Worker %conv = trunc i64 %i.02 to i32 267*9880d681SAndroid Build Coastguard Worker %mul = shl i64 %i.02, 1 268*9880d681SAndroid Build Coastguard Worker %add = add i64 %mul, 6 269*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add 270*9880d681SAndroid Build Coastguard Worker store i32 %conv, i32* %arrayidx, align 4 271*9880d681SAndroid Build Coastguard Worker %mul1 = shl i64 %i.02, 1 272*9880d681SAndroid Build Coastguard Worker %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %mul1 273*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %arrayidx2, align 4 274*9880d681SAndroid Build Coastguard Worker %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1 275*9880d681SAndroid Build Coastguard Worker store i32 %0, i32* %B.addr.01, align 4 276*9880d681SAndroid Build Coastguard Worker %inc = add i64 %i.02, 1 277*9880d681SAndroid Build Coastguard Worker %exitcond = icmp ne i64 %inc, 20 278*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %for.body, label %for.end 279*9880d681SAndroid Build Coastguard Worker 280*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %for.body 281*9880d681SAndroid Build Coastguard Worker ret void 282*9880d681SAndroid Build Coastguard Worker} 283*9880d681SAndroid Build Coastguard Worker 284*9880d681SAndroid Build Coastguard Worker 285*9880d681SAndroid Build Coastguard Worker;; for (long unsigned i = 0; i < 20; i++) { 286*9880d681SAndroid Build Coastguard Worker;; A[2*i + 7] = i; 287*9880d681SAndroid Build Coastguard Worker;; *B++ = A[2*i]; 288*9880d681SAndroid Build Coastguard Worker 289*9880d681SAndroid Build Coastguard Workerdefine void @strong7(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp { 290*9880d681SAndroid Build Coastguard Workerentry: 291*9880d681SAndroid Build Coastguard Worker br label %for.body 292*9880d681SAndroid Build Coastguard Worker 293*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 294*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 295*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 296*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 297*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 298*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 299*9880d681SAndroid Build Coastguard Worker 300*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %entry, %for.body 301*9880d681SAndroid Build Coastguard Worker %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ] 302*9880d681SAndroid Build Coastguard Worker %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ] 303*9880d681SAndroid Build Coastguard Worker %conv = trunc i64 %i.02 to i32 304*9880d681SAndroid Build Coastguard Worker %mul = shl i64 %i.02, 1 305*9880d681SAndroid Build Coastguard Worker %add = add i64 %mul, 7 306*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add 307*9880d681SAndroid Build Coastguard Worker store i32 %conv, i32* %arrayidx, align 4 308*9880d681SAndroid Build Coastguard Worker %mul1 = shl i64 %i.02, 1 309*9880d681SAndroid Build Coastguard Worker %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %mul1 310*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %arrayidx2, align 4 311*9880d681SAndroid Build Coastguard Worker %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1 312*9880d681SAndroid Build Coastguard Worker store i32 %0, i32* %B.addr.01, align 4 313*9880d681SAndroid Build Coastguard Worker %inc = add i64 %i.02, 1 314*9880d681SAndroid Build Coastguard Worker %exitcond = icmp ne i64 %inc, 20 315*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %for.body, label %for.end 316*9880d681SAndroid Build Coastguard Worker 317*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %for.body 318*9880d681SAndroid Build Coastguard Worker ret void 319*9880d681SAndroid Build Coastguard Worker} 320*9880d681SAndroid Build Coastguard Worker 321*9880d681SAndroid Build Coastguard Worker 322*9880d681SAndroid Build Coastguard Worker;; for (long unsigned i = 0; i < 20; i++) { 323*9880d681SAndroid Build Coastguard Worker;; A[i + n] = i; 324*9880d681SAndroid Build Coastguard Worker;; *B++ = A[i]; 325*9880d681SAndroid Build Coastguard Worker 326*9880d681SAndroid Build Coastguard Workerdefine void @strong8(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp { 327*9880d681SAndroid Build Coastguard Workerentry: 328*9880d681SAndroid Build Coastguard Worker br label %for.body 329*9880d681SAndroid Build Coastguard Worker 330*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 331*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - consistent flow [%n|<]! 332*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 333*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 334*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 335*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 336*9880d681SAndroid Build Coastguard Worker 337*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %entry, %for.body 338*9880d681SAndroid Build Coastguard Worker %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ] 339*9880d681SAndroid Build Coastguard Worker %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ] 340*9880d681SAndroid Build Coastguard Worker %conv = trunc i64 %i.02 to i32 341*9880d681SAndroid Build Coastguard Worker %add = add i64 %i.02, %n 342*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add 343*9880d681SAndroid Build Coastguard Worker store i32 %conv, i32* %arrayidx, align 4 344*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %i.02 345*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %arrayidx1, align 4 346*9880d681SAndroid Build Coastguard Worker %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1 347*9880d681SAndroid Build Coastguard Worker store i32 %0, i32* %B.addr.01, align 4 348*9880d681SAndroid Build Coastguard Worker %inc = add i64 %i.02, 1 349*9880d681SAndroid Build Coastguard Worker %exitcond = icmp ne i64 %inc, 20 350*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %for.body, label %for.end 351*9880d681SAndroid Build Coastguard Worker 352*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %for.body 353*9880d681SAndroid Build Coastguard Worker ret void 354*9880d681SAndroid Build Coastguard Worker} 355*9880d681SAndroid Build Coastguard Worker 356*9880d681SAndroid Build Coastguard Worker 357*9880d681SAndroid Build Coastguard Worker;; for (long unsigned i = 0; i < n; i++) { 358*9880d681SAndroid Build Coastguard Worker;; A[i + n] = i; 359*9880d681SAndroid Build Coastguard Worker;; *B++ = A[i + 2*n]; 360*9880d681SAndroid Build Coastguard Worker 361*9880d681SAndroid Build Coastguard Workerdefine void @strong9(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp { 362*9880d681SAndroid Build Coastguard Workerentry: 363*9880d681SAndroid Build Coastguard Worker %cmp1 = icmp eq i64 %n, 0 364*9880d681SAndroid Build Coastguard Worker br i1 %cmp1, label %for.end, label %for.body.preheader 365*9880d681SAndroid Build Coastguard Worker 366*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 367*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 368*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 369*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 370*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 371*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 372*9880d681SAndroid Build Coastguard Worker 373*9880d681SAndroid Build Coastguard Workerfor.body.preheader: ; preds = %entry 374*9880d681SAndroid Build Coastguard Worker br label %for.body 375*9880d681SAndroid Build Coastguard Worker 376*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %for.body.preheader, %for.body 377*9880d681SAndroid Build Coastguard Worker %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ] 378*9880d681SAndroid Build Coastguard Worker %B.addr.02 = phi i32* [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ] 379*9880d681SAndroid Build Coastguard Worker %conv = trunc i64 %i.03 to i32 380*9880d681SAndroid Build Coastguard Worker %add = add i64 %i.03, %n 381*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add 382*9880d681SAndroid Build Coastguard Worker store i32 %conv, i32* %arrayidx, align 4 383*9880d681SAndroid Build Coastguard Worker %mul = shl i64 %n, 1 384*9880d681SAndroid Build Coastguard Worker %add1 = add i64 %i.03, %mul 385*9880d681SAndroid Build Coastguard Worker %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %add1 386*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %arrayidx2, align 4 387*9880d681SAndroid Build Coastguard Worker %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1 388*9880d681SAndroid Build Coastguard Worker store i32 %0, i32* %B.addr.02, align 4 389*9880d681SAndroid Build Coastguard Worker %inc = add i64 %i.03, 1 390*9880d681SAndroid Build Coastguard Worker %exitcond = icmp ne i64 %inc, %n 391*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %for.body, label %for.end.loopexit 392*9880d681SAndroid Build Coastguard Worker 393*9880d681SAndroid Build Coastguard Workerfor.end.loopexit: ; preds = %for.body 394*9880d681SAndroid Build Coastguard Worker br label %for.end 395*9880d681SAndroid Build Coastguard Worker 396*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %for.end.loopexit, %entry 397*9880d681SAndroid Build Coastguard Worker ret void 398*9880d681SAndroid Build Coastguard Worker} 399*9880d681SAndroid Build Coastguard Worker 400*9880d681SAndroid Build Coastguard Worker 401*9880d681SAndroid Build Coastguard Worker;; for (long unsigned i = 0; i < 1000; i++) { 402*9880d681SAndroid Build Coastguard Worker;; A[n*i + 5] = i; 403*9880d681SAndroid Build Coastguard Worker;; *B++ = A[n*i + 5]; 404*9880d681SAndroid Build Coastguard Worker 405*9880d681SAndroid Build Coastguard Workerdefine void @strong10(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp { 406*9880d681SAndroid Build Coastguard Workerentry: 407*9880d681SAndroid Build Coastguard Worker br label %for.body 408*9880d681SAndroid Build Coastguard Worker 409*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 410*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - consistent flow [0|<]! 411*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 412*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 413*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused! 414*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none! 415*9880d681SAndroid Build Coastguard Worker 416*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %entry, %for.body 417*9880d681SAndroid Build Coastguard Worker %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ] 418*9880d681SAndroid Build Coastguard Worker %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ] 419*9880d681SAndroid Build Coastguard Worker %conv = trunc i64 %i.02 to i32 420*9880d681SAndroid Build Coastguard Worker %mul = mul i64 %i.02, %n 421*9880d681SAndroid Build Coastguard Worker %add = add i64 %mul, 5 422*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add 423*9880d681SAndroid Build Coastguard Worker store i32 %conv, i32* %arrayidx, align 4 424*9880d681SAndroid Build Coastguard Worker %mul1 = mul i64 %i.02, %n 425*9880d681SAndroid Build Coastguard Worker %add2 = add i64 %mul1, 5 426*9880d681SAndroid Build Coastguard Worker %arrayidx3 = getelementptr inbounds i32, i32* %A, i64 %add2 427*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %arrayidx3, align 4 428*9880d681SAndroid Build Coastguard Worker %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1 429*9880d681SAndroid Build Coastguard Worker store i32 %0, i32* %B.addr.01, align 4 430*9880d681SAndroid Build Coastguard Worker %inc = add i64 %i.02, 1 431*9880d681SAndroid Build Coastguard Worker %exitcond = icmp ne i64 %inc, 1000 432*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %for.body, label %for.end 433*9880d681SAndroid Build Coastguard Worker 434*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %for.body 435*9880d681SAndroid Build Coastguard Worker ret void 436*9880d681SAndroid Build Coastguard Worker} 437