From: Craig Topper Date: Thu, 24 Nov 2016 18:24:46 +0000 (+0000) Subject: [AVX-512] Add tests demonstrating failure to generated masked instructions for VSHUFF... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7a525e09ac6724dd48aa404fb04a5d515eeb369c;p=llvm [AVX-512] Add tests demonstrating failure to generated masked instructions for VSHUFF32x4 and VSHUFI32x4 due to shuffle lowering widening elements. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@287897 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/CodeGen/X86/vector-shuffle-512-v16.ll b/test/CodeGen/X86/vector-shuffle-512-v16.ll index a1caafb4579..66442595054 100644 --- a/test/CodeGen/X86/vector-shuffle-512-v16.ll +++ b/test/CodeGen/X86/vector-shuffle-512-v16.ll @@ -424,3 +424,47 @@ define <16 x i32> @test_vshufi32x4_512(<16 x i32> %x, <16 x i32> %x1) nounwind { %res = shufflevector <16 x i32> %x, <16 x i32> %x1, <16 x i32> ret <16 x i32> %res } + +define <16 x float> @test_vshuff32x4_512_mask(<16 x float> %x, <16 x float> %x1, <16 x float> %y, <16 x i1> %mask) nounwind { +; AVX512F-LABEL: test_vshuff32x4_512_mask: +; AVX512F: # BB#0: +; AVX512F-NEXT: vpmovsxbd %xmm3, %zmm3 +; AVX512F-NEXT: vpslld $31, %zmm3, %zmm3 +; AVX512F-NEXT: vptestmd %zmm3, %zmm3, %k1 +; AVX512F-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,2,3],zmm1[2,3,0,1] +; AVX512F-NEXT: vblendmps %zmm0, %zmm2, %zmm0 {%k1} +; AVX512F-NEXT: retq +; +; AVX512BW-LABEL: test_vshuff32x4_512_mask: +; AVX512BW: # BB#0: +; AVX512BW-NEXT: vpsllw $7, %xmm3, %xmm3 +; AVX512BW-NEXT: vpmovb2m %zmm3, %k1 +; AVX512BW-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,2,3],zmm1[2,3,0,1] +; AVX512BW-NEXT: vblendmps %zmm0, %zmm2, %zmm0 {%k1} +; AVX512BW-NEXT: retq + %x2 = shufflevector <16 x float> %x, <16 x float> %x1, <16 x i32> + %res = select <16 x i1> %mask, <16 x float> %x2, <16 x float> %y + ret <16 x float> %res +} + +define <16 x i32> @test_vshufi32x4_512_mask(<16 x i32> %x, <16 x i32> %x1, <16 x i32> %y, <16 x i1> %mask) nounwind { +; AVX512F-LABEL: test_vshufi32x4_512_mask: +; AVX512F: # BB#0: +; AVX512F-NEXT: vpmovsxbd %xmm3, %zmm3 +; AVX512F-NEXT: vpslld $31, %zmm3, %zmm3 +; AVX512F-NEXT: vptestmd %zmm3, %zmm3, %k1 +; AVX512F-NEXT: vshufi64x2 {{.*#+}} zmm0 = zmm0[0,1,2,3],zmm1[2,3,0,1] +; AVX512F-NEXT: vpblendmd %zmm0, %zmm2, %zmm0 {%k1} +; AVX512F-NEXT: retq +; +; AVX512BW-LABEL: test_vshufi32x4_512_mask: +; AVX512BW: # BB#0: +; AVX512BW-NEXT: vpsllw $7, %xmm3, %xmm3 +; AVX512BW-NEXT: vpmovb2m %zmm3, %k1 +; AVX512BW-NEXT: vshufi64x2 {{.*#+}} zmm0 = zmm0[0,1,2,3],zmm1[2,3,0,1] +; AVX512BW-NEXT: vpblendmd %zmm0, %zmm2, %zmm0 {%k1} +; AVX512BW-NEXT: retq + %x2 = shufflevector <16 x i32> %x, <16 x i32> %x1, <16 x i32> + %res = select <16 x i1> %mask, <16 x i32> %x2, <16 x i32> %y + ret <16 x i32> %res +}