Skip to content

Commit ddb05e7

Browse files
committed
[SCEV][LoopUnroll] Add pre-commit tests. NFC.
1 parent 57a9088 commit ddb05e7

File tree

2 files changed

+78
-0
lines changed

2 files changed

+78
-0
lines changed

llvm/test/Analysis/ScalarEvolution/trip-count-unknown-stride.ll

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -493,6 +493,27 @@ for.end: ; preds = %for.body, %entry
493493
ret void
494494
}
495495

496+
define i32 @pr131465(i1 %x) mustprogress {
497+
; CHECK-LABEL: 'pr131465'
498+
; CHECK-NEXT: Determining loop execution counts for: @pr131465
499+
; CHECK-NEXT: Loop %for.body: backedge-taken count is ((-1 * (zext i1 %x to i32))<nuw><nsw> /u (zext i1 %x to i32))
500+
; CHECK-NEXT: Loop %for.body: constant max backedge-taken count is i32 -1
501+
; CHECK-NEXT: Loop %for.body: symbolic max backedge-taken count is ((-1 * (zext i1 %x to i32))<nuw><nsw> /u (zext i1 %x to i32))
502+
; CHECK-NEXT: Loop %for.body: Trip multiple is 1
503+
;
504+
entry:
505+
%inc = zext i1 %x to i32
506+
br label %for.body
507+
508+
for.body:
509+
%indvar = phi i32 [ 2, %entry ], [ %next, %for.body ]
510+
%next = add nsw i32 %indvar, %inc
511+
%exitcond = icmp eq i32 %next, 2
512+
br i1 %exitcond, label %for.end, label %for.body
513+
514+
for.end:
515+
ret i32 0
516+
}
496517

497518
declare void @llvm.assume(i1)
498519

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2+
; RUN: opt -S -passes=loop-unroll -unroll-runtime %s | FileCheck %s
3+
4+
define i32 @pr131465(i1 %x) mustprogress {
5+
; CHECK-LABEL: define i32 @pr131465(
6+
; CHECK-SAME: i1 [[X:%.*]]) #[[ATTR0:[0-9]+]] {
7+
; CHECK-NEXT: [[ENTRY:.*:]]
8+
; CHECK-NEXT: [[INC:%.*]] = zext i1 [[X]] to i32
9+
; CHECK-NEXT: [[TMP0:%.*]] = sub i32 0, [[INC]]
10+
; CHECK-NEXT: [[TMP1:%.*]] = udiv i32 [[TMP0]], [[INC]]
11+
; CHECK-NEXT: [[TMP2:%.*]] = add i32 [[TMP1]], 1
12+
; CHECK-NEXT: [[XTRAITER:%.*]] = and i32 [[TMP2]], 1
13+
; CHECK-NEXT: [[TMP3:%.*]] = icmp ult i32 [[TMP1]], 1
14+
; CHECK-NEXT: br i1 [[TMP3]], label %[[FOR_END_UNR_LCSSA:.*]], label %[[ENTRY_NEW:.*]]
15+
; CHECK: [[ENTRY_NEW]]:
16+
; CHECK-NEXT: [[UNROLL_ITER:%.*]] = sub i32 [[TMP2]], [[XTRAITER]]
17+
; CHECK-NEXT: br label %[[FOR_BODY:.*]]
18+
; CHECK: [[FOR_BODY]]:
19+
; CHECK-NEXT: [[INDVAR:%.*]] = phi i32 [ 2, %[[ENTRY_NEW]] ], [ [[NEXT_1:%.*]], %[[FOR_BODY]] ]
20+
; CHECK-NEXT: [[NITER:%.*]] = phi i32 [ 0, %[[ENTRY_NEW]] ], [ [[NITER_NEXT_1:%.*]], %[[FOR_BODY]] ]
21+
; CHECK-NEXT: [[NEXT:%.*]] = add nsw i32 [[INDVAR]], [[INC]]
22+
; CHECK-NEXT: [[NEXT_1]] = add nsw i32 [[NEXT]], [[INC]]
23+
; CHECK-NEXT: [[NITER_NEXT_1]] = add i32 [[NITER]], 2
24+
; CHECK-NEXT: [[NITER_NCMP_1:%.*]] = icmp eq i32 [[NITER_NEXT_1]], [[UNROLL_ITER]]
25+
; CHECK-NEXT: br i1 [[NITER_NCMP_1]], label %[[FOR_END_UNR_LCSSA_LOOPEXIT:.*]], label %[[FOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]
26+
; CHECK: [[FOR_END_UNR_LCSSA_LOOPEXIT]]:
27+
; CHECK-NEXT: br label %[[FOR_END_UNR_LCSSA]]
28+
; CHECK: [[FOR_END_UNR_LCSSA]]:
29+
; CHECK-NEXT: [[LCMP_MOD:%.*]] = icmp ne i32 [[XTRAITER]], 0
30+
; CHECK-NEXT: br i1 [[LCMP_MOD]], label %[[FOR_BODY_EPIL_PREHEADER:.*]], label %[[FOR_END:.*]]
31+
; CHECK: [[FOR_BODY_EPIL_PREHEADER]]:
32+
; CHECK-NEXT: br label %[[FOR_BODY_EPIL:.*]]
33+
; CHECK: [[FOR_BODY_EPIL]]:
34+
; CHECK-NEXT: br label %[[FOR_END]]
35+
; CHECK: [[FOR_END]]:
36+
; CHECK-NEXT: ret i32 0
37+
;
38+
entry:
39+
%inc = zext i1 %x to i32
40+
br label %for.body
41+
42+
for.body:
43+
%indvar = phi i32 [ 2, %entry ], [ %next, %for.body ]
44+
%next = add nsw i32 %indvar, %inc
45+
%exitcond = icmp eq i32 %next, 2
46+
br i1 %exitcond, label %for.end, label %for.body, !llvm.loop !0
47+
48+
for.end:
49+
ret i32 0
50+
}
51+
52+
; Force runtime unrolling.
53+
!0 = !{!0, !{!"llvm.loop.unroll.count", i32 2}}
54+
;.
55+
; CHECK: [[LOOP0]] = distinct !{[[LOOP0]], [[META1:![0-9]+]]}
56+
; CHECK: [[META1]] = !{!"llvm.loop.unroll.disable"}
57+
;.

0 commit comments

Comments
 (0)