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