Skip to content

Commit e2b1d32

Browse files
committed
[AArch][x86] add tests for vselect; NFC
This is a potential follow-up suggested in D113212.
1 parent 1376301 commit e2b1d32

File tree

3 files changed

+404
-0
lines changed

3 files changed

+404
-0
lines changed

llvm/test/CodeGen/AArch64/vselect-constants.ll

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,3 +280,51 @@ define <2 x i64> @signbit_setmask_v2i64(<2 x i64> %a, <2 x i64> %b) {
280280
%r = select <2 x i1> %cond, <2 x i64> <i64 -1, i64 -1>, <2 x i64> %b
281281
ret <2 x i64> %r
282282
}
283+
284+
define <16 x i8> @not_signbit_mask_v16i8(<16 x i8> %a, <16 x i8> %b) {
285+
; CHECK-LABEL: not_signbit_mask_v16i8:
286+
; CHECK: // %bb.0:
287+
; CHECK-NEXT: movi v2.2d, #0xffffffffffffffff
288+
; CHECK-NEXT: cmgt v0.16b, v0.16b, v2.16b
289+
; CHECK-NEXT: and v0.16b, v1.16b, v0.16b
290+
; CHECK-NEXT: ret
291+
%cond = icmp sgt <16 x i8> %a, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
292+
%r = select <16 x i1> %cond, <16 x i8> %b, <16 x i8> zeroinitializer
293+
ret <16 x i8> %r
294+
}
295+
296+
define <8 x i16> @not_signbit_mask_v8i16(<8 x i16> %a, <8 x i16> %b) {
297+
; CHECK-LABEL: not_signbit_mask_v8i16:
298+
; CHECK: // %bb.0:
299+
; CHECK-NEXT: movi v2.2d, #0xffffffffffffffff
300+
; CHECK-NEXT: cmgt v0.8h, v0.8h, v2.8h
301+
; CHECK-NEXT: and v0.16b, v1.16b, v0.16b
302+
; CHECK-NEXT: ret
303+
%cond = icmp sgt <8 x i16> %a, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
304+
%r = select <8 x i1> %cond, <8 x i16> %b, <8 x i16> zeroinitializer
305+
ret <8 x i16> %r
306+
}
307+
308+
define <4 x i32> @not_signbit_mask_v4i32(<4 x i32> %a, <4 x i32> %b) {
309+
; CHECK-LABEL: not_signbit_mask_v4i32:
310+
; CHECK: // %bb.0:
311+
; CHECK-NEXT: movi v2.2d, #0xffffffffffffffff
312+
; CHECK-NEXT: cmgt v0.4s, v0.4s, v2.4s
313+
; CHECK-NEXT: and v0.16b, v1.16b, v0.16b
314+
; CHECK-NEXT: ret
315+
%cond = icmp sgt <4 x i32> %a, <i32 -1, i32 -1, i32 -1, i32 -1>
316+
%r = select <4 x i1> %cond, <4 x i32> %b, <4 x i32> zeroinitializer
317+
ret <4 x i32> %r
318+
}
319+
320+
define <2 x i64> @not_signbit_mask_v2i64(<2 x i64> %a, <2 x i64> %b) {
321+
; CHECK-LABEL: not_signbit_mask_v2i64:
322+
; CHECK: // %bb.0:
323+
; CHECK-NEXT: movi v2.2d, #0xffffffffffffffff
324+
; CHECK-NEXT: cmgt v0.2d, v0.2d, v2.2d
325+
; CHECK-NEXT: and v0.16b, v1.16b, v0.16b
326+
; CHECK-NEXT: ret
327+
%cond = icmp sgt <2 x i64> %a, <i64 -1, i64 -1>
328+
%r = select <2 x i1> %cond, <2 x i64> %b, <2 x i64> zeroinitializer
329+
ret <2 x i64> %r
330+
}

llvm/test/CodeGen/Thumb2/mve-vselect-constants.ll

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,4 +231,57 @@ define arm_aapcs_vfpcc <2 x i64> @signbit_setmask_v2i64(<2 x i64> %a, <2 x i64>
231231
%r = select <2 x i1> %cond, <2 x i64> <i64 -1, i64 -1>, <2 x i64> %b
232232
ret <2 x i64> %r
233233
}
234+
define arm_aapcs_vfpcc <16 x i8> @not_signbit_mask_v16i8(<16 x i8> %a, <16 x i8> %b) {
235+
; CHECK-LABEL: not_signbit_mask_v16i8:
236+
; CHECK: @ %bb.0:
237+
; CHECK-NEXT: vmov.i8 q2, #0xff
238+
; CHECK-NEXT: vmov.i32 q3, #0x0
239+
; CHECK-NEXT: vcmp.s8 gt, q0, q2
240+
; CHECK-NEXT: vpsel q0, q1, q3
241+
; CHECK-NEXT: bx lr
242+
%cond = icmp sgt <16 x i8> %a, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
243+
%r = select <16 x i1> %cond, <16 x i8> %b, <16 x i8> zeroinitializer
244+
ret <16 x i8> %r
245+
}
234246

247+
define arm_aapcs_vfpcc <8 x i16> @not_signbit_mask_v8i16(<8 x i16> %a, <8 x i16> %b) {
248+
; CHECK-LABEL: not_signbit_mask_v8i16:
249+
; CHECK: @ %bb.0:
250+
; CHECK-NEXT: vmov.i8 q2, #0xff
251+
; CHECK-NEXT: vmov.i32 q3, #0x0
252+
; CHECK-NEXT: vcmp.s16 gt, q0, q2
253+
; CHECK-NEXT: vpsel q0, q1, q3
254+
; CHECK-NEXT: bx lr
255+
%cond = icmp sgt <8 x i16> %a, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
256+
%r = select <8 x i1> %cond, <8 x i16> %b, <8 x i16> zeroinitializer
257+
ret <8 x i16> %r
258+
}
259+
260+
define arm_aapcs_vfpcc <4 x i32> @not_signbit_mask_v4i32(<4 x i32> %a, <4 x i32> %b) {
261+
; CHECK-LABEL: not_signbit_mask_v4i32:
262+
; CHECK: @ %bb.0:
263+
; CHECK-NEXT: vmov.i8 q2, #0xff
264+
; CHECK-NEXT: vmov.i32 q3, #0x0
265+
; CHECK-NEXT: vcmp.s32 gt, q0, q2
266+
; CHECK-NEXT: vpsel q0, q1, q3
267+
; CHECK-NEXT: bx lr
268+
%cond = icmp sgt <4 x i32> %a, <i32 -1, i32 -1, i32 -1, i32 -1>
269+
%r = select <4 x i1> %cond, <4 x i32> %b, <4 x i32> zeroinitializer
270+
ret <4 x i32> %r
271+
}
272+
273+
define arm_aapcs_vfpcc <2 x i64> @not_signbit_mask_v2i64(<2 x i64> %a, <2 x i64> %b) {
274+
; CHECK-LABEL: not_signbit_mask_v2i64:
275+
; CHECK: @ %bb.0:
276+
; CHECK-NEXT: vmov r0, s3
277+
; CHECK-NEXT: vmov r1, s1
278+
; CHECK-NEXT: mvn.w r0, r0, asr #31
279+
; CHECK-NEXT: mvn.w r1, r1, asr #31
280+
; CHECK-NEXT: vmov q0[2], q0[0], r1, r0
281+
; CHECK-NEXT: vmov q0[3], q0[1], r1, r0
282+
; CHECK-NEXT: vand q0, q1, q0
283+
; CHECK-NEXT: bx lr
284+
%cond = icmp sgt <2 x i64> %a, <i64 -1, i64 -1>
285+
%r = select <2 x i1> %cond, <2 x i64> %b, <2 x i64> zeroinitializer
286+
ret <2 x i64> %r
287+
}

0 commit comments

Comments
 (0)