Skip to content

Commit c1d3f39

Browse files
committed
[ValueTracking] Add tests for shufflevector in isKnownNonZero
1 parent b9a3551 commit c1d3f39

File tree

1 file changed

+132
-0
lines changed

1 file changed

+132
-0
lines changed

llvm/test/Transforms/InstSimplify/known-non-zero.ll

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,3 +177,135 @@ define i1 @smax_non_zero(i8 %xx, i8 %y) {
177177
%r = icmp eq i8 %v, 0
178178
ret i1 %r
179179
}
180+
181+
define <4 x i1> @shuf_nonzero_both(<4 x i8> %xx, <4 x i8> %yy) {
182+
; CHECK-LABEL: @shuf_nonzero_both(
183+
; CHECK-NEXT: [[X:%.*]] = add nuw <4 x i8> [[XX:%.*]], <i8 1, i8 1, i8 1, i8 1>
184+
; CHECK-NEXT: [[Y:%.*]] = add nuw <4 x i8> [[YY:%.*]], <i8 1, i8 1, i8 1, i8 1>
185+
; CHECK-NEXT: [[SHUF:%.*]] = shufflevector <4 x i8> [[X]], <4 x i8> [[Y]], <4 x i32> <i32 0, i32 4, i32 7, i32 2>
186+
; CHECK-NEXT: [[R:%.*]] = icmp eq <4 x i8> [[SHUF]], zeroinitializer
187+
; CHECK-NEXT: ret <4 x i1> [[R]]
188+
;
189+
%x = add nuw <4 x i8> %xx, <i8 1, i8 1, i8 1, i8 1>
190+
%y = add nuw <4 x i8> %yy, <i8 1, i8 1, i8 1, i8 1>
191+
192+
%shuf = shufflevector <4 x i8> %x, <4 x i8> %y, <4 x i32> <i32 0, i32 4, i32 7, i32 2>
193+
%r = icmp eq <4 x i8> %shuf, zeroinitializer
194+
ret <4 x i1> %r
195+
}
196+
197+
define <4 x i1> @shuf_nonzero_both_fail(<4 x i8> %xx, <4 x i8> %yy) {
198+
; CHECK-LABEL: @shuf_nonzero_both_fail(
199+
; CHECK-NEXT: [[X:%.*]] = add nuw <4 x i8> [[XX:%.*]], <i8 1, i8 1, i8 1, i8 1>
200+
; CHECK-NEXT: [[Y:%.*]] = add nuw <4 x i8> [[YY:%.*]], <i8 1, i8 1, i8 1, i8 0>
201+
; CHECK-NEXT: [[SHUF:%.*]] = shufflevector <4 x i8> [[X]], <4 x i8> [[Y]], <4 x i32> <i32 0, i32 4, i32 7, i32 2>
202+
; CHECK-NEXT: [[R:%.*]] = icmp eq <4 x i8> [[SHUF]], zeroinitializer
203+
; CHECK-NEXT: ret <4 x i1> [[R]]
204+
;
205+
%x = add nuw <4 x i8> %xx, <i8 1, i8 1, i8 1, i8 1>
206+
%y = add nuw <4 x i8> %yy, <i8 1, i8 1, i8 1, i8 0>
207+
208+
%shuf = shufflevector <4 x i8> %x, <4 x i8> %y, <4 x i32> <i32 0, i32 4, i32 7, i32 2>
209+
%r = icmp eq <4 x i8> %shuf, zeroinitializer
210+
ret <4 x i1> %r
211+
}
212+
213+
define <4 x i1> @shuf_nonzero_both_fail2(<4 x i8> %xx, <4 x i8> %yy) {
214+
; CHECK-LABEL: @shuf_nonzero_both_fail2(
215+
; CHECK-NEXT: [[X:%.*]] = add nuw <4 x i8> [[XX:%.*]], <i8 1, i8 1, i8 1, i8 1>
216+
; CHECK-NEXT: [[Y:%.*]] = add <4 x i8> [[YY:%.*]], <i8 1, i8 1, i8 1, i8 1>
217+
; CHECK-NEXT: [[SHUF:%.*]] = shufflevector <4 x i8> [[X]], <4 x i8> [[Y]], <4 x i32> <i32 0, i32 4, i32 7, i32 2>
218+
; CHECK-NEXT: [[R:%.*]] = icmp eq <4 x i8> [[SHUF]], zeroinitializer
219+
; CHECK-NEXT: ret <4 x i1> [[R]]
220+
;
221+
%x = add nuw <4 x i8> %xx, <i8 1, i8 1, i8 1, i8 1>
222+
%y = add <4 x i8> %yy, <i8 1, i8 1, i8 1, i8 1>
223+
224+
%shuf = shufflevector <4 x i8> %x, <4 x i8> %y, <4 x i32> <i32 0, i32 4, i32 7, i32 2>
225+
%r = icmp eq <4 x i8> %shuf, zeroinitializer
226+
ret <4 x i1> %r
227+
}
228+
229+
define <4 x i1> @shuf_nonzero_lhs(<4 x i8> %xx) {
230+
; CHECK-LABEL: @shuf_nonzero_lhs(
231+
; CHECK-NEXT: [[X:%.*]] = add nuw <4 x i8> [[XX:%.*]], <i8 1, i8 1, i8 1, i8 1>
232+
; CHECK-NEXT: [[SHUF:%.*]] = shufflevector <4 x i8> [[X]], <4 x i8> poison, <4 x i32> <i32 2, i32 2, i32 0, i32 1>
233+
; CHECK-NEXT: [[R:%.*]] = icmp eq <4 x i8> [[SHUF]], zeroinitializer
234+
; CHECK-NEXT: ret <4 x i1> [[R]]
235+
;
236+
%x = add nuw <4 x i8> %xx, <i8 1, i8 1, i8 1, i8 1>
237+
238+
%shuf = shufflevector <4 x i8> %x, <4 x i8> poison, <4 x i32> <i32 2, i32 2, i32 0, i32 1>
239+
%r = icmp eq <4 x i8> %shuf, zeroinitializer
240+
ret <4 x i1> %r
241+
}
242+
243+
define <4 x i1> @shuf_nonzero_lhs2(<4 x i8> %xx) {
244+
; CHECK-LABEL: @shuf_nonzero_lhs2(
245+
; CHECK-NEXT: [[X:%.*]] = add nuw <4 x i8> [[XX:%.*]], <i8 1, i8 1, i8 1, i8 0>
246+
; CHECK-NEXT: [[SHUF:%.*]] = shufflevector <4 x i8> [[X]], <4 x i8> poison, <4 x i32> <i32 2, i32 0, i32 1, i32 1>
247+
; CHECK-NEXT: [[R:%.*]] = icmp eq <4 x i8> [[SHUF]], zeroinitializer
248+
; CHECK-NEXT: ret <4 x i1> [[R]]
249+
;
250+
%x = add nuw <4 x i8> %xx, <i8 1, i8 1, i8 1, i8 0>
251+
252+
%shuf = shufflevector <4 x i8> %x, <4 x i8> poison, <4 x i32> <i32 2, i32 0, i32 1, i32 1>
253+
%r = icmp eq <4 x i8> %shuf, zeroinitializer
254+
ret <4 x i1> %r
255+
}
256+
257+
define <4 x i1> @shuf_nonzero_lhs2_fail(<4 x i8> %xx) {
258+
; CHECK-LABEL: @shuf_nonzero_lhs2_fail(
259+
; CHECK-NEXT: [[X:%.*]] = add nuw <4 x i8> [[XX:%.*]], <i8 1, i8 1, i8 1, i8 0>
260+
; CHECK-NEXT: [[SHUF:%.*]] = shufflevector <4 x i8> [[X]], <4 x i8> poison, <4 x i32> <i32 2, i32 0, i32 3, i32 1>
261+
; CHECK-NEXT: [[R:%.*]] = icmp eq <4 x i8> [[SHUF]], zeroinitializer
262+
; CHECK-NEXT: ret <4 x i1> [[R]]
263+
;
264+
%x = add nuw <4 x i8> %xx, <i8 1, i8 1, i8 1, i8 0>
265+
266+
%shuf = shufflevector <4 x i8> %x, <4 x i8> poison, <4 x i32> <i32 2, i32 0, i32 3, i32 1>
267+
%r = icmp eq <4 x i8> %shuf, zeroinitializer
268+
ret <4 x i1> %r
269+
}
270+
271+
define <4 x i1> @shuf_nonzero_rhs(<4 x i8> %xx) {
272+
; CHECK-LABEL: @shuf_nonzero_rhs(
273+
; CHECK-NEXT: [[X:%.*]] = add nuw <4 x i8> [[XX:%.*]], <i8 1, i8 1, i8 1, i8 1>
274+
; CHECK-NEXT: [[SHUF:%.*]] = shufflevector <4 x i8> poison, <4 x i8> [[X]], <4 x i32> <i32 6, i32 7, i32 5, i32 4>
275+
; CHECK-NEXT: [[R:%.*]] = icmp eq <4 x i8> [[SHUF]], zeroinitializer
276+
; CHECK-NEXT: ret <4 x i1> [[R]]
277+
;
278+
%x = add nuw <4 x i8> %xx, <i8 1, i8 1, i8 1, i8 1>
279+
280+
%shuf = shufflevector <4 x i8> poison, <4 x i8> %x, <4 x i32> <i32 6, i32 7, i32 5, i32 4>
281+
%r = icmp eq <4 x i8> %shuf, zeroinitializer
282+
ret <4 x i1> %r
283+
}
284+
285+
define <4 x i1> @shuf_nonzero_rhs2(<4 x i8> %xx) {
286+
; CHECK-LABEL: @shuf_nonzero_rhs2(
287+
; CHECK-NEXT: [[X:%.*]] = add nuw <4 x i8> [[XX:%.*]], <i8 0, i8 0, i8 1, i8 1>
288+
; CHECK-NEXT: [[SHUF:%.*]] = shufflevector <4 x i8> poison, <4 x i8> [[X]], <4 x i32> <i32 6, i32 7, i32 7, i32 6>
289+
; CHECK-NEXT: [[R:%.*]] = icmp eq <4 x i8> [[SHUF]], zeroinitializer
290+
; CHECK-NEXT: ret <4 x i1> [[R]]
291+
;
292+
%x = add nuw <4 x i8> %xx, <i8 0, i8 0, i8 1, i8 1>
293+
294+
%shuf = shufflevector <4 x i8> poison, <4 x i8> %x, <4 x i32> <i32 6, i32 7, i32 7, i32 6>
295+
%r = icmp eq <4 x i8> %shuf, zeroinitializer
296+
ret <4 x i1> %r
297+
}
298+
299+
define <4 x i1> @shuf_nonzero_rhs2_fail(<4 x i8> %xx) {
300+
; CHECK-LABEL: @shuf_nonzero_rhs2_fail(
301+
; CHECK-NEXT: [[X:%.*]] = add nuw <4 x i8> [[XX:%.*]], <i8 0, i8 0, i8 1, i8 1>
302+
; CHECK-NEXT: [[SHUF:%.*]] = shufflevector <4 x i8> poison, <4 x i8> [[X]], <4 x i32> <i32 6, i32 7, i32 5, i32 6>
303+
; CHECK-NEXT: [[R:%.*]] = icmp eq <4 x i8> [[SHUF]], zeroinitializer
304+
; CHECK-NEXT: ret <4 x i1> [[R]]
305+
;
306+
%x = add nuw <4 x i8> %xx, <i8 0, i8 0, i8 1, i8 1>
307+
308+
%shuf = shufflevector <4 x i8> poison, <4 x i8> %x, <4 x i32> <i32 6, i32 7, i32 5, i32 6>
309+
%r = icmp eq <4 x i8> %shuf, zeroinitializer
310+
ret <4 x i1> %r
311+
}

0 commit comments

Comments
 (0)