@@ -127,6 +127,18 @@ define <16 x i8> @bitselect_v16i8(<16 x i8> %v1, <16 x i8> %v2, <16 x i8> %c) {
127
127
ret <16 x i8 > %a
128
128
}
129
129
130
+ ; CHECK-LABEL: signselect_v16i8:
131
+ ; SIMD128-NEXT: .functype signselect_v16i8 (v128, v128, v128) -> (v128){{$}}
132
+ ; SIMD128-NEXT: i8x16.signselect $push[[R:[0-9]+]]=, $0, $1, $2{{$}}
133
+ ; SIMD128-NEXT: return $pop[[R]]{{$}}
134
+ declare <16 x i8 > @llvm.wasm.signselect.v16i8 (<16 x i8 >, <16 x i8 >, <16 x i8 >)
135
+ define <16 x i8 > @signselect_v16i8 (<16 x i8 > %v1 , <16 x i8 > %v2 , <16 x i8 > %c ) {
136
+ %a = call <16 x i8 > @llvm.wasm.signselect.v16i8 (
137
+ <16 x i8 > %v1 , <16 x i8 > %v2 , <16 x i8 > %c
138
+ )
139
+ ret <16 x i8 > %a
140
+ }
141
+
130
142
; CHECK-LABEL: narrow_signed_v16i8:
131
143
; SIMD128-NEXT: .functype narrow_signed_v16i8 (v128, v128) -> (v128){{$}}
132
144
; SIMD128-NEXT: i8x16.narrow_i16x8_s $push[[R:[0-9]+]]=, $0, $1{{$}}
@@ -339,6 +351,18 @@ define <8 x i16> @bitselect_v8i16(<8 x i16> %v1, <8 x i16> %v2, <8 x i16> %c) {
339
351
ret <8 x i16 > %a
340
352
}
341
353
354
+ ; CHECK-LABEL: signselect_v8i16:
355
+ ; SIMD128-NEXT: .functype signselect_v8i16 (v128, v128, v128) -> (v128){{$}}
356
+ ; SIMD128-NEXT: i16x8.signselect $push[[R:[0-9]+]]=, $0, $1, $2{{$}}
357
+ ; SIMD128-NEXT: return $pop[[R]]{{$}}
358
+ declare <8 x i16 > @llvm.wasm.signselect.v8i16 (<8 x i16 >, <8 x i16 >, <8 x i16 >)
359
+ define <8 x i16 > @signselect_v8i16 (<8 x i16 > %v1 , <8 x i16 > %v2 , <8 x i16 > %c ) {
360
+ %a = call <8 x i16 > @llvm.wasm.signselect.v8i16 (
361
+ <8 x i16 > %v1 , <8 x i16 > %v2 , <8 x i16 > %c
362
+ )
363
+ ret <8 x i16 > %a
364
+ }
365
+
342
366
; CHECK-LABEL: narrow_signed_v8i16:
343
367
; SIMD128-NEXT: .functype narrow_signed_v8i16 (v128, v128) -> (v128){{$}}
344
368
; SIMD128-NEXT: i16x8.narrow_i32x4_s $push[[R:[0-9]+]]=, $0, $1{{$}}
@@ -467,6 +491,18 @@ define <4 x i32> @bitselect_v4i32(<4 x i32> %v1, <4 x i32> %v2, <4 x i32> %c) {
467
491
ret <4 x i32 > %a
468
492
}
469
493
494
+ ; CHECK-LABEL: signselect_v4i32:
495
+ ; SIMD128-NEXT: .functype signselect_v4i32 (v128, v128, v128) -> (v128){{$}}
496
+ ; SIMD128-NEXT: i32x4.signselect $push[[R:[0-9]+]]=, $0, $1, $2{{$}}
497
+ ; SIMD128-NEXT: return $pop[[R]]{{$}}
498
+ declare <4 x i32 > @llvm.wasm.signselect.v4i32 (<4 x i32 >, <4 x i32 >, <4 x i32 >)
499
+ define <4 x i32 > @signselect_v4i32 (<4 x i32 > %v1 , <4 x i32 > %v2 , <4 x i32 > %c ) {
500
+ %a = call <4 x i32 > @llvm.wasm.signselect.v4i32 (
501
+ <4 x i32 > %v1 , <4 x i32 > %v2 , <4 x i32 > %c
502
+ )
503
+ ret <4 x i32 > %a
504
+ }
505
+
470
506
; CHECK-LABEL: trunc_sat_s_v4i32:
471
507
; NO-SIMD128-NOT: f32x4
472
508
; SIMD128-NEXT: .functype trunc_sat_s_v4i32 (v128) -> (v128){{$}}
@@ -572,6 +608,18 @@ define <2 x i64> @bitselect_v2i64(<2 x i64> %v1, <2 x i64> %v2, <2 x i64> %c) {
572
608
ret <2 x i64 > %a
573
609
}
574
610
611
+ ; CHECK-LABEL: signselect_v2i64:
612
+ ; SIMD128-NEXT: .functype signselect_v2i64 (v128, v128, v128) -> (v128){{$}}
613
+ ; SIMD128-NEXT: i64x2.signselect $push[[R:[0-9]+]]=, $0, $1, $2{{$}}
614
+ ; SIMD128-NEXT: return $pop[[R]]{{$}}
615
+ declare <2 x i64 > @llvm.wasm.signselect.v2i64 (<2 x i64 >, <2 x i64 >, <2 x i64 >)
616
+ define <2 x i64 > @signselect_v2i64 (<2 x i64 > %v1 , <2 x i64 > %v2 , <2 x i64 > %c ) {
617
+ %a = call <2 x i64 > @llvm.wasm.signselect.v2i64 (
618
+ <2 x i64 > %v1 , <2 x i64 > %v2 , <2 x i64 > %c
619
+ )
620
+ ret <2 x i64 > %a
621
+ }
622
+
575
623
; ==============================================================================
576
624
; 4 x f32
577
625
; ==============================================================================
0 commit comments