@@ -231,4 +231,57 @@ define arm_aapcs_vfpcc <2 x i64> @signbit_setmask_v2i64(<2 x i64> %a, <2 x i64>
231
231
%r = select <2 x i1 > %cond , <2 x i64 > <i64 -1 , i64 -1 >, <2 x i64 > %b
232
232
ret <2 x i64 > %r
233
233
}
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
+ }
234
246
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