Skip to content

Commit ad0de4e

Browse files
committed
[SLP][NFC]Add extra test for udiv/urem instructions.
1 parent 4daf86e commit ad0de4e

File tree

1 file changed

+108
-0
lines changed

1 file changed

+108
-0
lines changed

llvm/test/Transforms/SLPVectorizer/X86/reorder-possible-strided-node.ll

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,3 +108,111 @@ entry:
108108
store i32 %conv27, ptr getelementptr inbounds ([4 x i32], ptr null, i64 8, i64 3), align 4
109109
ret void
110110
}
111+
112+
define void @test_div() {
113+
; CHECK-LABEL: define void @test_div(
114+
; CHECK-SAME: ) #[[ATTR0]] {
115+
; CHECK-NEXT: entry:
116+
; CHECK-NEXT: [[ARRAYIDX22:%.*]] = getelementptr i32, ptr null, i64 60
117+
; CHECK-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.masked.gather.v4i32.v4p0(<4 x ptr> getelementptr (i32, <4 x ptr> zeroinitializer, <4 x i64> <i64 1, i64 33, i64 7, i64 0>), i32 4, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i32> poison)
118+
; CHECK-NEXT: [[TMP1:%.*]] = load <4 x i32>, ptr [[ARRAYIDX22]], align 4
119+
; CHECK-NEXT: [[TMP2:%.*]] = shufflevector <4 x i32> [[TMP1]], <4 x i32> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
120+
; CHECK-NEXT: [[TMP3:%.*]] = mul <4 x i32> [[TMP2]], [[TMP0]]
121+
; CHECK-NEXT: [[TMP4:%.*]] = zext <4 x i32> [[TMP3]] to <4 x i64>
122+
; CHECK-NEXT: [[TMP5:%.*]] = udiv <4 x i64> [[TMP4]], <i64 1, i64 2, i64 1, i64 2>
123+
; CHECK-NEXT: [[TMP6:%.*]] = trunc <4 x i64> [[TMP5]] to <4 x i32>
124+
; CHECK-NEXT: store <4 x i32> [[TMP6]], ptr getelementptr inbounds ([4 x i32], ptr null, i64 8, i64 0), align 16
125+
; CHECK-NEXT: ret void
126+
;
127+
entry:
128+
%arrayidx1 = getelementptr i32, ptr null, i64 1
129+
%0 = load i32, ptr %arrayidx1, align 4
130+
%arrayidx2 = getelementptr i32, ptr null, i64 63
131+
%1 = load i32, ptr %arrayidx2, align 4
132+
%mul = mul i32 %1, %0
133+
%conv = zext i32 %mul to i64
134+
%shr = udiv i64 %conv, 1
135+
%conv3 = trunc i64 %shr to i32
136+
store i32 %conv3, ptr getelementptr inbounds ([4 x i32], ptr null, i64 8, i64 0), align 16
137+
%arrayidx5 = getelementptr i32, ptr null, i64 33
138+
%2 = load i32, ptr %arrayidx5, align 4
139+
%arrayidx6 = getelementptr i32, ptr null, i64 62
140+
%3 = load i32, ptr %arrayidx6, align 4
141+
%mul7 = mul i32 %3, %2
142+
%conv8 = zext i32 %mul7 to i64
143+
%shr10 = udiv i64 %conv8, 2
144+
%conv11 = trunc i64 %shr10 to i32
145+
store i32 %conv11, ptr getelementptr inbounds ([4 x i32], ptr null, i64 8, i64 1), align 4
146+
%arrayidx13 = getelementptr i32, ptr null, i64 7
147+
%4 = load i32, ptr %arrayidx13, align 4
148+
%arrayidx14 = getelementptr i32, ptr null, i64 61
149+
%5 = load i32, ptr %arrayidx14, align 4
150+
%mul15 = mul i32 %5, %4
151+
%conv16 = zext i32 %mul15 to i64
152+
%shr18 = udiv i64 %conv16, 1
153+
%conv19 = trunc i64 %shr18 to i32
154+
store i32 %conv19, ptr getelementptr inbounds ([4 x i32], ptr null, i64 8, i64 2), align 8
155+
%6 = load i32, ptr null, align 4
156+
%arrayidx22 = getelementptr i32, ptr null, i64 60
157+
%7 = load i32, ptr %arrayidx22, align 4
158+
%mul23 = mul i32 %7, %6
159+
%conv24 = zext i32 %mul23 to i64
160+
%shr26 = udiv i64 %conv24, 2
161+
%conv27 = trunc i64 %shr26 to i32
162+
store i32 %conv27, ptr getelementptr inbounds ([4 x i32], ptr null, i64 8, i64 3), align 4
163+
ret void
164+
}
165+
166+
define void @test_rem() {
167+
; CHECK-LABEL: define void @test_rem(
168+
; CHECK-SAME: ) #[[ATTR0]] {
169+
; CHECK-NEXT: entry:
170+
; CHECK-NEXT: [[ARRAYIDX22:%.*]] = getelementptr i32, ptr null, i64 60
171+
; CHECK-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.masked.gather.v4i32.v4p0(<4 x ptr> getelementptr (i32, <4 x ptr> zeroinitializer, <4 x i64> <i64 1, i64 33, i64 7, i64 0>), i32 4, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i32> poison)
172+
; CHECK-NEXT: [[TMP1:%.*]] = load <4 x i32>, ptr [[ARRAYIDX22]], align 4
173+
; CHECK-NEXT: [[TMP2:%.*]] = shufflevector <4 x i32> [[TMP1]], <4 x i32> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
174+
; CHECK-NEXT: [[TMP3:%.*]] = mul <4 x i32> [[TMP2]], [[TMP0]]
175+
; CHECK-NEXT: [[TMP4:%.*]] = zext <4 x i32> [[TMP3]] to <4 x i64>
176+
; CHECK-NEXT: [[TMP5:%.*]] = urem <4 x i64> [[TMP4]], <i64 1, i64 2, i64 1, i64 1>
177+
; CHECK-NEXT: [[TMP6:%.*]] = trunc <4 x i64> [[TMP5]] to <4 x i32>
178+
; CHECK-NEXT: store <4 x i32> [[TMP6]], ptr getelementptr inbounds ([4 x i32], ptr null, i64 8, i64 0), align 16
179+
; CHECK-NEXT: ret void
180+
;
181+
entry:
182+
%arrayidx1 = getelementptr i32, ptr null, i64 1
183+
%0 = load i32, ptr %arrayidx1, align 4
184+
%arrayidx2 = getelementptr i32, ptr null, i64 63
185+
%1 = load i32, ptr %arrayidx2, align 4
186+
%mul = mul i32 %1, %0
187+
%conv = zext i32 %mul to i64
188+
%shr = urem i64 %conv, 1
189+
%conv3 = trunc i64 %shr to i32
190+
store i32 %conv3, ptr getelementptr inbounds ([4 x i32], ptr null, i64 8, i64 0), align 16
191+
%arrayidx5 = getelementptr i32, ptr null, i64 33
192+
%2 = load i32, ptr %arrayidx5, align 4
193+
%arrayidx6 = getelementptr i32, ptr null, i64 62
194+
%3 = load i32, ptr %arrayidx6, align 4
195+
%mul7 = mul i32 %3, %2
196+
%conv8 = zext i32 %mul7 to i64
197+
%shr10 = urem i64 %conv8, 2
198+
%conv11 = trunc i64 %shr10 to i32
199+
store i32 %conv11, ptr getelementptr inbounds ([4 x i32], ptr null, i64 8, i64 1), align 4
200+
%arrayidx13 = getelementptr i32, ptr null, i64 7
201+
%4 = load i32, ptr %arrayidx13, align 4
202+
%arrayidx14 = getelementptr i32, ptr null, i64 61
203+
%5 = load i32, ptr %arrayidx14, align 4
204+
%mul15 = mul i32 %5, %4
205+
%conv16 = zext i32 %mul15 to i64
206+
%shr18 = urem i64 %conv16, 1
207+
%conv19 = trunc i64 %shr18 to i32
208+
store i32 %conv19, ptr getelementptr inbounds ([4 x i32], ptr null, i64 8, i64 2), align 8
209+
%6 = load i32, ptr null, align 4
210+
%arrayidx22 = getelementptr i32, ptr null, i64 60
211+
%7 = load i32, ptr %arrayidx22, align 4
212+
%mul23 = mul i32 %7, %6
213+
%conv24 = zext i32 %mul23 to i64
214+
%shr26 = urem i64 %conv24, 1
215+
%conv27 = trunc i64 %shr26 to i32
216+
store i32 %conv27, ptr getelementptr inbounds ([4 x i32], ptr null, i64 8, i64 3), align 4
217+
ret void
218+
}

0 commit comments

Comments
 (0)