1*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -indvars -S | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker; RUN: opt -lcssa -loop-simplify -S < %s | opt -S -passes='require<targetir>,require<scalar-evolution>,require<domtree>,loop(indvars)' 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker;; --- signed --- 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Workerdefine void @min.signed.1(i32* %a, i32 %a_len, i32 %n) { 7*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @min.signed.1 8*9880d681SAndroid Build Coastguard Worker entry: 9*9880d681SAndroid Build Coastguard Worker %smin.cmp = icmp slt i32 %a_len, %n 10*9880d681SAndroid Build Coastguard Worker %smin = select i1 %smin.cmp, i32 %a_len, i32 %n 11*9880d681SAndroid Build Coastguard Worker %entry.cond = icmp slt i32 0, %smin 12*9880d681SAndroid Build Coastguard Worker br i1 %entry.cond, label %loop, label %exit 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Worker loop: 15*9880d681SAndroid Build Coastguard Worker %idx = phi i32 [ 0, %entry ], [ %idx.inc, %latch ] 16*9880d681SAndroid Build Coastguard Worker %idx.inc = add i32 %idx, 1 17*9880d681SAndroid Build Coastguard Worker %in.bounds = icmp slt i32 %idx, %a_len 18*9880d681SAndroid Build Coastguard Worker br i1 %in.bounds, label %ok, label %latch 19*9880d681SAndroid Build Coastguard Worker; CHECK: br i1 true, label %ok, label %latch 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Worker ok: 22*9880d681SAndroid Build Coastguard Worker %addr = getelementptr i32, i32* %a, i32 %idx 23*9880d681SAndroid Build Coastguard Worker store i32 %idx, i32* %addr 24*9880d681SAndroid Build Coastguard Worker br label %latch 25*9880d681SAndroid Build Coastguard Worker 26*9880d681SAndroid Build Coastguard Worker latch: 27*9880d681SAndroid Build Coastguard Worker %be.cond = icmp slt i32 %idx.inc, %smin 28*9880d681SAndroid Build Coastguard Worker br i1 %be.cond, label %loop, label %exit 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Worker exit: 31*9880d681SAndroid Build Coastguard Worker ret void 32*9880d681SAndroid Build Coastguard Worker} 33*9880d681SAndroid Build Coastguard Worker 34*9880d681SAndroid Build Coastguard Workerdefine void @min.signed.2(i32* %a, i32 %a_len, i32 %n) { 35*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @min.signed.2 36*9880d681SAndroid Build Coastguard Worker entry: 37*9880d681SAndroid Build Coastguard Worker %smin.cmp = icmp slt i32 %a_len, %n 38*9880d681SAndroid Build Coastguard Worker %smin = select i1 %smin.cmp, i32 %a_len, i32 %n 39*9880d681SAndroid Build Coastguard Worker %entry.cond = icmp slt i32 0, %smin 40*9880d681SAndroid Build Coastguard Worker br i1 %entry.cond, label %loop, label %exit 41*9880d681SAndroid Build Coastguard Worker 42*9880d681SAndroid Build Coastguard Worker loop: 43*9880d681SAndroid Build Coastguard Worker %idx = phi i32 [ 0, %entry ], [ %idx.inc, %latch ] 44*9880d681SAndroid Build Coastguard Worker %idx.inc = add i32 %idx, 1 45*9880d681SAndroid Build Coastguard Worker %in.bounds = icmp sgt i32 %a_len, %idx 46*9880d681SAndroid Build Coastguard Worker br i1 %in.bounds, label %ok, label %latch 47*9880d681SAndroid Build Coastguard Worker; CHECK: br i1 true, label %ok, label %latch 48*9880d681SAndroid Build Coastguard Worker 49*9880d681SAndroid Build Coastguard Worker ok: 50*9880d681SAndroid Build Coastguard Worker %addr = getelementptr i32, i32* %a, i32 %idx 51*9880d681SAndroid Build Coastguard Worker store i32 %idx, i32* %addr 52*9880d681SAndroid Build Coastguard Worker br label %latch 53*9880d681SAndroid Build Coastguard Worker 54*9880d681SAndroid Build Coastguard Worker latch: 55*9880d681SAndroid Build Coastguard Worker %be.cond = icmp slt i32 %idx.inc, %smin 56*9880d681SAndroid Build Coastguard Worker br i1 %be.cond, label %loop, label %exit 57*9880d681SAndroid Build Coastguard Worker 58*9880d681SAndroid Build Coastguard Worker exit: 59*9880d681SAndroid Build Coastguard Worker ret void 60*9880d681SAndroid Build Coastguard Worker} 61*9880d681SAndroid Build Coastguard Worker 62*9880d681SAndroid Build Coastguard Workerdefine void @min.signed.3(i32* %a, i32 %n) { 63*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @min.signed.3 64*9880d681SAndroid Build Coastguard Worker entry: 65*9880d681SAndroid Build Coastguard Worker %smin.cmp = icmp slt i32 42, %n 66*9880d681SAndroid Build Coastguard Worker %smin = select i1 %smin.cmp, i32 42, i32 %n 67*9880d681SAndroid Build Coastguard Worker %entry.cond = icmp slt i32 0, %smin 68*9880d681SAndroid Build Coastguard Worker br i1 %entry.cond, label %loop, label %exit 69*9880d681SAndroid Build Coastguard Worker 70*9880d681SAndroid Build Coastguard Worker loop: 71*9880d681SAndroid Build Coastguard Worker %idx = phi i32 [ 0, %entry ], [ %idx.inc, %latch ] 72*9880d681SAndroid Build Coastguard Worker %idx.inc = add i32 %idx, 1 73*9880d681SAndroid Build Coastguard Worker %in.bounds = icmp slt i32 %idx, 42 74*9880d681SAndroid Build Coastguard Worker br i1 %in.bounds, label %ok, label %latch 75*9880d681SAndroid Build Coastguard Worker; CHECK: br i1 true, label %ok, label %latch 76*9880d681SAndroid Build Coastguard Worker 77*9880d681SAndroid Build Coastguard Worker ok: 78*9880d681SAndroid Build Coastguard Worker %addr = getelementptr i32, i32* %a, i32 %idx 79*9880d681SAndroid Build Coastguard Worker store i32 %idx, i32* %addr 80*9880d681SAndroid Build Coastguard Worker br label %latch 81*9880d681SAndroid Build Coastguard Worker 82*9880d681SAndroid Build Coastguard Worker latch: 83*9880d681SAndroid Build Coastguard Worker %be.cond = icmp slt i32 %idx.inc, %smin 84*9880d681SAndroid Build Coastguard Worker br i1 %be.cond, label %loop, label %exit 85*9880d681SAndroid Build Coastguard Worker 86*9880d681SAndroid Build Coastguard Worker exit: 87*9880d681SAndroid Build Coastguard Worker ret void 88*9880d681SAndroid Build Coastguard Worker} 89*9880d681SAndroid Build Coastguard Worker 90*9880d681SAndroid Build Coastguard Workerdefine void @min.signed.4(i32* %a, i32 %n) { 91*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @min.signed.4 92*9880d681SAndroid Build Coastguard Worker entry: 93*9880d681SAndroid Build Coastguard Worker %smin.cmp = icmp slt i32 42, %n 94*9880d681SAndroid Build Coastguard Worker %smin = select i1 %smin.cmp, i32 42, i32 %n 95*9880d681SAndroid Build Coastguard Worker %entry.cond = icmp slt i32 0, %smin 96*9880d681SAndroid Build Coastguard Worker br i1 %entry.cond, label %loop, label %exit 97*9880d681SAndroid Build Coastguard Worker 98*9880d681SAndroid Build Coastguard Worker loop: 99*9880d681SAndroid Build Coastguard Worker %idx = phi i32 [ 0, %entry ], [ %idx.inc, %latch ] 100*9880d681SAndroid Build Coastguard Worker %idx.inc = add i32 %idx, 1 101*9880d681SAndroid Build Coastguard Worker %in.bounds = icmp sgt i32 42, %idx 102*9880d681SAndroid Build Coastguard Worker br i1 %in.bounds, label %ok, label %latch 103*9880d681SAndroid Build Coastguard Worker; CHECK: br i1 true, label %ok, label %latch 104*9880d681SAndroid Build Coastguard Worker 105*9880d681SAndroid Build Coastguard Worker ok: 106*9880d681SAndroid Build Coastguard Worker %addr = getelementptr i32, i32* %a, i32 %idx 107*9880d681SAndroid Build Coastguard Worker store i32 %idx, i32* %addr 108*9880d681SAndroid Build Coastguard Worker br label %latch 109*9880d681SAndroid Build Coastguard Worker 110*9880d681SAndroid Build Coastguard Worker latch: 111*9880d681SAndroid Build Coastguard Worker %be.cond = icmp slt i32 %idx.inc, %smin 112*9880d681SAndroid Build Coastguard Worker br i1 %be.cond, label %loop, label %exit 113*9880d681SAndroid Build Coastguard Worker 114*9880d681SAndroid Build Coastguard Worker exit: 115*9880d681SAndroid Build Coastguard Worker ret void 116*9880d681SAndroid Build Coastguard Worker} 117*9880d681SAndroid Build Coastguard Worker 118*9880d681SAndroid Build Coastguard Workerdefine void @max.signed.1(i32* %a, i32 %a_len, i32 %n) { 119*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @max.signed.1 120*9880d681SAndroid Build Coastguard Worker entry: 121*9880d681SAndroid Build Coastguard Worker %smax.cmp = icmp sgt i32 %a_len, %n 122*9880d681SAndroid Build Coastguard Worker %smax = select i1 %smax.cmp, i32 %a_len, i32 %n 123*9880d681SAndroid Build Coastguard Worker %entry.cond = icmp sgt i32 0, %smax 124*9880d681SAndroid Build Coastguard Worker br i1 %entry.cond, label %loop, label %exit 125*9880d681SAndroid Build Coastguard Worker 126*9880d681SAndroid Build Coastguard Worker loop: 127*9880d681SAndroid Build Coastguard Worker %idx = phi i32 [ 0, %entry ], [ %idx.inc, %latch ] 128*9880d681SAndroid Build Coastguard Worker %idx.inc = add i32 %idx, 1 129*9880d681SAndroid Build Coastguard Worker %in.bounds = icmp sgt i32 %idx, %a_len 130*9880d681SAndroid Build Coastguard Worker br i1 %in.bounds, label %ok, label %latch 131*9880d681SAndroid Build Coastguard Worker; CHECK: br i1 true, label %ok, label %latch 132*9880d681SAndroid Build Coastguard Worker 133*9880d681SAndroid Build Coastguard Worker ok: 134*9880d681SAndroid Build Coastguard Worker %addr = getelementptr i32, i32* %a, i32 %idx 135*9880d681SAndroid Build Coastguard Worker store i32 %idx, i32* %addr 136*9880d681SAndroid Build Coastguard Worker br label %latch 137*9880d681SAndroid Build Coastguard Worker 138*9880d681SAndroid Build Coastguard Worker latch: 139*9880d681SAndroid Build Coastguard Worker %be.cond = icmp sgt i32 %idx.inc, %smax 140*9880d681SAndroid Build Coastguard Worker br i1 %be.cond, label %loop, label %exit 141*9880d681SAndroid Build Coastguard Worker 142*9880d681SAndroid Build Coastguard Worker exit: 143*9880d681SAndroid Build Coastguard Worker ret void 144*9880d681SAndroid Build Coastguard Worker} 145*9880d681SAndroid Build Coastguard Worker 146*9880d681SAndroid Build Coastguard Workerdefine void @max.signed.2(i32* %a, i32 %a_len, i32 %n) { 147*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @max.signed.2 148*9880d681SAndroid Build Coastguard Worker entry: 149*9880d681SAndroid Build Coastguard Worker %smax.cmp = icmp sgt i32 %a_len, %n 150*9880d681SAndroid Build Coastguard Worker %smax = select i1 %smax.cmp, i32 %a_len, i32 %n 151*9880d681SAndroid Build Coastguard Worker %entry.cond = icmp sgt i32 0, %smax 152*9880d681SAndroid Build Coastguard Worker br i1 %entry.cond, label %loop, label %exit 153*9880d681SAndroid Build Coastguard Worker 154*9880d681SAndroid Build Coastguard Worker loop: 155*9880d681SAndroid Build Coastguard Worker %idx = phi i32 [ 0, %entry ], [ %idx.inc, %latch ] 156*9880d681SAndroid Build Coastguard Worker %idx.inc = add i32 %idx, 1 157*9880d681SAndroid Build Coastguard Worker %in.bounds = icmp slt i32 %a_len, %idx 158*9880d681SAndroid Build Coastguard Worker br i1 %in.bounds, label %ok, label %latch 159*9880d681SAndroid Build Coastguard Worker; CHECK: br i1 true, label %ok, label %latch 160*9880d681SAndroid Build Coastguard Worker 161*9880d681SAndroid Build Coastguard Worker ok: 162*9880d681SAndroid Build Coastguard Worker %addr = getelementptr i32, i32* %a, i32 %idx 163*9880d681SAndroid Build Coastguard Worker store i32 %idx, i32* %addr 164*9880d681SAndroid Build Coastguard Worker br label %latch 165*9880d681SAndroid Build Coastguard Worker 166*9880d681SAndroid Build Coastguard Worker latch: 167*9880d681SAndroid Build Coastguard Worker %be.cond = icmp sgt i32 %idx.inc, %smax 168*9880d681SAndroid Build Coastguard Worker br i1 %be.cond, label %loop, label %exit 169*9880d681SAndroid Build Coastguard Worker 170*9880d681SAndroid Build Coastguard Worker exit: 171*9880d681SAndroid Build Coastguard Worker ret void 172*9880d681SAndroid Build Coastguard Worker} 173*9880d681SAndroid Build Coastguard Worker 174*9880d681SAndroid Build Coastguard Workerdefine void @max.signed.3(i32* %a, i32 %n, i32 %init) { 175*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @max.signed.3 176*9880d681SAndroid Build Coastguard Worker entry: 177*9880d681SAndroid Build Coastguard Worker %smax.cmp = icmp sgt i32 42, %n 178*9880d681SAndroid Build Coastguard Worker %smax = select i1 %smax.cmp, i32 42, i32 %n 179*9880d681SAndroid Build Coastguard Worker %entry.cond = icmp sgt i32 %init, %smax 180*9880d681SAndroid Build Coastguard Worker br i1 %entry.cond, label %loop, label %exit 181*9880d681SAndroid Build Coastguard Worker 182*9880d681SAndroid Build Coastguard Worker loop: 183*9880d681SAndroid Build Coastguard Worker %idx = phi i32 [ %init, %entry ], [ %idx.inc, %latch ] 184*9880d681SAndroid Build Coastguard Worker %idx.inc = add i32 %idx, 1 185*9880d681SAndroid Build Coastguard Worker %in.bounds = icmp sgt i32 %idx, 42 186*9880d681SAndroid Build Coastguard Worker br i1 %in.bounds, label %ok, label %latch 187*9880d681SAndroid Build Coastguard Worker; CHECK: br i1 true, label %ok, label %latch 188*9880d681SAndroid Build Coastguard Worker 189*9880d681SAndroid Build Coastguard Worker ok: 190*9880d681SAndroid Build Coastguard Worker %addr = getelementptr i32, i32* %a, i32 %idx 191*9880d681SAndroid Build Coastguard Worker store i32 %idx, i32* %addr 192*9880d681SAndroid Build Coastguard Worker br label %latch 193*9880d681SAndroid Build Coastguard Worker 194*9880d681SAndroid Build Coastguard Worker latch: 195*9880d681SAndroid Build Coastguard Worker %be.cond = icmp sgt i32 %idx.inc, %smax 196*9880d681SAndroid Build Coastguard Worker br i1 %be.cond, label %loop, label %exit 197*9880d681SAndroid Build Coastguard Worker 198*9880d681SAndroid Build Coastguard Worker exit: 199*9880d681SAndroid Build Coastguard Worker ret void 200*9880d681SAndroid Build Coastguard Worker} 201*9880d681SAndroid Build Coastguard Worker 202*9880d681SAndroid Build Coastguard Workerdefine void @max.signed.4(i32* %a, i32 %n, i32 %init) { 203*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @max.signed.4 204*9880d681SAndroid Build Coastguard Worker entry: 205*9880d681SAndroid Build Coastguard Worker %smax.cmp = icmp sgt i32 42, %n 206*9880d681SAndroid Build Coastguard Worker %smax = select i1 %smax.cmp, i32 42, i32 %n 207*9880d681SAndroid Build Coastguard Worker %entry.cond = icmp sgt i32 %init, %smax 208*9880d681SAndroid Build Coastguard Worker br i1 %entry.cond, label %loop, label %exit 209*9880d681SAndroid Build Coastguard Worker 210*9880d681SAndroid Build Coastguard Worker loop: 211*9880d681SAndroid Build Coastguard Worker %idx = phi i32 [ %init, %entry ], [ %idx.inc, %latch ] 212*9880d681SAndroid Build Coastguard Worker %idx.inc = add i32 %idx, 1 213*9880d681SAndroid Build Coastguard Worker %in.bounds = icmp slt i32 42, %idx 214*9880d681SAndroid Build Coastguard Worker br i1 %in.bounds, label %ok, label %latch 215*9880d681SAndroid Build Coastguard Worker; CHECK: br i1 true, label %ok, label %latch 216*9880d681SAndroid Build Coastguard Worker 217*9880d681SAndroid Build Coastguard Worker ok: 218*9880d681SAndroid Build Coastguard Worker %addr = getelementptr i32, i32* %a, i32 %idx 219*9880d681SAndroid Build Coastguard Worker store i32 %idx, i32* %addr 220*9880d681SAndroid Build Coastguard Worker br label %latch 221*9880d681SAndroid Build Coastguard Worker 222*9880d681SAndroid Build Coastguard Worker latch: 223*9880d681SAndroid Build Coastguard Worker %be.cond = icmp sgt i32 %idx.inc, %smax 224*9880d681SAndroid Build Coastguard Worker br i1 %be.cond, label %loop, label %exit 225*9880d681SAndroid Build Coastguard Worker 226*9880d681SAndroid Build Coastguard Worker exit: 227*9880d681SAndroid Build Coastguard Worker ret void 228*9880d681SAndroid Build Coastguard Worker} 229*9880d681SAndroid Build Coastguard Worker 230*9880d681SAndroid Build Coastguard Worker;; --- unsigned --- 231*9880d681SAndroid Build Coastguard Worker 232*9880d681SAndroid Build Coastguard Workerdefine void @min.unsigned.1(i32* %a, i32 %a_len, i32 %n) { 233*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @min.unsigned.1 234*9880d681SAndroid Build Coastguard Worker entry: 235*9880d681SAndroid Build Coastguard Worker %umin.cmp = icmp ult i32 %a_len, %n 236*9880d681SAndroid Build Coastguard Worker %umin = select i1 %umin.cmp, i32 %a_len, i32 %n 237*9880d681SAndroid Build Coastguard Worker %entry.cond = icmp ult i32 5, %umin 238*9880d681SAndroid Build Coastguard Worker br i1 %entry.cond, label %loop, label %exit 239*9880d681SAndroid Build Coastguard Worker 240*9880d681SAndroid Build Coastguard Worker loop: 241*9880d681SAndroid Build Coastguard Worker %idx = phi i32 [ 5, %entry ], [ %idx.inc, %latch ] 242*9880d681SAndroid Build Coastguard Worker %idx.inc = add i32 %idx, 1 243*9880d681SAndroid Build Coastguard Worker %in.bounds = icmp ult i32 %idx, %a_len 244*9880d681SAndroid Build Coastguard Worker br i1 %in.bounds, label %ok, label %latch 245*9880d681SAndroid Build Coastguard Worker; CHECK: br i1 true, label %ok, label %latch 246*9880d681SAndroid Build Coastguard Worker 247*9880d681SAndroid Build Coastguard Worker ok: 248*9880d681SAndroid Build Coastguard Worker %addr = getelementptr i32, i32* %a, i32 %idx 249*9880d681SAndroid Build Coastguard Worker store i32 %idx, i32* %addr 250*9880d681SAndroid Build Coastguard Worker br label %latch 251*9880d681SAndroid Build Coastguard Worker 252*9880d681SAndroid Build Coastguard Worker latch: 253*9880d681SAndroid Build Coastguard Worker %be.cond = icmp ult i32 %idx.inc, %umin 254*9880d681SAndroid Build Coastguard Worker br i1 %be.cond, label %loop, label %exit 255*9880d681SAndroid Build Coastguard Worker 256*9880d681SAndroid Build Coastguard Worker exit: 257*9880d681SAndroid Build Coastguard Worker ret void 258*9880d681SAndroid Build Coastguard Worker} 259*9880d681SAndroid Build Coastguard Worker 260*9880d681SAndroid Build Coastguard Workerdefine void @min.unsigned.2(i32* %a, i32 %a_len, i32 %n) { 261*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @min.unsigned.2 262*9880d681SAndroid Build Coastguard Worker entry: 263*9880d681SAndroid Build Coastguard Worker %umin.cmp = icmp ult i32 %a_len, %n 264*9880d681SAndroid Build Coastguard Worker %umin = select i1 %umin.cmp, i32 %a_len, i32 %n 265*9880d681SAndroid Build Coastguard Worker %entry.cond = icmp ult i32 5, %umin 266*9880d681SAndroid Build Coastguard Worker br i1 %entry.cond, label %loop, label %exit 267*9880d681SAndroid Build Coastguard Worker 268*9880d681SAndroid Build Coastguard Worker loop: 269*9880d681SAndroid Build Coastguard Worker %idx = phi i32 [ 5, %entry ], [ %idx.inc, %latch ] 270*9880d681SAndroid Build Coastguard Worker %idx.inc = add i32 %idx, 1 271*9880d681SAndroid Build Coastguard Worker %in.bounds = icmp ugt i32 %a_len, %idx 272*9880d681SAndroid Build Coastguard Worker br i1 %in.bounds, label %ok, label %latch 273*9880d681SAndroid Build Coastguard Worker; CHECK: br i1 true, label %ok, label %latch 274*9880d681SAndroid Build Coastguard Worker 275*9880d681SAndroid Build Coastguard Worker ok: 276*9880d681SAndroid Build Coastguard Worker %addr = getelementptr i32, i32* %a, i32 %idx 277*9880d681SAndroid Build Coastguard Worker store i32 %idx, i32* %addr 278*9880d681SAndroid Build Coastguard Worker br label %latch 279*9880d681SAndroid Build Coastguard Worker 280*9880d681SAndroid Build Coastguard Worker latch: 281*9880d681SAndroid Build Coastguard Worker %be.cond = icmp ult i32 %idx.inc, %umin 282*9880d681SAndroid Build Coastguard Worker br i1 %be.cond, label %loop, label %exit 283*9880d681SAndroid Build Coastguard Worker 284*9880d681SAndroid Build Coastguard Worker exit: 285*9880d681SAndroid Build Coastguard Worker ret void 286*9880d681SAndroid Build Coastguard Worker} 287*9880d681SAndroid Build Coastguard Worker 288*9880d681SAndroid Build Coastguard Workerdefine void @min.unsigned.3(i32* %a, i32 %n) { 289*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @min.unsigned.3 290*9880d681SAndroid Build Coastguard Worker entry: 291*9880d681SAndroid Build Coastguard Worker %umin.cmp = icmp ult i32 42, %n 292*9880d681SAndroid Build Coastguard Worker %umin = select i1 %umin.cmp, i32 42, i32 %n 293*9880d681SAndroid Build Coastguard Worker %entry.cond = icmp ult i32 5, %umin 294*9880d681SAndroid Build Coastguard Worker br i1 %entry.cond, label %loop, label %exit 295*9880d681SAndroid Build Coastguard Worker 296*9880d681SAndroid Build Coastguard Worker loop: 297*9880d681SAndroid Build Coastguard Worker %idx = phi i32 [ 5, %entry ], [ %idx.inc, %latch ] 298*9880d681SAndroid Build Coastguard Worker %idx.inc = add i32 %idx, 1 299*9880d681SAndroid Build Coastguard Worker %in.bounds = icmp ult i32 %idx, 42 300*9880d681SAndroid Build Coastguard Worker br i1 %in.bounds, label %ok, label %latch 301*9880d681SAndroid Build Coastguard Worker; CHECK: br i1 true, label %ok, label %latch 302*9880d681SAndroid Build Coastguard Worker 303*9880d681SAndroid Build Coastguard Worker ok: 304*9880d681SAndroid Build Coastguard Worker %addr = getelementptr i32, i32* %a, i32 %idx 305*9880d681SAndroid Build Coastguard Worker store i32 %idx, i32* %addr 306*9880d681SAndroid Build Coastguard Worker br label %latch 307*9880d681SAndroid Build Coastguard Worker 308*9880d681SAndroid Build Coastguard Worker latch: 309*9880d681SAndroid Build Coastguard Worker %be.cond = icmp ult i32 %idx.inc, %umin 310*9880d681SAndroid Build Coastguard Worker br i1 %be.cond, label %loop, label %exit 311*9880d681SAndroid Build Coastguard Worker 312*9880d681SAndroid Build Coastguard Worker exit: 313*9880d681SAndroid Build Coastguard Worker ret void 314*9880d681SAndroid Build Coastguard Worker} 315*9880d681SAndroid Build Coastguard Worker 316*9880d681SAndroid Build Coastguard Workerdefine void @min.unsigned.4(i32* %a, i32 %n) { 317*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @min.unsigned.4 318*9880d681SAndroid Build Coastguard Worker entry: 319*9880d681SAndroid Build Coastguard Worker %umin.cmp = icmp ult i32 42, %n 320*9880d681SAndroid Build Coastguard Worker %umin = select i1 %umin.cmp, i32 42, i32 %n 321*9880d681SAndroid Build Coastguard Worker %entry.cond = icmp ult i32 5, %umin 322*9880d681SAndroid Build Coastguard Worker br i1 %entry.cond, label %loop, label %exit 323*9880d681SAndroid Build Coastguard Worker 324*9880d681SAndroid Build Coastguard Worker loop: 325*9880d681SAndroid Build Coastguard Worker %idx = phi i32 [ 5, %entry ], [ %idx.inc, %latch ] 326*9880d681SAndroid Build Coastguard Worker %idx.inc = add i32 %idx, 1 327*9880d681SAndroid Build Coastguard Worker %in.bounds = icmp ugt i32 42, %idx 328*9880d681SAndroid Build Coastguard Worker br i1 %in.bounds, label %ok, label %latch 329*9880d681SAndroid Build Coastguard Worker; CHECK: br i1 true, label %ok, label %latch 330*9880d681SAndroid Build Coastguard Worker 331*9880d681SAndroid Build Coastguard Worker ok: 332*9880d681SAndroid Build Coastguard Worker %addr = getelementptr i32, i32* %a, i32 %idx 333*9880d681SAndroid Build Coastguard Worker store i32 %idx, i32* %addr 334*9880d681SAndroid Build Coastguard Worker br label %latch 335*9880d681SAndroid Build Coastguard Worker 336*9880d681SAndroid Build Coastguard Worker latch: 337*9880d681SAndroid Build Coastguard Worker %be.cond = icmp ult i32 %idx.inc, %umin 338*9880d681SAndroid Build Coastguard Worker br i1 %be.cond, label %loop, label %exit 339*9880d681SAndroid Build Coastguard Worker 340*9880d681SAndroid Build Coastguard Worker exit: 341*9880d681SAndroid Build Coastguard Worker ret void 342*9880d681SAndroid Build Coastguard Worker} 343*9880d681SAndroid Build Coastguard Worker 344*9880d681SAndroid Build Coastguard Workerdefine void @max.unsigned.1(i32* %a, i32 %a_len, i32 %n) { 345*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @max.unsigned.1 346*9880d681SAndroid Build Coastguard Worker entry: 347*9880d681SAndroid Build Coastguard Worker %umax.cmp = icmp ugt i32 %a_len, %n 348*9880d681SAndroid Build Coastguard Worker %umax = select i1 %umax.cmp, i32 %a_len, i32 %n 349*9880d681SAndroid Build Coastguard Worker %entry.cond = icmp ugt i32 5, %umax 350*9880d681SAndroid Build Coastguard Worker br i1 %entry.cond, label %loop, label %exit 351*9880d681SAndroid Build Coastguard Worker 352*9880d681SAndroid Build Coastguard Worker loop: 353*9880d681SAndroid Build Coastguard Worker %idx = phi i32 [ 5, %entry ], [ %idx.inc, %latch ] 354*9880d681SAndroid Build Coastguard Worker %idx.inc = add i32 %idx, 1 355*9880d681SAndroid Build Coastguard Worker %in.bounds = icmp ugt i32 %idx, %a_len 356*9880d681SAndroid Build Coastguard Worker br i1 %in.bounds, label %ok, label %latch 357*9880d681SAndroid Build Coastguard Worker; CHECK: br i1 true, label %ok, label %latch 358*9880d681SAndroid Build Coastguard Worker 359*9880d681SAndroid Build Coastguard Worker ok: 360*9880d681SAndroid Build Coastguard Worker %addr = getelementptr i32, i32* %a, i32 %idx 361*9880d681SAndroid Build Coastguard Worker store i32 %idx, i32* %addr 362*9880d681SAndroid Build Coastguard Worker br label %latch 363*9880d681SAndroid Build Coastguard Worker 364*9880d681SAndroid Build Coastguard Worker latch: 365*9880d681SAndroid Build Coastguard Worker %be.cond = icmp ugt i32 %idx.inc, %umax 366*9880d681SAndroid Build Coastguard Worker br i1 %be.cond, label %loop, label %exit 367*9880d681SAndroid Build Coastguard Worker 368*9880d681SAndroid Build Coastguard Worker exit: 369*9880d681SAndroid Build Coastguard Worker ret void 370*9880d681SAndroid Build Coastguard Worker} 371*9880d681SAndroid Build Coastguard Worker 372*9880d681SAndroid Build Coastguard Workerdefine void @max.unsigned.2(i32* %a, i32 %a_len, i32 %n) { 373*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @max.unsigned.2 374*9880d681SAndroid Build Coastguard Worker entry: 375*9880d681SAndroid Build Coastguard Worker %umax.cmp = icmp ugt i32 %a_len, %n 376*9880d681SAndroid Build Coastguard Worker %umax = select i1 %umax.cmp, i32 %a_len, i32 %n 377*9880d681SAndroid Build Coastguard Worker %entry.cond = icmp ugt i32 5, %umax 378*9880d681SAndroid Build Coastguard Worker br i1 %entry.cond, label %loop, label %exit 379*9880d681SAndroid Build Coastguard Worker 380*9880d681SAndroid Build Coastguard Worker loop: 381*9880d681SAndroid Build Coastguard Worker %idx = phi i32 [ 5, %entry ], [ %idx.inc, %latch ] 382*9880d681SAndroid Build Coastguard Worker %idx.inc = add i32 %idx, 1 383*9880d681SAndroid Build Coastguard Worker %in.bounds = icmp ult i32 %a_len, %idx 384*9880d681SAndroid Build Coastguard Worker br i1 %in.bounds, label %ok, label %latch 385*9880d681SAndroid Build Coastguard Worker; CHECK: br i1 true, label %ok, label %latch 386*9880d681SAndroid Build Coastguard Worker 387*9880d681SAndroid Build Coastguard Worker ok: 388*9880d681SAndroid Build Coastguard Worker %addr = getelementptr i32, i32* %a, i32 %idx 389*9880d681SAndroid Build Coastguard Worker store i32 %idx, i32* %addr 390*9880d681SAndroid Build Coastguard Worker br label %latch 391*9880d681SAndroid Build Coastguard Worker 392*9880d681SAndroid Build Coastguard Worker latch: 393*9880d681SAndroid Build Coastguard Worker %be.cond = icmp ugt i32 %idx.inc, %umax 394*9880d681SAndroid Build Coastguard Worker br i1 %be.cond, label %loop, label %exit 395*9880d681SAndroid Build Coastguard Worker 396*9880d681SAndroid Build Coastguard Worker exit: 397*9880d681SAndroid Build Coastguard Worker ret void 398*9880d681SAndroid Build Coastguard Worker} 399*9880d681SAndroid Build Coastguard Worker 400*9880d681SAndroid Build Coastguard Workerdefine void @max.unsigned.3(i32* %a, i32 %n, i32 %init) { 401*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @max.unsigned.3 402*9880d681SAndroid Build Coastguard Worker entry: 403*9880d681SAndroid Build Coastguard Worker %umax.cmp = icmp ugt i32 42, %n 404*9880d681SAndroid Build Coastguard Worker %umax = select i1 %umax.cmp, i32 42, i32 %n 405*9880d681SAndroid Build Coastguard Worker %entry.cond = icmp ugt i32 %init, %umax 406*9880d681SAndroid Build Coastguard Worker br i1 %entry.cond, label %loop, label %exit 407*9880d681SAndroid Build Coastguard Worker 408*9880d681SAndroid Build Coastguard Worker loop: 409*9880d681SAndroid Build Coastguard Worker %idx = phi i32 [ %init, %entry ], [ %idx.inc, %latch ] 410*9880d681SAndroid Build Coastguard Worker %idx.inc = add i32 %idx, 1 411*9880d681SAndroid Build Coastguard Worker %in.bounds = icmp ugt i32 %idx, 42 412*9880d681SAndroid Build Coastguard Worker br i1 %in.bounds, label %ok, label %latch 413*9880d681SAndroid Build Coastguard Worker; CHECK: br i1 true, label %ok, label %latch 414*9880d681SAndroid Build Coastguard Worker 415*9880d681SAndroid Build Coastguard Worker ok: 416*9880d681SAndroid Build Coastguard Worker %addr = getelementptr i32, i32* %a, i32 %idx 417*9880d681SAndroid Build Coastguard Worker store i32 %idx, i32* %addr 418*9880d681SAndroid Build Coastguard Worker br label %latch 419*9880d681SAndroid Build Coastguard Worker 420*9880d681SAndroid Build Coastguard Worker latch: 421*9880d681SAndroid Build Coastguard Worker %be.cond = icmp ugt i32 %idx.inc, %umax 422*9880d681SAndroid Build Coastguard Worker br i1 %be.cond, label %loop, label %exit 423*9880d681SAndroid Build Coastguard Worker 424*9880d681SAndroid Build Coastguard Worker exit: 425*9880d681SAndroid Build Coastguard Worker ret void 426*9880d681SAndroid Build Coastguard Worker} 427*9880d681SAndroid Build Coastguard Worker 428*9880d681SAndroid Build Coastguard Workerdefine void @max.unsigned.4(i32* %a, i32 %n, i32 %init) { 429*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @max.unsigned.4 430*9880d681SAndroid Build Coastguard Worker entry: 431*9880d681SAndroid Build Coastguard Worker %umax.cmp = icmp ugt i32 42, %n 432*9880d681SAndroid Build Coastguard Worker %umax = select i1 %umax.cmp, i32 42, i32 %n 433*9880d681SAndroid Build Coastguard Worker %entry.cond = icmp ugt i32 %init, %umax 434*9880d681SAndroid Build Coastguard Worker br i1 %entry.cond, label %loop, label %exit 435*9880d681SAndroid Build Coastguard Worker 436*9880d681SAndroid Build Coastguard Worker loop: 437*9880d681SAndroid Build Coastguard Worker %idx = phi i32 [ %init, %entry ], [ %idx.inc, %latch ] 438*9880d681SAndroid Build Coastguard Worker %idx.inc = add i32 %idx, 1 439*9880d681SAndroid Build Coastguard Worker %in.bounds = icmp ult i32 42, %idx 440*9880d681SAndroid Build Coastguard Worker br i1 %in.bounds, label %ok, label %latch 441*9880d681SAndroid Build Coastguard Worker; CHECK: br i1 true, label %ok, label %latch 442*9880d681SAndroid Build Coastguard Worker 443*9880d681SAndroid Build Coastguard Worker ok: 444*9880d681SAndroid Build Coastguard Worker %addr = getelementptr i32, i32* %a, i32 %idx 445*9880d681SAndroid Build Coastguard Worker store i32 %idx, i32* %addr 446*9880d681SAndroid Build Coastguard Worker br label %latch 447*9880d681SAndroid Build Coastguard Worker 448*9880d681SAndroid Build Coastguard Worker latch: 449*9880d681SAndroid Build Coastguard Worker %be.cond = icmp ugt i32 %idx.inc, %umax 450*9880d681SAndroid Build Coastguard Worker br i1 %be.cond, label %loop, label %exit 451*9880d681SAndroid Build Coastguard Worker 452*9880d681SAndroid Build Coastguard Worker exit: 453*9880d681SAndroid Build Coastguard Worker ret void 454*9880d681SAndroid Build Coastguard Worker} 455