17905c48aSNikita Popov; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2 27905c48aSNikita Popov; RUN: opt -S -passes=loop-unroll -unroll-allow-partial < %s | FileCheck %s 37905c48aSNikita Popov 47905c48aSNikita Popovdeclare void @use(i8) 57905c48aSNikita Popov 67905c48aSNikita Popovdefine void @test(i8 %start1, i8 %start2, i8 %start3, i8 %start4) { 77905c48aSNikita Popov; CHECK-LABEL: define void @test 87905c48aSNikita Popov; CHECK-SAME: (i8 [[START1:%.*]], i8 [[START2:%.*]], i8 [[START3:%.*]], i8 [[START4:%.*]]) { 97905c48aSNikita Popov; CHECK-NEXT: entry: 107905c48aSNikita Popov; CHECK-NEXT: br label [[LOOP:%.*]] 117905c48aSNikita Popov; CHECK: loop: 127905c48aSNikita Popov; CHECK-NEXT: [[IV:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[IV_NEXT_4:%.*]], [[LOOP]] ] 137905c48aSNikita Popov; CHECK-NEXT: [[IV1:%.*]] = phi i8 [ [[START1]], [[ENTRY]] ], [ [[IV1_NEXT_4:%.*]], [[LOOP]] ] 147905c48aSNikita Popov; CHECK-NEXT: [[IV2:%.*]] = phi i8 [ [[START2]], [[ENTRY]] ], [ [[IV2_NEXT_4:%.*]], [[LOOP]] ] 157905c48aSNikita Popov; CHECK-NEXT: [[IV3:%.*]] = phi i8 [ [[START3]], [[ENTRY]] ], [ [[IV3_NEXT_4:%.*]], [[LOOP]] ] 167905c48aSNikita Popov; CHECK-NEXT: [[IV4:%.*]] = phi i8 [ [[START4]], [[ENTRY]] ], [ [[IV4_NEXT_4:%.*]], [[LOOP]] ] 177905c48aSNikita Popov; CHECK-NEXT: [[IV1_NEXT:%.*]] = add i8 [[IV1]], 1 187905c48aSNikita Popov; CHECK-NEXT: call void @use(i8 [[IV1_NEXT]]) 197905c48aSNikita Popov; CHECK-NEXT: [[IV2_NEXT:%.*]] = add nuw i8 [[IV2]], 1 207905c48aSNikita Popov; CHECK-NEXT: call void @use(i8 [[IV2_NEXT]]) 217905c48aSNikita Popov; CHECK-NEXT: [[IV3_NEXT:%.*]] = add nsw i8 [[IV3]], 1 227905c48aSNikita Popov; CHECK-NEXT: call void @use(i8 [[IV3_NEXT]]) 237905c48aSNikita Popov; CHECK-NEXT: [[IV4_NEXT:%.*]] = add nsw i8 [[IV4]], 127 247905c48aSNikita Popov; CHECK-NEXT: call void @use(i8 [[IV4_NEXT]]) 25*b9808e56SNikita Popov; CHECK-NEXT: [[IV1_NEXT_1:%.*]] = add i8 [[IV1]], 2 267905c48aSNikita Popov; CHECK-NEXT: call void @use(i8 [[IV1_NEXT_1]]) 27*b9808e56SNikita Popov; CHECK-NEXT: [[IV2_NEXT_1:%.*]] = add nuw i8 [[IV2]], 2 287905c48aSNikita Popov; CHECK-NEXT: call void @use(i8 [[IV2_NEXT_1]]) 29*b9808e56SNikita Popov; CHECK-NEXT: [[IV3_NEXT_1:%.*]] = add nsw i8 [[IV3]], 2 307905c48aSNikita Popov; CHECK-NEXT: call void @use(i8 [[IV3_NEXT_1]]) 31*b9808e56SNikita Popov; CHECK-NEXT: [[IV4_NEXT_1:%.*]] = add i8 [[IV4]], -2 327905c48aSNikita Popov; CHECK-NEXT: call void @use(i8 [[IV4_NEXT_1]]) 33*b9808e56SNikita Popov; CHECK-NEXT: [[IV1_NEXT_2:%.*]] = add i8 [[IV1]], 3 347905c48aSNikita Popov; CHECK-NEXT: call void @use(i8 [[IV1_NEXT_2]]) 35*b9808e56SNikita Popov; CHECK-NEXT: [[IV2_NEXT_2:%.*]] = add nuw i8 [[IV2]], 3 367905c48aSNikita Popov; CHECK-NEXT: call void @use(i8 [[IV2_NEXT_2]]) 37*b9808e56SNikita Popov; CHECK-NEXT: [[IV3_NEXT_2:%.*]] = add nsw i8 [[IV3]], 3 387905c48aSNikita Popov; CHECK-NEXT: call void @use(i8 [[IV3_NEXT_2]]) 39*b9808e56SNikita Popov; CHECK-NEXT: [[IV4_NEXT_2:%.*]] = add i8 [[IV4]], 125 407905c48aSNikita Popov; CHECK-NEXT: call void @use(i8 [[IV4_NEXT_2]]) 41*b9808e56SNikita Popov; CHECK-NEXT: [[IV1_NEXT_3:%.*]] = add i8 [[IV1]], 4 427905c48aSNikita Popov; CHECK-NEXT: call void @use(i8 [[IV1_NEXT_3]]) 43*b9808e56SNikita Popov; CHECK-NEXT: [[IV2_NEXT_3:%.*]] = add nuw i8 [[IV2]], 4 447905c48aSNikita Popov; CHECK-NEXT: call void @use(i8 [[IV2_NEXT_3]]) 45*b9808e56SNikita Popov; CHECK-NEXT: [[IV3_NEXT_3:%.*]] = add nsw i8 [[IV3]], 4 467905c48aSNikita Popov; CHECK-NEXT: call void @use(i8 [[IV3_NEXT_3]]) 47*b9808e56SNikita Popov; CHECK-NEXT: [[IV4_NEXT_3:%.*]] = add i8 [[IV4]], -4 487905c48aSNikita Popov; CHECK-NEXT: call void @use(i8 [[IV4_NEXT_3]]) 49*b9808e56SNikita Popov; CHECK-NEXT: [[IV_NEXT_3:%.*]] = add nuw nsw i32 [[IV]], 4 50*b9808e56SNikita Popov; CHECK-NEXT: [[IV1_NEXT_4]] = add i8 [[IV1]], 5 517905c48aSNikita Popov; CHECK-NEXT: call void @use(i8 [[IV1_NEXT_4]]) 52*b9808e56SNikita Popov; CHECK-NEXT: [[IV2_NEXT_4]] = add nuw i8 [[IV2]], 5 537905c48aSNikita Popov; CHECK-NEXT: call void @use(i8 [[IV2_NEXT_4]]) 54*b9808e56SNikita Popov; CHECK-NEXT: [[IV3_NEXT_4]] = add nsw i8 [[IV3]], 5 557905c48aSNikita Popov; CHECK-NEXT: call void @use(i8 [[IV3_NEXT_4]]) 56*b9808e56SNikita Popov; CHECK-NEXT: [[IV4_NEXT_4]] = add i8 [[IV4]], 123 577905c48aSNikita Popov; CHECK-NEXT: call void @use(i8 [[IV4_NEXT_4]]) 58*b9808e56SNikita Popov; CHECK-NEXT: [[IV_NEXT_4]] = add nuw nsw i32 [[IV]], 5 597905c48aSNikita Popov; CHECK-NEXT: [[CMP_4:%.*]] = icmp eq i32 [[IV_NEXT_3]], 1024 607905c48aSNikita Popov; CHECK-NEXT: br i1 [[CMP_4]], label [[EXIT:%.*]], label [[LOOP]] 617905c48aSNikita Popov; CHECK: exit: 627905c48aSNikita Popov; CHECK-NEXT: ret void 637905c48aSNikita Popov; 647905c48aSNikita Popoventry: 657905c48aSNikita Popov br label %loop 667905c48aSNikita Popov 677905c48aSNikita Popovloop: 687905c48aSNikita Popov %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ] 697905c48aSNikita Popov %iv1 = phi i8 [ %start1, %entry ], [ %iv1.next, %loop ] 707905c48aSNikita Popov %iv2 = phi i8 [ %start2, %entry ], [ %iv2.next, %loop ] 717905c48aSNikita Popov %iv3 = phi i8 [ %start3, %entry ], [ %iv3.next, %loop ] 727905c48aSNikita Popov %iv4 = phi i8 [ %start4, %entry ], [ %iv4.next, %loop ] 737905c48aSNikita Popov %iv1.next = add i8 %iv1, 1 747905c48aSNikita Popov call void @use(i8 %iv1.next) 757905c48aSNikita Popov %iv2.next = add nuw i8 %iv2, 1 767905c48aSNikita Popov call void @use(i8 %iv2.next) 777905c48aSNikita Popov %iv3.next = add nsw i8 %iv3, 1 787905c48aSNikita Popov call void @use(i8 %iv3.next) 797905c48aSNikita Popov %iv4.next = add nsw i8 %iv4, 127 807905c48aSNikita Popov call void @use(i8 %iv4.next) 817905c48aSNikita Popov %iv.next = add i32 %iv, 1 827905c48aSNikita Popov %cmp = icmp eq i32 %iv, 1024 837905c48aSNikita Popov br i1 %cmp, label %exit, label %loop 847905c48aSNikita Popov 857905c48aSNikita Popovexit: 867905c48aSNikita Popov ret void 877905c48aSNikita Popov} 88