Skip to content

Commit 270f5e4

Browse files
committed
[LV] Add tests where uniform recipe gets predicated for scalable VFs.
Currently the tests crash, due to a VPReplicateRecipe getting predicated for scalable vectors. Precommits tests for #98892. Test cases for * #80416 and * #94328
1 parent a6b204b commit 270f5e4

File tree

1 file changed

+93
-0
lines changed

1 file changed

+93
-0
lines changed
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
; REQUIRES: asserts
2+
; RUN: not --crash opt -p loop-vectorize -mtriple aarch64 -mcpu=neoverse-v1 -S %s
3+
4+
; Test case for https://github.com/llvm/llvm-project/issues/94328.
5+
define void @sdiv_feeding_gep(ptr %dst, i32 %x, i64 %M, i64 %conv6, i64 %N) {
6+
entry:
7+
%conv61 = zext i32 %x to i64
8+
br label %loop
9+
10+
loop:
11+
%iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]
12+
%div18 = sdiv i64 %M, %conv6
13+
%conv20 = trunc i64 %div18 to i32
14+
%mul30 = mul i64 %div18, %conv61
15+
%sub31 = sub i64 %iv, %mul30
16+
%conv34 = trunc i64 %sub31 to i32
17+
%mul35 = mul i32 %x, %conv20
18+
%add36 = add i32 %mul35, %conv34
19+
%idxprom = sext i32 %add36 to i64
20+
%gep = getelementptr double, ptr %dst, i64 %idxprom
21+
store double 0.000000e+00, ptr %gep, align 8
22+
%iv.next = add i64 %iv, 1
23+
%ec = icmp eq i64 %iv.next, %N
24+
br i1 %ec, label %exit, label %loop
25+
26+
exit:
27+
ret void
28+
}
29+
30+
define void @sdiv_feeding_gep_predicated(ptr %dst, i32 %x, i64 %M, i64 %conv6, i64 %N) {
31+
entry:
32+
%conv61 = zext i32 %x to i64
33+
br label %loop
34+
35+
loop:
36+
%iv = phi i64 [ 0, %entry ], [ %iv.next, %loop.latch ]
37+
%c = icmp ule i64 %iv, %M
38+
br i1 %c, label %then, label %loop.latch
39+
40+
then:
41+
%div18 = sdiv i64 %M, %conv6
42+
%conv20 = trunc i64 %div18 to i32
43+
%mul30 = mul i64 %div18, %conv61
44+
%sub31 = sub i64 %iv, %mul30
45+
%conv34 = trunc i64 %sub31 to i32
46+
%mul35 = mul i32 %x, %conv20
47+
%add36 = add i32 %mul35, %conv34
48+
%idxprom = sext i32 %add36 to i64
49+
%gep = getelementptr double, ptr %dst, i64 %idxprom
50+
store double 0.000000e+00, ptr %gep, align 8
51+
br label %loop.latch
52+
53+
loop.latch:
54+
%iv.next = add i64 %iv, 1
55+
%ec = icmp eq i64 %iv.next, %N
56+
br i1 %ec, label %exit, label %loop
57+
58+
exit:
59+
ret void
60+
}
61+
62+
; Test case for https://github.com/llvm/llvm-project/issues/80416.
63+
define void @udiv_urem_feeding_gep(i64 %x, ptr %dst, i64 %N) {
64+
entry:
65+
%mul.1.i = mul i64 %x, %x
66+
%mul.2.i = mul i64 %mul.1.i, %x
67+
br label %loop
68+
69+
loop:
70+
%iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]
71+
%div.i = udiv i64 %iv, %mul.2.i
72+
%rem.i = urem i64 %iv, %mul.2.i
73+
%div.1.i = udiv i64 %rem.i, %mul.1.i
74+
%rem.1.i = urem i64 %rem.i, %mul.1.i
75+
%div.2.i = udiv i64 %rem.1.i, %x
76+
%rem.2.i = urem i64 %rem.1.i, %x
77+
%mul.i = mul i64 %x, %div.i
78+
%add.i = add i64 %mul.i, %div.1.i
79+
%mul.1.i9 = mul i64 %add.i, %x
80+
%add.1.i = add i64 %mul.1.i9, %div.2.i
81+
%mul.2.i11 = mul i64 %add.1.i, %x
82+
%add.2.i = add i64 %mul.2.i11, %rem.2.i
83+
%sext.i = shl i64 %add.2.i, 32
84+
%conv6.i = ashr i64 %sext.i, 32
85+
%gep = getelementptr i64, ptr %dst, i64 %conv6.i
86+
store i64 %div.i, ptr %gep, align 4
87+
%iv.next = add i64 %iv, 1
88+
%exitcond.not = icmp eq i64 %iv, %N
89+
br i1 %exitcond.not, label %exit, label %loop
90+
91+
exit:
92+
ret void
93+
}

0 commit comments

Comments
 (0)