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