Expand Up
@@ -73,16 +73,16 @@ define <32 x i8> @combine_pshufb_and(<32 x i8> %a0) {
ret <32 x i8 > %2
}
define <4 x i64 > @combine_permq_pshufb_as_vperm2i128 (<4 x i64 > %a0 ) {
; X86-LABEL: combine_permq_pshufb_as_vperm2i128 :
define <4 x i64 > @combine_permq_pshufb_as_vextracti128 (<4 x i64 > %a0 ) {
; X86-LABEL: combine_permq_pshufb_as_vextracti128 :
; X86: # %bb.0:
; X86-NEXT: vperm2i128 {{.*#+}} ymm0 = ymm0[2,3],zero,zero
; X86-NEXT: vextracti128 $1, % ymm0, %xmm0
; X86-NEXT: vpaddq {{\.LCPI.*}}, %ymm0, %ymm0
; X86-NEXT: retl
;
; X64-LABEL: combine_permq_pshufb_as_vperm2i128 :
; X64-LABEL: combine_permq_pshufb_as_vextracti128 :
; X64: # %bb.0:
; X64-NEXT: vperm2i128 {{.*#+}} ymm0 = ymm0[2,3],zero,zero
; X64-NEXT: vextracti128 $1, % ymm0, %xmm0
; X64-NEXT: vpaddq {{.*}}(%rip), %ymm0, %ymm0
; X64-NEXT: retq
%1 = shufflevector <4 x i64 > %a0 , <4 x i64 > undef , <4 x i32 > <i32 3 , i32 2 , i32 1 , i32 0 >
Expand All
@@ -93,6 +93,26 @@ define <4 x i64> @combine_permq_pshufb_as_vperm2i128(<4 x i64> %a0) {
ret <4 x i64 > %5
}
define <4 x i64 > @combine_permq_pshufb_as_vmovdqa (<4 x i64 > %a0 ) {
; X86-LABEL: combine_permq_pshufb_as_vmovdqa:
; X86: # %bb.0:
; X86-NEXT: vmovdqa %xmm0, %xmm0
; X86-NEXT: vpaddq {{\.LCPI.*}}, %ymm0, %ymm0
; X86-NEXT: retl
;
; X64-LABEL: combine_permq_pshufb_as_vmovdqa:
; X64: # %bb.0:
; X64-NEXT: vmovdqa %xmm0, %xmm0
; X64-NEXT: vpaddq {{.*}}(%rip), %ymm0, %ymm0
; X64-NEXT: retq
%1 = shufflevector <4 x i64 > %a0 , <4 x i64 > undef , <4 x i32 > <i32 1 , i32 0 , i32 3 , i32 2 >
%2 = bitcast <4 x i64 > %1 to <32 x i8 >
%3 = call <32 x i8 > @llvm.x86.avx2.pshuf.b (<32 x i8 > %2 , <32 x i8 > <i8 8 , i8 9 , i8 10 , i8 11 , i8 12 , i8 13 , i8 14 , i8 15 , i8 0 , i8 1 , i8 2 , i8 3 , i8 4 , i8 5 , i8 6 , i8 7 , i8 255 , i8 255 , i8 255 , i8 255 , i8 255 , i8 255 , i8 255 , i8 255 , i8 255 , i8 255 , i8 255 , i8 255 , i8 255 , i8 255 , i8 255 , i8 255 >)
%4 = bitcast <32 x i8 > %3 to <4 x i64 >
%5 = add <4 x i64 > %4 , <i64 1 , i64 1 , i64 3 , i64 3 >
ret <4 x i64 > %5
}
define <8 x i32 > @combine_as_vpermd (<8 x i32 > %a0 ) {
; CHECK-LABEL: combine_as_vpermd:
; CHECK: # %bb.0:
Expand All
@@ -117,15 +137,26 @@ define <8 x float> @combine_as_vpermps(<8 x float> %a0) {
ret <8 x float > %3
}
define <32 x i8 > @combine_permq_pshufb_as_vmovaps (<4 x i64 > %a0 ) {
; CHECK-LABEL: combine_permq_pshufb_as_vmovaps:
; CHECK: # %bb.0:
; CHECK-NEXT: vmovaps %xmm0, %xmm0
; CHECK-NEXT: ret{{[l|q]}}
%1 = shufflevector <4 x i64 > %a0 , <4 x i64 > undef , <4 x i32 > <i32 1 , i32 0 , i32 3 , i32 2 >
%2 = bitcast <4 x i64 > %1 to <32 x i8 >
%3 = call <32 x i8 > @llvm.x86.avx2.pshuf.b (<32 x i8 > %2 , <32 x i8 > <i8 8 , i8 9 , i8 10 , i8 11 , i8 12 , i8 13 , i8 14 , i8 15 , i8 0 , i8 1 , i8 2 , i8 3 , i8 4 , i8 5 , i8 6 , i8 7 , i8 255 , i8 255 , i8 255 , i8 255 , i8 255 , i8 255 , i8 255 , i8 255 , i8 255 , i8 255 , i8 255 , i8 255 , i8 255 , i8 255 , i8 255 , i8 255 >)
ret <32 x i8 > %3
}
define <32 x i8 > @combine_permq_pshufb_as_vpblendd (<4 x i64 > %a0 ) {
; CHECK-LABEL: combine_permq_pshufb_as_vpblendd:
; CHECK: # %bb.0:
; CHECK-NEXT: vxorps %xmm1, %xmm1, %xmm1
; CHECK-NEXT: vblendps {{.*#+}} ymm0 = ymm0 [0,1,2,3],ymm1 [4,5,6,7]
; CHECK-NEXT: vblendps {{.*#+}} ymm0 = ymm1 [0,1,2,3],ymm0 [4,5,6,7]
; CHECK-NEXT: ret{{[l|q]}}
%1 = shufflevector <4 x i64 > %a0 , <4 x i64 > undef , <4 x i32 > <i32 1 , i32 0 , i32 3 , i32 2 >
%2 = bitcast <4 x i64 > %1 to <32 x i8 >
%3 = call <32 x i8 > @llvm.x86.avx2.pshuf.b (<32 x i8 > %2 , <32 x i8 > <i8 8 , i8 9 , i8 10 , i8 11 , i8 12 , i8 13 , i8 14 , i8 15 , i8 0 , i8 1 , i8 2 , i8 3 , i8 4 , i8 5 , i8 6 , i8 7 , i8 255 , i8 255 , i8 255 , i8 255 , i8 255 , i8 255 , i8 255 , i8 255 , i8 255 , i8 255 , i8 255 , i8 255 , i8 255 , i8 255 , i8 255 , i8 255 >)
%3 = call <32 x i8 > @llvm.x86.avx2.pshuf.b (<32 x i8 > %2 , <32 x i8 > <i8 255 , i8 255 , i8 255 , i8 255 , i8 255 , i8 255 , i8 255 , i8 255 , i8 255 , i8 255 , i8 255 , i8 255 , i8 255 , i8 255 , i8 255 , i8 255 , i8 8 , i8 9 , i8 10 , i8 11 , i8 12 , i8 13 , i8 14 , i8 15 , i8 0 , i8 1 , i8 2 , i8 3 , i8 4 , i8 5 , i8 6 , i8 7 >)
ret <32 x i8 > %3
}
Expand Down