@@ -2771,3 +2771,47 @@ entry:
2771
2771
%vzip.i = shufflevector <16 x i8 > %lane , <16 x i8 > %lane3 , <16 x i32 > <i32 0 , i32 16 , i32 1 , i32 17 , i32 2 , i32 18 , i32 3 , i32 19 , i32 4 , i32 20 , i32 5 , i32 21 , i32 6 , i32 22 , i32 7 , i32 23 >
2772
2772
ret <16 x i8 > %vzip.i
2773
2773
}
2774
+
2775
+ define <8 x i16 > @PR104482 (<16 x i8 > %i ) {
2776
+ ; SSE2-LABEL: PR104482:
2777
+ ; SSE2: # %bb.0:
2778
+ ; SSE2-NEXT: pxor %xmm2, %xmm2
2779
+ ; SSE2-NEXT: punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm2[8],xmm0[9],xmm2[9],xmm0[10],xmm2[10],xmm0[11],xmm2[11],xmm0[12],xmm2[12],xmm0[13],xmm2[13],xmm0[14],xmm2[14],xmm0[15],xmm2[15]
2780
+ ; SSE2-NEXT: movdqa %xmm0, %xmm1
2781
+ ; SSE2-NEXT: punpckhbw {{.*#+}} xmm1 = xmm1[8],xmm2[8],xmm1[9],xmm2[9],xmm1[10],xmm2[10],xmm1[11],xmm2[11],xmm1[12],xmm2[12],xmm1[13],xmm2[13],xmm1[14],xmm2[14],xmm1[15],xmm2[15]
2782
+ ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[2,1,0,3]
2783
+ ; SSE2-NEXT: pshuflw {{.*#+}} xmm1 = xmm1[0,3,2,3,4,5,6,7]
2784
+ ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[3,0,1,2]
2785
+ ; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [65535,65535,65535,65535,65535,0,65535,0]
2786
+ ; SSE2-NEXT: pand %xmm3, %xmm1
2787
+ ; SSE2-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
2788
+ ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,1,0,3]
2789
+ ; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,3,2,3,4,5,6,7]
2790
+ ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,3,1,2]
2791
+ ; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[2,1,0,3,4,5,6,7]
2792
+ ; SSE2-NEXT: pand %xmm3, %xmm0
2793
+ ; SSE2-NEXT: packuswb %xmm0, %xmm1
2794
+ ; SSE2-NEXT: movdqa %xmm1, %xmm0
2795
+ ; SSE2-NEXT: retq
2796
+ ;
2797
+ ; SSSE3-LABEL: PR104482:
2798
+ ; SSSE3: # %bb.0:
2799
+ ; SSSE3-NEXT: pshufb {{.*#+}} xmm0 = xmm0[15],zero,xmm0[14],zero,xmm0[13],zero,xmm0[12],zero,xmm0[11],zero,xmm0[10],zero,xmm0[9],zero,xmm0[8],zero
2800
+ ; SSSE3-NEXT: retq
2801
+ ;
2802
+ ; SSE41-LABEL: PR104482:
2803
+ ; SSE41: # %bb.0:
2804
+ ; SSE41-NEXT: pshufb {{.*#+}} xmm0 = xmm0[15],zero,xmm0[14],zero,xmm0[13],zero,xmm0[12],zero,xmm0[11],zero,xmm0[10],zero,xmm0[9],zero,xmm0[8],zero
2805
+ ; SSE41-NEXT: retq
2806
+ ;
2807
+ ; AVX-LABEL: PR104482:
2808
+ ; AVX: # %bb.0:
2809
+ ; AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[15],zero,xmm0[14],zero,xmm0[13],zero,xmm0[12],zero,xmm0[11],zero,xmm0[10],zero,xmm0[9],zero,xmm0[8],zero
2810
+ ; AVX-NEXT: retq
2811
+ %i7 = shufflevector <16 x i8 > %i , <16 x i8 > <i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 0 , i8 0 , i8 0 , i8 0 , i8 0 , i8 0 , i8 0 , i8 0 >, <16 x i32 > <i32 8 , i32 24 , i32 9 , i32 25 , i32 10 , i32 26 , i32 11 , i32 27 , i32 12 , i32 28 , i32 13 , i32 29 , i32 14 , i32 30 , i32 15 , i32 31 >
2812
+ %1 = bitcast <16 x i8 > %i7 to <8 x i16 >
2813
+ %i10 = shufflevector <8 x i16 > %1 , <8 x i16 > poison, <8 x i32 > <i32 4 , i32 5 , i32 6 , i32 7 , i32 0 , i32 1 , i32 2 , i32 3 >
2814
+ %i11 = shufflevector <8 x i16 > %i10 , <8 x i16 > poison, <8 x i32 > <i32 3 , i32 2 , i32 1 , i32 0 , i32 4 , i32 5 , i32 6 , i32 7 >
2815
+ %i12 = shufflevector <8 x i16 > %i11 , <8 x i16 > poison, <8 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 , i32 7 , i32 6 , i32 5 , i32 4 >
2816
+ ret <8 x i16 > %i12
2817
+ }
0 commit comments