Skip to content

Commit 0c9a4b1

Browse files
Add test showing missing SCEVUDiv fold.
1 parent cf50bbf commit 0c9a4b1

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

llvm/test/Analysis/ScalarEvolution/mul-udiv-folds.ll

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,3 +188,43 @@ loop:
188188
exit:
189189
ret void
190190
}
191+
192+
define noundef i64 @udiv_mul_common_vscale_factor(i64 %a, i64 %b) {
193+
; CHECK-LABEL: 'udiv_mul_common_vscale_factor'
194+
; CHECK-NEXT: Classifying expressions for: @udiv_mul_common_vscale_factor
195+
; CHECK-NEXT: %vs = call i64 @llvm.vscale.i64()
196+
; CHECK-NEXT: --> vscale U: [1,0) S: [1,0)
197+
; CHECK-NEXT: %a.vs = mul i64 %a, %vs
198+
; CHECK-NEXT: --> (vscale * %a) U: full-set S: full-set
199+
; CHECK-NEXT: %b.vs = mul i64 %b, %vs
200+
; CHECK-NEXT: --> (vscale * %b) U: full-set S: full-set
201+
; CHECK-NEXT: %div = udiv i64 %a.vs, %b.vs
202+
; CHECK-NEXT: --> ((vscale * %a) /u (vscale * %b)) U: full-set S: full-set
203+
; CHECK-NEXT: Determining loop execution counts for: @udiv_mul_common_vscale_factor
204+
;
205+
%vs = call i64 @llvm.vscale()
206+
%a.vs = mul i64 %a, %vs
207+
%b.vs = mul i64 %b, %vs
208+
%div = udiv i64 %a.vs, %b.vs
209+
ret i64 %div
210+
}
211+
212+
define noundef i64 @udiv_mul_nuw_common_vscale_factor(i64 %a, i64 %b) {
213+
; CHECK-LABEL: 'udiv_mul_nuw_common_vscale_factor'
214+
; CHECK-NEXT: Classifying expressions for: @udiv_mul_nuw_common_vscale_factor
215+
; CHECK-NEXT: %vs = call i64 @llvm.vscale.i64()
216+
; CHECK-NEXT: --> vscale U: [1,0) S: [1,0)
217+
; CHECK-NEXT: %a.vs = mul nuw i64 %a, %vs
218+
; CHECK-NEXT: --> (vscale * %a)<nuw> U: full-set S: full-set
219+
; CHECK-NEXT: %b.vs = mul nuw i64 %b, %vs
220+
; CHECK-NEXT: --> (vscale * %b)<nuw> U: full-set S: full-set
221+
; CHECK-NEXT: %div = udiv i64 %a.vs, %b.vs
222+
; CHECK-NEXT: --> ((vscale * %a)<nuw> /u (vscale * %b)<nuw>) U: full-set S: full-set
223+
; CHECK-NEXT: Determining loop execution counts for: @udiv_mul_nuw_common_vscale_factor
224+
;
225+
%vs = call i64 @llvm.vscale()
226+
%a.vs = mul nuw i64 %a, %vs
227+
%b.vs = mul nuw i64 %b, %vs
228+
%div = udiv i64 %a.vs, %b.vs
229+
ret i64 %div
230+
}

0 commit comments

Comments
 (0)