%Y = sext <8 x i8> %X to <8 x i16>
ret <8 x i16>%Y
}
-; AVX: sext_1
-; AVX: vpmovsxbd
+
+; AVX: sext_4i1_to_4i64
+; AVX: vpslld $31
+; AVX: vpsrad $31
; AVX: vpmovsxdq
; AVX: vpmovsxdq
; AVX: ret
-define void @sext_1(<4 x i8>* %inbuf, <4 x i64>* %outbuf) {
- %v0 = load <4 x i8>* %inbuf
- %r = sext <4 x i8> %v0 to <4 x i64>
- store <4 x i64> %r, <4 x i64>* %outbuf
- ret void
+define <4 x i64> @sext_4i1_to_4i64(<4 x i1> %mask) {
+ %extmask = sext <4 x i1> %mask to <4 x i64>
+ ret <4 x i64> %extmask
}
-; AVX: sext_2
-; AVX: vpmovsxbd
+; AVX-LABEL: sext_16i8_to_16i16
+; AVX: vpmovsxbw
+; AVX: vpunpckhqdq
+; AVX: vpmovsxbw
; AVX: ret
-define void @sext_2(<4 x i8>* %inbuf, <4 x i32>* %outbuf) {
- %v0 = load <4 x i8>* %inbuf
- %r = sext <4 x i8> %v0 to <4 x i32>
- store <4 x i32> %r, <4 x i32>* %outbuf
- ret void
+define <16 x i16> @sext_16i8_to_16i16(<16 x i8> *%ptr) {
+ %X = load <16 x i8>* %ptr
+ %Y = sext <16 x i8> %X to <16 x i16>
+ ret <16 x i16> %Y
}
-
-; AVX: sext_3
-; AVX: vpmovsxwd
+
+; AVX: sext_4i8_to_4i64
+; AVX: vpslld $24
+; AVX: vpsrad $24
+; AVX: vpmovsxdq
+; AVX: vpmovsxdq
; AVX: ret
-define void @sext_3(<4 x i16>* %inbuf, <4 x i32>* %outbuf) {
- %v0 = load <4 x i16>* %inbuf
- %r = sext <4 x i16> %v0 to <4 x i32>
- store <4 x i32> %r, <4 x i32>* %outbuf
- ret void
+define <4 x i64> @sext_4i8_to_4i64(<4 x i8> %mask) {
+ %extmask = sext <4 x i8> %mask to <4 x i64>
+ ret <4 x i64> %extmask
}
-
-; AVX: sext_4
-; AVX: vpmovsxwd
+
+; AVX: sext_4i8_to_4i64
+; AVX: vpmovsxbd
; AVX: vpmovsxdq
; AVX: vpmovsxdq
; AVX: ret
-define void @sext_4(<4 x i16>* %inbuf, <4 x i64>* %outbuf) {
- %v0 = load <4 x i16>* %inbuf
- %r = sext <4 x i16> %v0 to <4 x i64>
- store <4 x i64> %r, <4 x i64>* %outbuf
- ret void
+define <4 x i64> @load_sext_4i8_to_4i64(<4 x i8> *%ptr) {
+ %X = load <4 x i8>* %ptr
+ %Y = sext <4 x i8> %X to <4 x i64>
+ ret <4 x i64>%Y
}
-; AVX: sext_6
-; AVX: vpmovsxbw
-; AVX: vpmovsxwd
+; AVX: sext_4i16_to_4i64
; AVX: vpmovsxwd
+; AVX: vpmovsxdq
+; AVX: vpmovsxdq
; AVX: ret
-define void @sext_6(<8 x i8>* %inbuf, <8 x i32>* %outbuf) {
- %v0 = load <8 x i8>* %inbuf
- %r = sext <8 x i8> %v0 to <8 x i32>
- store <8 x i32> %r, <8 x i32>* %outbuf
- ret void
+define <4 x i64> @load_sext_4i16_to_4i64(<4 x i16> *%ptr) {
+ %X = load <4 x i16>* %ptr
+ %Y = sext <4 x i16> %X to <4 x i64>
+ ret <4 x i64>%Y
}
-