1; RUN: llc -march=hexagon -mcpu=hexagonv5 -O3 < %s | FileCheck %s 2 3; CHECK-LABEL: f0: 4; CHECK: loop0 5; a < b 6define void @f0(i8* nocapture %a0, i32 %a1, i32 %a2) #0 { 7b0: 8 %v0 = icmp sle i32 28395, %a2 9 br i1 %v0, label %b1, label %b3 10 11b1: ; preds = %b0 12 br label %b2 13 14b2: ; preds = %b2, %b1 15 %v1 = phi i32 [ 28395, %b1 ], [ %v7, %b2 ] 16 %v2 = getelementptr inbounds i8, i8* %a0, i32 %v1 17 %v3 = load i8, i8* %v2, align 1 18 %v4 = zext i8 %v3 to i32 19 %v5 = add nsw i32 %v4, 1 20 %v6 = trunc i32 %v5 to i8 21 store i8 %v6, i8* %v2, align 1 22 %v7 = add nsw i32 %v1, 1 23 %v8 = icmp sle i32 %v7, %a2 24 br i1 %v8, label %b2, label %b3 25 26b3: ; preds = %b2, %b0 27 ret void 28} 29 30; CHECK-LABEL: f1: 31; CHECK: loop0 32; a < b 33define void @f1(i8* nocapture %a0, i32 %a1, i32 %a2) #0 { 34b0: 35 %v0 = icmp sle i32 9073, %a2 36 br i1 %v0, label %b1, label %b3 37 38b1: ; preds = %b0 39 br label %b2 40 41b2: ; preds = %b2, %b1 42 %v1 = phi i32 [ 9073, %b1 ], [ %v7, %b2 ] 43 %v2 = getelementptr inbounds i8, i8* %a0, i32 %v1 44 %v3 = load i8, i8* %v2, align 1 45 %v4 = zext i8 %v3 to i32 46 %v5 = add nsw i32 %v4, 1 47 %v6 = trunc i32 %v5 to i8 48 store i8 %v6, i8* %v2, align 1 49 %v7 = add nsw i32 %v1, 2 50 %v8 = icmp sle i32 %v7, %a2 51 br i1 %v8, label %b2, label %b3 52 53b3: ; preds = %b2, %b0 54 ret void 55} 56 57; CHECK-LABEL: f2: 58; CHECK: loop0 59; a < b 60define void @f2(i8* nocapture %a0, i32 %a1, i32 %a2) #0 { 61b0: 62 %v0 = icmp sle i32 21956, %a2 63 br i1 %v0, label %b1, label %b3 64 65b1: ; preds = %b0 66 br label %b2 67 68b2: ; preds = %b2, %b1 69 %v1 = phi i32 [ 21956, %b1 ], [ %v7, %b2 ] 70 %v2 = getelementptr inbounds i8, i8* %a0, i32 %v1 71 %v3 = load i8, i8* %v2, align 1 72 %v4 = zext i8 %v3 to i32 73 %v5 = add nsw i32 %v4, 1 74 %v6 = trunc i32 %v5 to i8 75 store i8 %v6, i8* %v2, align 1 76 %v7 = add nsw i32 %v1, 4 77 %v8 = icmp sle i32 %v7, %a2 78 br i1 %v8, label %b2, label %b3 79 80b3: ; preds = %b2, %b0 81 ret void 82} 83 84; CHECK-LABEL: f3: 85; CHECK: loop0 86; a < b 87define void @f3(i8* nocapture %a0, i32 %a1, i32 %a2) #0 { 88b0: 89 %v0 = icmp sle i32 16782, %a2 90 br i1 %v0, label %b1, label %b3 91 92b1: ; preds = %b0 93 br label %b2 94 95b2: ; preds = %b2, %b1 96 %v1 = phi i32 [ 16782, %b1 ], [ %v7, %b2 ] 97 %v2 = getelementptr inbounds i8, i8* %a0, i32 %v1 98 %v3 = load i8, i8* %v2, align 1 99 %v4 = zext i8 %v3 to i32 100 %v5 = add nsw i32 %v4, 1 101 %v6 = trunc i32 %v5 to i8 102 store i8 %v6, i8* %v2, align 1 103 %v7 = add nsw i32 %v1, 8 104 %v8 = icmp sle i32 %v7, %a2 105 br i1 %v8, label %b2, label %b3 106 107b3: ; preds = %b2, %b0 108 ret void 109} 110 111; CHECK-LABEL: f4: 112; CHECK: loop0 113; a < b 114define void @f4(i8* nocapture %a0, i32 %a1, i32 %a2) #0 { 115b0: 116 %v0 = icmp sle i32 19097, %a2 117 br i1 %v0, label %b1, label %b3 118 119b1: ; preds = %b0 120 br label %b2 121 122b2: ; preds = %b2, %b1 123 %v1 = phi i32 [ 19097, %b1 ], [ %v7, %b2 ] 124 %v2 = getelementptr inbounds i8, i8* %a0, i32 %v1 125 %v3 = load i8, i8* %v2, align 1 126 %v4 = zext i8 %v3 to i32 127 %v5 = add nsw i32 %v4, 1 128 %v6 = trunc i32 %v5 to i8 129 store i8 %v6, i8* %v2, align 1 130 %v7 = add nsw i32 %v1, 16 131 %v8 = icmp sle i32 %v7, %a2 132 br i1 %v8, label %b2, label %b3 133 134b3: ; preds = %b2, %b0 135 ret void 136} 137 138; CHECK-LABEL: f5: 139; CHECK: loop0 140; a < b 141define void @f5(i8* nocapture %a0, i32 %a1, i32 %a2) #0 { 142b0: 143 %v0 = icmp sle i32 %a1, 14040 144 br i1 %v0, label %b1, label %b3 145 146b1: ; preds = %b0 147 br label %b2 148 149b2: ; preds = %b2, %b1 150 %v1 = phi i32 [ %a1, %b1 ], [ %v7, %b2 ] 151 %v2 = getelementptr inbounds i8, i8* %a0, i32 %v1 152 %v3 = load i8, i8* %v2, align 1 153 %v4 = zext i8 %v3 to i32 154 %v5 = add nsw i32 %v4, 1 155 %v6 = trunc i32 %v5 to i8 156 store i8 %v6, i8* %v2, align 1 157 %v7 = add nsw i32 %v1, 1 158 %v8 = icmp sle i32 %v7, 14040 159 br i1 %v8, label %b2, label %b3 160 161b3: ; preds = %b2, %b0 162 ret void 163} 164 165; CHECK-LABEL: f6: 166; CHECK: loop0 167; a < b 168define void @f6(i8* nocapture %a0, i32 %a1, i32 %a2) #0 { 169b0: 170 %v0 = icmp sle i32 %a1, 13710 171 br i1 %v0, label %b1, label %b3 172 173b1: ; preds = %b0 174 br label %b2 175 176b2: ; preds = %b2, %b1 177 %v1 = phi i32 [ %a1, %b1 ], [ %v7, %b2 ] 178 %v2 = getelementptr inbounds i8, i8* %a0, i32 %v1 179 %v3 = load i8, i8* %v2, align 1 180 %v4 = zext i8 %v3 to i32 181 %v5 = add nsw i32 %v4, 1 182 %v6 = trunc i32 %v5 to i8 183 store i8 %v6, i8* %v2, align 1 184 %v7 = add nsw i32 %v1, 2 185 %v8 = icmp sle i32 %v7, 13710 186 br i1 %v8, label %b2, label %b3 187 188b3: ; preds = %b2, %b0 189 ret void 190} 191 192; CHECK-LABEL: f7: 193; CHECK: loop0 194; a < b 195define void @f7(i8* nocapture %a0, i32 %a1, i32 %a2) #0 { 196b0: 197 %v0 = icmp sle i32 %a1, 9920 198 br i1 %v0, label %b1, label %b3 199 200b1: ; preds = %b0 201 br label %b2 202 203b2: ; preds = %b2, %b1 204 %v1 = phi i32 [ %a1, %b1 ], [ %v7, %b2 ] 205 %v2 = getelementptr inbounds i8, i8* %a0, i32 %v1 206 %v3 = load i8, i8* %v2, align 1 207 %v4 = zext i8 %v3 to i32 208 %v5 = add nsw i32 %v4, 1 209 %v6 = trunc i32 %v5 to i8 210 store i8 %v6, i8* %v2, align 1 211 %v7 = add nsw i32 %v1, 4 212 %v8 = icmp sle i32 %v7, 9920 213 br i1 %v8, label %b2, label %b3 214 215b3: ; preds = %b2, %b0 216 ret void 217} 218 219; CHECK-LABEL: f8: 220; CHECK: loop0 221; a < b 222define void @f8(i8* nocapture %a0, i32 %a1, i32 %a2) #0 { 223b0: 224 %v0 = icmp sle i32 %a1, 18924 225 br i1 %v0, label %b1, label %b3 226 227b1: ; preds = %b0 228 br label %b2 229 230b2: ; preds = %b2, %b1 231 %v1 = phi i32 [ %a1, %b1 ], [ %v7, %b2 ] 232 %v2 = getelementptr inbounds i8, i8* %a0, i32 %v1 233 %v3 = load i8, i8* %v2, align 1 234 %v4 = zext i8 %v3 to i32 235 %v5 = add nsw i32 %v4, 1 236 %v6 = trunc i32 %v5 to i8 237 store i8 %v6, i8* %v2, align 1 238 %v7 = add nsw i32 %v1, 8 239 %v8 = icmp sle i32 %v7, 18924 240 br i1 %v8, label %b2, label %b3 241 242b3: ; preds = %b2, %b0 243 ret void 244} 245 246; CHECK-LABEL: f9: 247; CHECK: loop0 248; a < b 249define void @f9(i8* nocapture %a0, i32 %a1, i32 %a2) #0 { 250b0: 251 %v0 = icmp sle i32 %a1, 11812 252 br i1 %v0, label %b1, label %b3 253 254b1: ; preds = %b0 255 br label %b2 256 257b2: ; preds = %b2, %b1 258 %v1 = phi i32 [ %a1, %b1 ], [ %v7, %b2 ] 259 %v2 = getelementptr inbounds i8, i8* %a0, i32 %v1 260 %v3 = load i8, i8* %v2, align 1 261 %v4 = zext i8 %v3 to i32 262 %v5 = add nsw i32 %v4, 1 263 %v6 = trunc i32 %v5 to i8 264 store i8 %v6, i8* %v2, align 1 265 %v7 = add nsw i32 %v1, 16 266 %v8 = icmp sle i32 %v7, 11812 267 br i1 %v8, label %b2, label %b3 268 269b3: ; preds = %b2, %b0 270 ret void 271} 272 273; CHECK-LABEL: f10: 274; CHECK: loop0 275; a < b 276define void @f10(i8* nocapture %a0, i32 %a1, i32 %a2) #0 { 277b0: 278 %v0 = icmp sle i32 %a1, %a2 279 br i1 %v0, label %b1, label %b3 280 281b1: ; preds = %b0 282 br label %b2 283 284b2: ; preds = %b2, %b1 285 %v1 = phi i32 [ %a1, %b1 ], [ %v7, %b2 ] 286 %v2 = getelementptr inbounds i8, i8* %a0, i32 %v1 287 %v3 = load i8, i8* %v2, align 1 288 %v4 = zext i8 %v3 to i32 289 %v5 = add nsw i32 %v4, 1 290 %v6 = trunc i32 %v5 to i8 291 store i8 %v6, i8* %v2, align 1 292 %v7 = add nsw i32 %v1, 1 293 %v8 = icmp sle i32 %v7, %a2 294 br i1 %v8, label %b2, label %b3 295 296b3: ; preds = %b2, %b0 297 ret void 298} 299 300; CHECK-LABEL: f11: 301; CHECK: loop0 302; a < b 303define void @f11(i8* nocapture %a0, i32 %a1, i32 %a2) #0 { 304b0: 305 %v0 = icmp sle i32 %a1, %a2 306 br i1 %v0, label %b1, label %b3 307 308b1: ; preds = %b0 309 br label %b2 310 311b2: ; preds = %b2, %b1 312 %v1 = phi i32 [ %a1, %b1 ], [ %v7, %b2 ] 313 %v2 = getelementptr inbounds i8, i8* %a0, i32 %v1 314 %v3 = load i8, i8* %v2, align 1 315 %v4 = zext i8 %v3 to i32 316 %v5 = add nsw i32 %v4, 1 317 %v6 = trunc i32 %v5 to i8 318 store i8 %v6, i8* %v2, align 1 319 %v7 = add nsw i32 %v1, 2 320 %v8 = icmp sle i32 %v7, %a2 321 br i1 %v8, label %b2, label %b3 322 323b3: ; preds = %b2, %b0 324 ret void 325} 326 327; CHECK-LABEL: f12: 328; CHECK: loop0 329; a < b 330define void @f12(i8* nocapture %a0, i32 %a1, i32 %a2) #0 { 331b0: 332 %v0 = icmp sle i32 %a1, %a2 333 br i1 %v0, label %b1, label %b3 334 335b1: ; preds = %b0 336 br label %b2 337 338b2: ; preds = %b2, %b1 339 %v1 = phi i32 [ %a1, %b1 ], [ %v7, %b2 ] 340 %v2 = getelementptr inbounds i8, i8* %a0, i32 %v1 341 %v3 = load i8, i8* %v2, align 1 342 %v4 = zext i8 %v3 to i32 343 %v5 = add nsw i32 %v4, 1 344 %v6 = trunc i32 %v5 to i8 345 store i8 %v6, i8* %v2, align 1 346 %v7 = add nsw i32 %v1, 4 347 %v8 = icmp sle i32 %v7, %a2 348 br i1 %v8, label %b2, label %b3 349 350b3: ; preds = %b2, %b0 351 ret void 352} 353 354; CHECK-LABEL: f13: 355; CHECK: loop0 356; a < b 357define void @f13(i8* nocapture %a0, i32 %a1, i32 %a2) #0 { 358b0: 359 %v0 = icmp sle i32 %a1, %a2 360 br i1 %v0, label %b1, label %b3 361 362b1: ; preds = %b0 363 br label %b2 364 365b2: ; preds = %b2, %b1 366 %v1 = phi i32 [ %a1, %b1 ], [ %v7, %b2 ] 367 %v2 = getelementptr inbounds i8, i8* %a0, i32 %v1 368 %v3 = load i8, i8* %v2, align 1 369 %v4 = zext i8 %v3 to i32 370 %v5 = add nsw i32 %v4, 1 371 %v6 = trunc i32 %v5 to i8 372 store i8 %v6, i8* %v2, align 1 373 %v7 = add nsw i32 %v1, 8 374 %v8 = icmp sle i32 %v7, %a2 375 br i1 %v8, label %b2, label %b3 376 377b3: ; preds = %b2, %b0 378 ret void 379} 380 381; CHECK-LABEL: f14: 382; CHECK: loop0 383; a < b 384define void @f14(i8* nocapture %a0, i32 %a1, i32 %a2) #0 { 385b0: 386 %v0 = icmp sle i32 %a1, %a2 387 br i1 %v0, label %b1, label %b3 388 389b1: ; preds = %b0 390 br label %b2 391 392b2: ; preds = %b2, %b1 393 %v1 = phi i32 [ %a1, %b1 ], [ %v7, %b2 ] 394 %v2 = getelementptr inbounds i8, i8* %a0, i32 %v1 395 %v3 = load i8, i8* %v2, align 1 396 %v4 = zext i8 %v3 to i32 397 %v5 = add nsw i32 %v4, 1 398 %v6 = trunc i32 %v5 to i8 399 store i8 %v6, i8* %v2, align 1 400 %v7 = add nsw i32 %v1, 16 401 %v8 = icmp sle i32 %v7, %a2 402 br i1 %v8, label %b2, label %b3 403 404b3: ; preds = %b2, %b0 405 ret void 406} 407 408attributes #0 = { nounwind "target-cpu"="hexagonv5" } 409