@@ -990,23 +990,38 @@ bb:
990990 ret void
991991}
992992
993- define <8 x i64 > @pr121147 (< 8 x i64 > %a ) {
994- ; AVX512F-LABEL: pr121147 :
995- ; AVX512F: # %bb.0: # %entry
993+ define <16 x i32 > @gen_VPSHUFD_AVX512_0 (< 16 x i32 > %a ) {
994+ ; AVX512F-LABEL: gen_VPSHUFD_AVX512_0 :
995+ ; AVX512F: # %bb.0:
996996; AVX512F-NEXT: movw $-21846, %ax # imm = 0xAAAA
997997; AVX512F-NEXT: kmovw %eax, %k1
998- ; AVX512F-NEXT: vpshufd {{.*#+}} zmm0 {%k1} {z} = zmm0[0 ,2,0 ,2,4 ,6,4 ,6,8 ,10,8 ,10,12 ,14,12 ,14]
998+ ; AVX512F-NEXT: vpshufd {{.*#+}} zmm0 {%k1} {z} = zmm0[2 ,2,2 ,2,6 ,6,6 ,6,10 ,10,10 ,10,14 ,14,14 ,14]
999999; AVX512F-NEXT: retq
10001000;
1001- ; AVX512BW-LABEL: pr121147 :
1002- ; AVX512BW: # %bb.0: # %entry
1001+ ; AVX512BW-LABEL: gen_VPSHUFD_AVX512_0 :
1002+ ; AVX512BW: # %bb.0:
10031003; AVX512BW-NEXT: movw $-21846, %ax # imm = 0xAAAA
10041004; AVX512BW-NEXT: kmovd %eax, %k1
1005- ; AVX512BW-NEXT: vpshufd {{.*#+}} zmm0 {%k1} {z} = zmm0[0 ,2,0 ,2,4 ,6,4 ,6,8 ,10,8 ,10,12 ,14,12 ,14]
1005+ ; AVX512BW-NEXT: vpshufd {{.*#+}} zmm0 {%k1} {z} = zmm0[2 ,2,2 ,2,6 ,6,6 ,6,10 ,10,10 ,10,14 ,14,14 ,14]
10061006; AVX512BW-NEXT: retq
1007- entry:
1008- %0 = bitcast <8 x i64 > %a to <16 x i32 >
1009- %1 = shufflevector <16 x i32 > <i32 0 , i32 poison, i32 0 , i32 poison, i32 0 , i32 poison, i32 0 , i32 poison, i32 0 , i32 poison, i32 0 , i32 poison, i32 0 , i32 poison, i32 0 , i32 poison>, <16 x i32 > %0 , <16 x i32 > <i32 0 , i32 18 , i32 2 , i32 18 , i32 4 , i32 22 , i32 6 , i32 22 , i32 8 , i32 26 , i32 10 , i32 26 , i32 12 , i32 30 , i32 14 , i32 30 >
1010- %2 = bitcast <16 x i32 > %1 to <8 x i64 >
1011- ret <8 x i64 > %2
1007+ %res = shufflevector <16 x i32 > <i32 0 , i32 poison, i32 0 , i32 poison, i32 0 , i32 poison, i32 0 , i32 poison, i32 0 , i32 poison, i32 0 , i32 poison, i32 0 , i32 poison, i32 0 , i32 poison>, <16 x i32 > %a , <16 x i32 > <i32 0 , i32 18 , i32 2 , i32 18 , i32 4 , i32 22 , i32 6 , i32 22 , i32 8 , i32 26 , i32 10 , i32 26 , i32 12 , i32 30 , i32 14 , i32 30 >
1008+ ret <16 x i32 > %res
1009+ }
1010+
1011+ define <16 x i32 > @gen_VPSHUFD_AVX512_1 (<16 x i32 > %a ) {
1012+ ; AVX512F-LABEL: gen_VPSHUFD_AVX512_1:
1013+ ; AVX512F: # %bb.0:
1014+ ; AVX512F-NEXT: movw $-21846, %ax # imm = 0xAAAA
1015+ ; AVX512F-NEXT: kmovw %eax, %k1
1016+ ; AVX512F-NEXT: vpshufd {{.*#+}} zmm0 {%k1} {z} = zmm0[2,2,2,2,6,6,6,6,10,10,10,10,14,14,14,14]
1017+ ; AVX512F-NEXT: retq
1018+ ;
1019+ ; AVX512BW-LABEL: gen_VPSHUFD_AVX512_1:
1020+ ; AVX512BW: # %bb.0:
1021+ ; AVX512BW-NEXT: movw $-21846, %ax # imm = 0xAAAA
1022+ ; AVX512BW-NEXT: kmovd %eax, %k1
1023+ ; AVX512BW-NEXT: vpshufd {{.*#+}} zmm0 {%k1} {z} = zmm0[2,2,2,2,6,6,6,6,10,10,10,10,14,14,14,14]
1024+ ; AVX512BW-NEXT: retq
1025+ %res = shufflevector <16 x i32 > %a , <16 x i32 > <i32 0 , i32 poison, i32 0 , i32 poison, i32 0 , i32 poison, i32 0 , i32 poison, i32 0 , i32 poison, i32 0 , i32 poison, i32 0 , i32 poison, i32 0 , i32 poison>, <16 x i32 > <i32 16 , i32 2 , i32 18 , i32 2 , i32 20 , i32 6 , i32 22 , i32 6 , i32 24 , i32 10 , i32 26 , i32 10 , i32 28 , i32 14 , i32 30 , i32 14 >
1026+ ret <16 x i32 > %res
10121027}
0 commit comments