xref: /llvm-project/llvm/test/Transforms/LoopUnroll/add-folding-overflow.ll (revision b9808e5660f5fe9e7414c0c0b93acd899235471c)
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