Skip to content

Commit 87afc4a

Browse files
committed
ValueTracking: pre-commit tests for Div/Rem recurrence
1 parent 9fd15ad commit 87afc4a

File tree

1 file changed

+69
-0
lines changed

1 file changed

+69
-0
lines changed

llvm/test/Analysis/ValueTracking/recurrence-knownbits.ll

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,75 @@ exit:
8181
ret i64 %res
8282
}
8383

84+
define i64 @test_udiv(i1 %c) {
85+
; CHECK-LABEL: @test_udiv(
86+
; CHECK-NEXT: entry:
87+
; CHECK-NEXT: br label [[LOOP:%.*]]
88+
; CHECK: loop:
89+
; CHECK-NEXT: [[IV:%.*]] = phi i64 [ 9, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ]
90+
; CHECK-NEXT: [[IV_NEXT]] = udiv i64 [[IV]], 3
91+
; CHECK-NEXT: br i1 [[C:%.*]], label [[EXIT:%.*]], label [[LOOP]]
92+
; CHECK: exit:
93+
; CHECK-NEXT: [[RES:%.*]] = and i64 [[IV]], 16
94+
; CHECK-NEXT: ret i64 [[RES]]
95+
;
96+
entry:
97+
br label %loop
98+
loop:
99+
%iv = phi i64 [9, %entry], [%iv.next, %loop]
100+
%iv.next = udiv i64 %iv, 3
101+
br i1 %c, label %exit, label %loop
102+
exit:
103+
%res = and i64 %iv, 16
104+
ret i64 %res
105+
}
106+
107+
define i64 @test_udiv_neg(i1 %c) {
108+
; CHECK-LABEL: @test_udiv_neg(
109+
; CHECK-NEXT: entry:
110+
; CHECK-NEXT: br label [[LOOP:%.*]]
111+
; CHECK: loop:
112+
; CHECK-NEXT: [[IV:%.*]] = phi i64 [ 2, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ]
113+
; CHECK-NEXT: [[IV_NEXT]] = udiv i64 9, [[IV]]
114+
; CHECK-NEXT: br i1 [[C:%.*]], label [[EXIT:%.*]], label [[LOOP]]
115+
; CHECK: exit:
116+
; CHECK-NEXT: [[RES:%.*]] = and i64 [[IV]], 4
117+
; CHECK-NEXT: ret i64 [[RES]]
118+
;
119+
entry:
120+
br label %loop
121+
loop:
122+
%iv = phi i64 [2, %entry], [%iv.next, %loop]
123+
%iv.next = udiv i64 9, %iv
124+
br i1 %c, label %exit, label %loop
125+
exit:
126+
%res = and i64 %iv, 4
127+
ret i64 %res
128+
}
129+
130+
define i64 @test_urem(i1 %c) {
131+
; CHECK-LABEL: @test_urem(
132+
; CHECK-NEXT: entry:
133+
; CHECK-NEXT: br label [[LOOP:%.*]]
134+
; CHECK: loop:
135+
; CHECK-NEXT: [[IV:%.*]] = phi i64 [ 3, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ]
136+
; CHECK-NEXT: [[IV_NEXT]] = urem i64 9, [[IV]]
137+
; CHECK-NEXT: br i1 [[C:%.*]], label [[EXIT:%.*]], label [[LOOP]]
138+
; CHECK: exit:
139+
; CHECK-NEXT: [[RES:%.*]] = and i64 [[IV]], 4
140+
; CHECK-NEXT: ret i64 [[RES]]
141+
;
142+
entry:
143+
br label %loop
144+
loop:
145+
%iv = phi i64 [3, %entry], [%iv.next, %loop]
146+
%iv.next = urem i64 9, %iv
147+
br i1 %c, label %exit, label %loop
148+
exit:
149+
%res = and i64 %iv, 4
150+
ret i64 %res
151+
}
152+
84153
define i64 @test_and(i1 %c) {
85154
; CHECK-LABEL: @test_and(
86155
; CHECK-NEXT: entry:

0 commit comments

Comments
 (0)