@@ -188,3 +188,43 @@ loop:
188188exit:
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