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