Skip to content

Commit 52e1995

Browse files
committed
[X86] Add tests showing failure to combine AVX512 shuffles to match "cross lane" SHLDQ/SRLDQ patterns using VALIGN
We match two input shuffles, but not if one input is zero
1 parent 70501ed commit 52e1995

File tree

1 file changed

+32
-0
lines changed

1 file changed

+32
-0
lines changed

llvm/test/CodeGen/X86/vector-shuffle-combining-avx512f.ll

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -800,6 +800,38 @@ define <8 x double> @combine_vpermi2var_8f64_as_vpermpd(<8 x double> %x0, <8 x d
800800
ret <8 x double> %res1
801801
}
802802

803+
define <8 x i64> @combine_vpermt2var_8i64_as_valignq(<8 x i64> %x0, <8 x i64> %x1) {
804+
; CHECK-LABEL: combine_vpermt2var_8i64_as_valignq:
805+
; CHECK: # %bb.0:
806+
; CHECK-NEXT: valignq {{.*#+}} zmm0 = zmm1[7],zmm0[0,1,2,3,4,5,6]
807+
; CHECK-NEXT: ret{{[l|q]}}
808+
%res0 = call <8 x i64> @llvm.x86.avx512.maskz.vpermt2var.q.512(<8 x i64> <i64 15, i64 0, i64 1, i64 2, i64 3, i64 4, i64 5, i64 6>, <8 x i64> %x0, <8 x i64> %x1, i8 -1)
809+
ret <8 x i64> %res0
810+
}
811+
812+
define <8 x i64> @combine_vpermt2var_8i64_as_valignq_zero(<8 x i64> %x0) {
813+
; CHECK-LABEL: combine_vpermt2var_8i64_as_valignq_zero:
814+
; CHECK: # %bb.0:
815+
; CHECK-NEXT: vpmovsxbq {{.*#+}} zmm2 = [15,0,1,2,3,4,5,6]
816+
; CHECK-NEXT: vpxor %xmm1, %xmm1, %xmm1
817+
; CHECK-NEXT: vpermt2q %zmm0, %zmm2, %zmm1
818+
; CHECK-NEXT: vmovdqa64 %zmm1, %zmm0
819+
; CHECK-NEXT: ret{{[l|q]}}
820+
%res0 = call <8 x i64> @llvm.x86.avx512.maskz.vpermt2var.q.512(<8 x i64> <i64 15, i64 0, i64 1, i64 2, i64 3, i64 4, i64 5, i64 6>, <8 x i64> zeroinitializer, <8 x i64> %x0, i8 -1)
821+
ret <8 x i64> %res0
822+
}
823+
824+
define <8 x i64> @combine_vpermt2var_8i64_as_zero_valignq(<8 x i64> %x0) {
825+
; CHECK-LABEL: combine_vpermt2var_8i64_as_zero_valignq:
826+
; CHECK: # %bb.0:
827+
; CHECK-NEXT: vpxor %xmm1, %xmm1, %xmm1
828+
; CHECK-NEXT: vpmovsxbq {{.*#+}} zmm2 = [15,0,1,2,3,4,5,6]
829+
; CHECK-NEXT: vpermt2q %zmm1, %zmm2, %zmm0
830+
; CHECK-NEXT: ret{{[l|q]}}
831+
%res0 = call <8 x i64> @llvm.x86.avx512.maskz.vpermt2var.q.512(<8 x i64> <i64 15, i64 0, i64 1, i64 2, i64 3, i64 4, i64 5, i64 6>, <8 x i64> %x0, <8 x i64> zeroinitializer, i8 -1)
832+
ret <8 x i64> %res0
833+
}
834+
803835
define <8 x i64> @combine_vpermt2var_8i64_as_vpermq(<8 x i64> %x0, <8 x i64> %x1) {
804836
; CHECK-LABEL: combine_vpermt2var_8i64_as_vpermq:
805837
; CHECK: # %bb.0:

0 commit comments

Comments
 (0)