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