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_sle 9*9880d681SAndroid Build Coastguard Worker; CHECK: bdnz 10*9880d681SAndroid Build Coastguard Worker; a < b 11*9880d681SAndroid Build Coastguard Workerdefine void @test_pos1_ir_sle(i8* nocapture %p, i32 %a, i32 %b) nounwind { 12*9880d681SAndroid Build Coastguard Workerentry: 13*9880d681SAndroid Build Coastguard Worker %cmp3 = icmp sle i32 28395, %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 [ 28395, %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 sle 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_sle 38*9880d681SAndroid Build Coastguard Worker; CHECK: bdnz 39*9880d681SAndroid Build Coastguard Worker; a < b 40*9880d681SAndroid Build Coastguard Workerdefine void @test_pos2_ir_sle(i8* nocapture %p, i32 %a, i32 %b) nounwind { 41*9880d681SAndroid Build Coastguard Workerentry: 42*9880d681SAndroid Build Coastguard Worker %cmp3 = icmp sle i32 9073, %b 43*9880d681SAndroid Build Coastguard Worker br i1 %cmp3, label %for.body.lr.ph, label %for.end 44*9880d681SAndroid Build Coastguard Worker 45*9880d681SAndroid Build Coastguard Workerfor.body.lr.ph: ; preds = %entry 46*9880d681SAndroid Build Coastguard Worker br label %for.body 47*9880d681SAndroid Build Coastguard Worker 48*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %for.body.lr.ph, %for.body 49*9880d681SAndroid Build Coastguard Worker %i.04 = phi i32 [ 9073, %for.body.lr.ph ], [ %inc, %for.body ] 50*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04 51*9880d681SAndroid Build Coastguard Worker %0 = load i8, i8* %arrayidx, align 1 52*9880d681SAndroid Build Coastguard Worker %conv = zext i8 %0 to i32 53*9880d681SAndroid Build Coastguard Worker %add = add nsw i32 %conv, 1 54*9880d681SAndroid Build Coastguard Worker %conv1 = trunc i32 %add to i8 55*9880d681SAndroid Build Coastguard Worker store i8 %conv1, i8* %arrayidx, align 1 56*9880d681SAndroid Build Coastguard Worker %inc = add nsw i32 %i.04, 2 57*9880d681SAndroid Build Coastguard Worker %cmp = icmp sle i32 %inc, %b 58*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %for.body, label %for.end 59*9880d681SAndroid Build Coastguard Worker 60*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %for.body, %entry 61*9880d681SAndroid Build Coastguard Worker ret void 62*9880d681SAndroid Build Coastguard Worker} 63*9880d681SAndroid Build Coastguard Worker 64*9880d681SAndroid Build Coastguard Worker 65*9880d681SAndroid Build Coastguard Worker 66*9880d681SAndroid Build Coastguard Worker; CHECK: test_pos4_ir_sle 67*9880d681SAndroid Build Coastguard Worker; CHECK: bdnz 68*9880d681SAndroid Build Coastguard Worker; a < b 69*9880d681SAndroid Build Coastguard Workerdefine void @test_pos4_ir_sle(i8* nocapture %p, i32 %a, i32 %b) nounwind { 70*9880d681SAndroid Build Coastguard Workerentry: 71*9880d681SAndroid Build Coastguard Worker %cmp3 = icmp sle i32 21956, %b 72*9880d681SAndroid Build Coastguard Worker br i1 %cmp3, label %for.body.lr.ph, label %for.end 73*9880d681SAndroid Build Coastguard Worker 74*9880d681SAndroid Build Coastguard Workerfor.body.lr.ph: ; preds = %entry 75*9880d681SAndroid Build Coastguard Worker br label %for.body 76*9880d681SAndroid Build Coastguard Worker 77*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %for.body.lr.ph, %for.body 78*9880d681SAndroid Build Coastguard Worker %i.04 = phi i32 [ 21956, %for.body.lr.ph ], [ %inc, %for.body ] 79*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04 80*9880d681SAndroid Build Coastguard Worker %0 = load i8, i8* %arrayidx, align 1 81*9880d681SAndroid Build Coastguard Worker %conv = zext i8 %0 to i32 82*9880d681SAndroid Build Coastguard Worker %add = add nsw i32 %conv, 1 83*9880d681SAndroid Build Coastguard Worker %conv1 = trunc i32 %add to i8 84*9880d681SAndroid Build Coastguard Worker store i8 %conv1, i8* %arrayidx, align 1 85*9880d681SAndroid Build Coastguard Worker %inc = add nsw i32 %i.04, 4 86*9880d681SAndroid Build Coastguard Worker %cmp = icmp sle i32 %inc, %b 87*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %for.body, label %for.end 88*9880d681SAndroid Build Coastguard Worker 89*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %for.body, %entry 90*9880d681SAndroid Build Coastguard Worker ret void 91*9880d681SAndroid Build Coastguard Worker} 92*9880d681SAndroid Build Coastguard Worker 93*9880d681SAndroid Build Coastguard Worker 94*9880d681SAndroid Build Coastguard Worker 95*9880d681SAndroid Build Coastguard Worker; CHECK: test_pos8_ir_sle 96*9880d681SAndroid Build Coastguard Worker; CHECK: bdnz 97*9880d681SAndroid Build Coastguard Worker; a < b 98*9880d681SAndroid Build Coastguard Workerdefine void @test_pos8_ir_sle(i8* nocapture %p, i32 %a, i32 %b) nounwind { 99*9880d681SAndroid Build Coastguard Workerentry: 100*9880d681SAndroid Build Coastguard Worker %cmp3 = icmp sle i32 16782, %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 [ 16782, %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 sle 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_sle 125*9880d681SAndroid Build Coastguard Worker; CHECK: bdnz 126*9880d681SAndroid Build Coastguard Worker; a < b 127*9880d681SAndroid Build Coastguard Workerdefine void @test_pos16_ir_sle(i8* nocapture %p, i32 %a, i32 %b) nounwind { 128*9880d681SAndroid Build Coastguard Workerentry: 129*9880d681SAndroid Build Coastguard Worker %cmp3 = icmp sle i32 19097, %b 130*9880d681SAndroid Build Coastguard Worker br i1 %cmp3, label %for.body.lr.ph, label %for.end 131*9880d681SAndroid Build Coastguard Worker 132*9880d681SAndroid Build Coastguard Workerfor.body.lr.ph: ; preds = %entry 133*9880d681SAndroid Build Coastguard Worker br label %for.body 134*9880d681SAndroid Build Coastguard Worker 135*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %for.body.lr.ph, %for.body 136*9880d681SAndroid Build Coastguard Worker %i.04 = phi i32 [ 19097, %for.body.lr.ph ], [ %inc, %for.body ] 137*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04 138*9880d681SAndroid Build Coastguard Worker %0 = load i8, i8* %arrayidx, align 1 139*9880d681SAndroid Build Coastguard Worker %conv = zext i8 %0 to i32 140*9880d681SAndroid Build Coastguard Worker %add = add nsw i32 %conv, 1 141*9880d681SAndroid Build Coastguard Worker %conv1 = trunc i32 %add to i8 142*9880d681SAndroid Build Coastguard Worker store i8 %conv1, i8* %arrayidx, align 1 143*9880d681SAndroid Build Coastguard Worker %inc = add nsw i32 %i.04, 16 144*9880d681SAndroid Build Coastguard Worker %cmp = icmp sle i32 %inc, %b 145*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %for.body, label %for.end 146*9880d681SAndroid Build Coastguard Worker 147*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %for.body, %entry 148*9880d681SAndroid Build Coastguard Worker ret void 149*9880d681SAndroid Build Coastguard Worker} 150*9880d681SAndroid Build Coastguard Worker 151*9880d681SAndroid Build Coastguard Worker 152*9880d681SAndroid Build Coastguard Worker 153*9880d681SAndroid Build Coastguard Worker; CHECK: test_pos1_ri_sle 154*9880d681SAndroid Build Coastguard Worker; CHECK: bdnz 155*9880d681SAndroid Build Coastguard Worker; a < b 156*9880d681SAndroid Build Coastguard Workerdefine void @test_pos1_ri_sle(i8* nocapture %p, i32 %a, i32 %b) nounwind { 157*9880d681SAndroid Build Coastguard Workerentry: 158*9880d681SAndroid Build Coastguard Worker %cmp3 = icmp sle i32 %a, 14040 159*9880d681SAndroid Build Coastguard Worker br i1 %cmp3, label %for.body.lr.ph, label %for.end 160*9880d681SAndroid Build Coastguard Worker 161*9880d681SAndroid Build Coastguard Workerfor.body.lr.ph: ; preds = %entry 162*9880d681SAndroid Build Coastguard Worker br label %for.body 163*9880d681SAndroid Build Coastguard Worker 164*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %for.body.lr.ph, %for.body 165*9880d681SAndroid Build Coastguard Worker %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ] 166*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04 167*9880d681SAndroid Build Coastguard Worker %0 = load i8, i8* %arrayidx, align 1 168*9880d681SAndroid Build Coastguard Worker %conv = zext i8 %0 to i32 169*9880d681SAndroid Build Coastguard Worker %add = add nsw i32 %conv, 1 170*9880d681SAndroid Build Coastguard Worker %conv1 = trunc i32 %add to i8 171*9880d681SAndroid Build Coastguard Worker store i8 %conv1, i8* %arrayidx, align 1 172*9880d681SAndroid Build Coastguard Worker %inc = add nsw i32 %i.04, 1 173*9880d681SAndroid Build Coastguard Worker %cmp = icmp sle i32 %inc, 14040 174*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %for.body, label %for.end 175*9880d681SAndroid Build Coastguard Worker 176*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %for.body, %entry 177*9880d681SAndroid Build Coastguard Worker ret void 178*9880d681SAndroid Build Coastguard Worker} 179*9880d681SAndroid Build Coastguard Worker 180*9880d681SAndroid Build Coastguard Worker 181*9880d681SAndroid Build Coastguard Worker 182*9880d681SAndroid Build Coastguard Worker; CHECK: test_pos2_ri_sle 183*9880d681SAndroid Build Coastguard Worker; CHECK: bdnz 184*9880d681SAndroid Build Coastguard Worker; a < b 185*9880d681SAndroid Build Coastguard Workerdefine void @test_pos2_ri_sle(i8* nocapture %p, i32 %a, i32 %b) nounwind { 186*9880d681SAndroid Build Coastguard Workerentry: 187*9880d681SAndroid Build Coastguard Worker %cmp3 = icmp sle i32 %a, 13710 188*9880d681SAndroid Build Coastguard Worker br i1 %cmp3, label %for.body.lr.ph, label %for.end 189*9880d681SAndroid Build Coastguard Worker 190*9880d681SAndroid Build Coastguard Workerfor.body.lr.ph: ; preds = %entry 191*9880d681SAndroid Build Coastguard Worker br label %for.body 192*9880d681SAndroid Build Coastguard Worker 193*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %for.body.lr.ph, %for.body 194*9880d681SAndroid Build Coastguard Worker %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ] 195*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04 196*9880d681SAndroid Build Coastguard Worker %0 = load i8, i8* %arrayidx, align 1 197*9880d681SAndroid Build Coastguard Worker %conv = zext i8 %0 to i32 198*9880d681SAndroid Build Coastguard Worker %add = add nsw i32 %conv, 1 199*9880d681SAndroid Build Coastguard Worker %conv1 = trunc i32 %add to i8 200*9880d681SAndroid Build Coastguard Worker store i8 %conv1, i8* %arrayidx, align 1 201*9880d681SAndroid Build Coastguard Worker %inc = add nsw i32 %i.04, 2 202*9880d681SAndroid Build Coastguard Worker %cmp = icmp sle i32 %inc, 13710 203*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %for.body, label %for.end 204*9880d681SAndroid Build Coastguard Worker 205*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %for.body, %entry 206*9880d681SAndroid Build Coastguard Worker ret void 207*9880d681SAndroid Build Coastguard Worker} 208*9880d681SAndroid Build Coastguard Worker 209*9880d681SAndroid Build Coastguard Worker 210*9880d681SAndroid Build Coastguard Worker 211*9880d681SAndroid Build Coastguard Worker; CHECK: test_pos4_ri_sle 212*9880d681SAndroid Build Coastguard Worker; CHECK: bdnz 213*9880d681SAndroid Build Coastguard Worker; a < b 214*9880d681SAndroid Build Coastguard Workerdefine void @test_pos4_ri_sle(i8* nocapture %p, i32 %a, i32 %b) nounwind { 215*9880d681SAndroid Build Coastguard Workerentry: 216*9880d681SAndroid Build Coastguard Worker %cmp3 = icmp sle i32 %a, 9920 217*9880d681SAndroid Build Coastguard Worker br i1 %cmp3, label %for.body.lr.ph, label %for.end 218*9880d681SAndroid Build Coastguard Worker 219*9880d681SAndroid Build Coastguard Workerfor.body.lr.ph: ; preds = %entry 220*9880d681SAndroid Build Coastguard Worker br label %for.body 221*9880d681SAndroid Build Coastguard Worker 222*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %for.body.lr.ph, %for.body 223*9880d681SAndroid Build Coastguard Worker %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ] 224*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04 225*9880d681SAndroid Build Coastguard Worker %0 = load i8, i8* %arrayidx, align 1 226*9880d681SAndroid Build Coastguard Worker %conv = zext i8 %0 to i32 227*9880d681SAndroid Build Coastguard Worker %add = add nsw i32 %conv, 1 228*9880d681SAndroid Build Coastguard Worker %conv1 = trunc i32 %add to i8 229*9880d681SAndroid Build Coastguard Worker store i8 %conv1, i8* %arrayidx, align 1 230*9880d681SAndroid Build Coastguard Worker %inc = add nsw i32 %i.04, 4 231*9880d681SAndroid Build Coastguard Worker %cmp = icmp sle i32 %inc, 9920 232*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %for.body, label %for.end 233*9880d681SAndroid Build Coastguard Worker 234*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %for.body, %entry 235*9880d681SAndroid Build Coastguard Worker ret void 236*9880d681SAndroid Build Coastguard Worker} 237*9880d681SAndroid Build Coastguard Worker 238*9880d681SAndroid Build Coastguard Worker 239*9880d681SAndroid Build Coastguard Worker 240*9880d681SAndroid Build Coastguard Worker; CHECK: test_pos8_ri_sle 241*9880d681SAndroid Build Coastguard Worker; CHECK: bdnz 242*9880d681SAndroid Build Coastguard Worker; a < b 243*9880d681SAndroid Build Coastguard Workerdefine void @test_pos8_ri_sle(i8* nocapture %p, i32 %a, i32 %b) nounwind { 244*9880d681SAndroid Build Coastguard Workerentry: 245*9880d681SAndroid Build Coastguard Worker %cmp3 = icmp sle i32 %a, 18924 246*9880d681SAndroid Build Coastguard Worker br i1 %cmp3, label %for.body.lr.ph, label %for.end 247*9880d681SAndroid Build Coastguard Worker 248*9880d681SAndroid Build Coastguard Workerfor.body.lr.ph: ; preds = %entry 249*9880d681SAndroid Build Coastguard Worker br label %for.body 250*9880d681SAndroid Build Coastguard Worker 251*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %for.body.lr.ph, %for.body 252*9880d681SAndroid Build Coastguard Worker %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ] 253*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04 254*9880d681SAndroid Build Coastguard Worker %0 = load i8, i8* %arrayidx, align 1 255*9880d681SAndroid Build Coastguard Worker %conv = zext i8 %0 to i32 256*9880d681SAndroid Build Coastguard Worker %add = add nsw i32 %conv, 1 257*9880d681SAndroid Build Coastguard Worker %conv1 = trunc i32 %add to i8 258*9880d681SAndroid Build Coastguard Worker store i8 %conv1, i8* %arrayidx, align 1 259*9880d681SAndroid Build Coastguard Worker %inc = add nsw i32 %i.04, 8 260*9880d681SAndroid Build Coastguard Worker %cmp = icmp sle i32 %inc, 18924 261*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %for.body, label %for.end 262*9880d681SAndroid Build Coastguard Worker 263*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %for.body, %entry 264*9880d681SAndroid Build Coastguard Worker ret void 265*9880d681SAndroid Build Coastguard Worker} 266*9880d681SAndroid Build Coastguard Worker 267*9880d681SAndroid Build Coastguard Worker 268*9880d681SAndroid Build Coastguard Worker 269*9880d681SAndroid Build Coastguard Worker; CHECK: test_pos16_ri_sle 270*9880d681SAndroid Build Coastguard Worker; CHECK: bdnz 271*9880d681SAndroid Build Coastguard Worker; a < b 272*9880d681SAndroid Build Coastguard Workerdefine void @test_pos16_ri_sle(i8* nocapture %p, i32 %a, i32 %b) nounwind { 273*9880d681SAndroid Build Coastguard Workerentry: 274*9880d681SAndroid Build Coastguard Worker %cmp3 = icmp sle i32 %a, 11812 275*9880d681SAndroid Build Coastguard Worker br i1 %cmp3, label %for.body.lr.ph, label %for.end 276*9880d681SAndroid Build Coastguard Worker 277*9880d681SAndroid Build Coastguard Workerfor.body.lr.ph: ; preds = %entry 278*9880d681SAndroid Build Coastguard Worker br label %for.body 279*9880d681SAndroid Build Coastguard Worker 280*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %for.body.lr.ph, %for.body 281*9880d681SAndroid Build Coastguard Worker %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ] 282*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04 283*9880d681SAndroid Build Coastguard Worker %0 = load i8, i8* %arrayidx, align 1 284*9880d681SAndroid Build Coastguard Worker %conv = zext i8 %0 to i32 285*9880d681SAndroid Build Coastguard Worker %add = add nsw i32 %conv, 1 286*9880d681SAndroid Build Coastguard Worker %conv1 = trunc i32 %add to i8 287*9880d681SAndroid Build Coastguard Worker store i8 %conv1, i8* %arrayidx, align 1 288*9880d681SAndroid Build Coastguard Worker %inc = add nsw i32 %i.04, 16 289*9880d681SAndroid Build Coastguard Worker %cmp = icmp sle i32 %inc, 11812 290*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %for.body, label %for.end 291*9880d681SAndroid Build Coastguard Worker 292*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %for.body, %entry 293*9880d681SAndroid Build Coastguard Worker ret void 294*9880d681SAndroid Build Coastguard Worker} 295*9880d681SAndroid Build Coastguard Worker 296*9880d681SAndroid Build Coastguard Worker 297*9880d681SAndroid Build Coastguard Worker 298*9880d681SAndroid Build Coastguard Worker; CHECK: test_pos1_rr_sle 299*9880d681SAndroid Build Coastguard Worker; FIXME: Support this loop! 300*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: bdnz 301*9880d681SAndroid Build Coastguard Worker; a < b 302*9880d681SAndroid Build Coastguard Workerdefine void @test_pos1_rr_sle(i8* nocapture %p, i32 %a, i32 %b) nounwind { 303*9880d681SAndroid Build Coastguard Workerentry: 304*9880d681SAndroid Build Coastguard Worker %cmp3 = icmp sle i32 %a, %b 305*9880d681SAndroid Build Coastguard Worker br i1 %cmp3, label %for.body.lr.ph, label %for.end 306*9880d681SAndroid Build Coastguard Worker 307*9880d681SAndroid Build Coastguard Workerfor.body.lr.ph: ; preds = %entry 308*9880d681SAndroid Build Coastguard Worker br label %for.body 309*9880d681SAndroid Build Coastguard Worker 310*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %for.body.lr.ph, %for.body 311*9880d681SAndroid Build Coastguard Worker %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ] 312*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04 313*9880d681SAndroid Build Coastguard Worker %0 = load i8, i8* %arrayidx, align 1 314*9880d681SAndroid Build Coastguard Worker %conv = zext i8 %0 to i32 315*9880d681SAndroid Build Coastguard Worker %add = add nsw i32 %conv, 1 316*9880d681SAndroid Build Coastguard Worker %conv1 = trunc i32 %add to i8 317*9880d681SAndroid Build Coastguard Worker store i8 %conv1, i8* %arrayidx, align 1 318*9880d681SAndroid Build Coastguard Worker %inc = add nsw i32 %i.04, 1 319*9880d681SAndroid Build Coastguard Worker %cmp = icmp sle i32 %inc, %b 320*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %for.body, label %for.end 321*9880d681SAndroid Build Coastguard Worker 322*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %for.body, %entry 323*9880d681SAndroid Build Coastguard Worker ret void 324*9880d681SAndroid Build Coastguard Worker} 325*9880d681SAndroid Build Coastguard Worker 326*9880d681SAndroid Build Coastguard Worker 327*9880d681SAndroid Build Coastguard Worker 328*9880d681SAndroid Build Coastguard Worker; CHECK: test_pos2_rr_sle 329*9880d681SAndroid Build Coastguard Worker; FIXME: Support this loop! 330*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: bdnz 331*9880d681SAndroid Build Coastguard Worker; a < b 332*9880d681SAndroid Build Coastguard Workerdefine void @test_pos2_rr_sle(i8* nocapture %p, i32 %a, i32 %b) nounwind { 333*9880d681SAndroid Build Coastguard Workerentry: 334*9880d681SAndroid Build Coastguard Worker %cmp3 = icmp sle 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 sle 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_sle 359*9880d681SAndroid Build Coastguard Worker; FIXME: Support this loop! 360*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: bdnz 361*9880d681SAndroid Build Coastguard Worker; a < b 362*9880d681SAndroid Build Coastguard Workerdefine void @test_pos4_rr_sle(i8* nocapture %p, i32 %a, i32 %b) nounwind { 363*9880d681SAndroid Build Coastguard Workerentry: 364*9880d681SAndroid Build Coastguard Worker %cmp3 = icmp sle i32 %a, %b 365*9880d681SAndroid Build Coastguard Worker br i1 %cmp3, label %for.body.lr.ph, label %for.end 366*9880d681SAndroid Build Coastguard Worker 367*9880d681SAndroid Build Coastguard Workerfor.body.lr.ph: ; preds = %entry 368*9880d681SAndroid Build Coastguard Worker br label %for.body 369*9880d681SAndroid Build Coastguard Worker 370*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %for.body.lr.ph, %for.body 371*9880d681SAndroid Build Coastguard Worker %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ] 372*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04 373*9880d681SAndroid Build Coastguard Worker %0 = load i8, i8* %arrayidx, align 1 374*9880d681SAndroid Build Coastguard Worker %conv = zext i8 %0 to i32 375*9880d681SAndroid Build Coastguard Worker %add = add nsw i32 %conv, 1 376*9880d681SAndroid Build Coastguard Worker %conv1 = trunc i32 %add to i8 377*9880d681SAndroid Build Coastguard Worker store i8 %conv1, i8* %arrayidx, align 1 378*9880d681SAndroid Build Coastguard Worker %inc = add nsw i32 %i.04, 4 379*9880d681SAndroid Build Coastguard Worker %cmp = icmp sle i32 %inc, %b 380*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %for.body, label %for.end 381*9880d681SAndroid Build Coastguard Worker 382*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %for.body, %entry 383*9880d681SAndroid Build Coastguard Worker ret void 384*9880d681SAndroid Build Coastguard Worker} 385*9880d681SAndroid Build Coastguard Worker 386*9880d681SAndroid Build Coastguard Worker 387*9880d681SAndroid Build Coastguard Worker 388*9880d681SAndroid Build Coastguard Worker; CHECK: test_pos8_rr_sle 389*9880d681SAndroid Build Coastguard Worker; FIXME: Support this loop! 390*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: bdnz 391*9880d681SAndroid Build Coastguard Worker; a < b 392*9880d681SAndroid Build Coastguard Workerdefine void @test_pos8_rr_sle(i8* nocapture %p, i32 %a, i32 %b) nounwind { 393*9880d681SAndroid Build Coastguard Workerentry: 394*9880d681SAndroid Build Coastguard Worker %cmp3 = icmp sle i32 %a, %b 395*9880d681SAndroid Build Coastguard Worker br i1 %cmp3, label %for.body.lr.ph, label %for.end 396*9880d681SAndroid Build Coastguard Worker 397*9880d681SAndroid Build Coastguard Workerfor.body.lr.ph: ; preds = %entry 398*9880d681SAndroid Build Coastguard Worker br label %for.body 399*9880d681SAndroid Build Coastguard Worker 400*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %for.body.lr.ph, %for.body 401*9880d681SAndroid Build Coastguard Worker %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ] 402*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04 403*9880d681SAndroid Build Coastguard Worker %0 = load i8, i8* %arrayidx, align 1 404*9880d681SAndroid Build Coastguard Worker %conv = zext i8 %0 to i32 405*9880d681SAndroid Build Coastguard Worker %add = add nsw i32 %conv, 1 406*9880d681SAndroid Build Coastguard Worker %conv1 = trunc i32 %add to i8 407*9880d681SAndroid Build Coastguard Worker store i8 %conv1, i8* %arrayidx, align 1 408*9880d681SAndroid Build Coastguard Worker %inc = add nsw i32 %i.04, 8 409*9880d681SAndroid Build Coastguard Worker %cmp = icmp sle i32 %inc, %b 410*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %for.body, label %for.end 411*9880d681SAndroid Build Coastguard Worker 412*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %for.body, %entry 413*9880d681SAndroid Build Coastguard Worker ret void 414*9880d681SAndroid Build Coastguard Worker} 415*9880d681SAndroid Build Coastguard Worker 416*9880d681SAndroid Build Coastguard Worker 417*9880d681SAndroid Build Coastguard Worker 418*9880d681SAndroid Build Coastguard Worker; CHECK: test_pos16_rr_sle 419*9880d681SAndroid Build Coastguard Worker; FIXME: Support this loop! 420*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: bdnz 421*9880d681SAndroid Build Coastguard Worker; a < b 422*9880d681SAndroid Build Coastguard Workerdefine void @test_pos16_rr_sle(i8* nocapture %p, i32 %a, i32 %b) nounwind { 423*9880d681SAndroid Build Coastguard Workerentry: 424*9880d681SAndroid Build Coastguard Worker %cmp3 = icmp sle i32 %a, %b 425*9880d681SAndroid Build Coastguard Worker br i1 %cmp3, label %for.body.lr.ph, label %for.end 426*9880d681SAndroid Build Coastguard Worker 427*9880d681SAndroid Build Coastguard Workerfor.body.lr.ph: ; preds = %entry 428*9880d681SAndroid Build Coastguard Worker br label %for.body 429*9880d681SAndroid Build Coastguard Worker 430*9880d681SAndroid Build Coastguard Workerfor.body: ; preds = %for.body.lr.ph, %for.body 431*9880d681SAndroid Build Coastguard Worker %i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ] 432*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04 433*9880d681SAndroid Build Coastguard Worker %0 = load i8, i8* %arrayidx, align 1 434*9880d681SAndroid Build Coastguard Worker %conv = zext i8 %0 to i32 435*9880d681SAndroid Build Coastguard Worker %add = add nsw i32 %conv, 1 436*9880d681SAndroid Build Coastguard Worker %conv1 = trunc i32 %add to i8 437*9880d681SAndroid Build Coastguard Worker store i8 %conv1, i8* %arrayidx, align 1 438*9880d681SAndroid Build Coastguard Worker %inc = add nsw i32 %i.04, 16 439*9880d681SAndroid Build Coastguard Worker %cmp = icmp sle i32 %inc, %b 440*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %for.body, label %for.end 441*9880d681SAndroid Build Coastguard Worker 442*9880d681SAndroid Build Coastguard Workerfor.end: ; preds = %for.body, %entry 443*9880d681SAndroid Build Coastguard Worker ret void 444*9880d681SAndroid Build Coastguard Worker} 445