@@ -5987,3 +5987,87 @@ define <16 x i32>@test_int_x86_avx512_mask_psrl_di_512(<16 x i32> %x0, i8 %x1, <
5987
5987
%res4 = add <16 x i32 > %res2 , %res3
5988
5988
ret <16 x i32 > %res4
5989
5989
}
5990
+
5991
+ declare <2 x i64 > @llvm.x86.avx512.mask.psrlv2.di (<2 x i64 >, <2 x i64 >, <2 x i64 >, i8 )
5992
+
5993
+ define <2 x i64 >@test_int_x86_avx512_mask_psrlv2_di (<2 x i64 > %x0 , <2 x i64 > %x1 , <2 x i64 > %x2 , i8 %x3 ) {
5994
+ ; CHECK-LABEL: test_int_x86_avx512_mask_psrlv2_di:
5995
+ ; CHECK: ## BB#0:
5996
+ ; CHECK-NEXT: movzbl %dil, %eax
5997
+ ; CHECK-NEXT: kmovw %eax, %k1
5998
+ ; CHECK-NEXT: vpsrlvq %xmm1, %xmm0, %xmm2 {%k1}
5999
+ ; CHECK-NEXT: vpsrlvq %xmm1, %xmm0, %xmm3 {%k1} {z}
6000
+ ; CHECK-NEXT: vpsrlvq %xmm1, %xmm0, %xmm0
6001
+ ; CHECK-NEXT: vpaddq %xmm3, %xmm2, %xmm1
6002
+ ; CHECK-NEXT: vpaddq %xmm0, %xmm1, %xmm0
6003
+ ; CHECK-NEXT: retq
6004
+ %res = call <2 x i64 > @llvm.x86.avx512.mask.psrlv2.di (<2 x i64 > %x0 , <2 x i64 > %x1 , <2 x i64 > %x2 , i8 %x3 )
6005
+ %res1 = call <2 x i64 > @llvm.x86.avx512.mask.psrlv2.di (<2 x i64 > %x0 , <2 x i64 > %x1 , <2 x i64 > zeroinitializer , i8 %x3 )
6006
+ %res2 = call <2 x i64 > @llvm.x86.avx512.mask.psrlv2.di (<2 x i64 > %x0 , <2 x i64 > %x1 , <2 x i64 > %x2 , i8 -1 )
6007
+ %res3 = add <2 x i64 > %res , %res1
6008
+ %res4 = add <2 x i64 > %res3 , %res2
6009
+ ret <2 x i64 > %res4
6010
+ }
6011
+
6012
+ declare <4 x i64 > @llvm.x86.avx512.mask.psrlv4.di (<4 x i64 >, <4 x i64 >, <4 x i64 >, i8 )
6013
+
6014
+ define <4 x i64 >@test_int_x86_avx512_mask_psrlv4_di (<4 x i64 > %x0 , <4 x i64 > %x1 , <4 x i64 > %x2 , i8 %x3 ) {
6015
+ ; CHECK-LABEL: test_int_x86_avx512_mask_psrlv4_di:
6016
+ ; CHECK: ## BB#0:
6017
+ ; CHECK-NEXT: movzbl %dil, %eax
6018
+ ; CHECK-NEXT: kmovw %eax, %k1
6019
+ ; CHECK-NEXT: vpsrlvq %ymm1, %ymm0, %ymm2 {%k1}
6020
+ ; CHECK-NEXT: vpsrlvq %ymm1, %ymm0, %ymm3 {%k1} {z}
6021
+ ; CHECK-NEXT: vpsrlvq %ymm1, %ymm0, %ymm0
6022
+ ; CHECK-NEXT: vpaddq %ymm3, %ymm2, %ymm1
6023
+ ; CHECK-NEXT: vpaddq %ymm0, %ymm1, %ymm0
6024
+ ; CHECK-NEXT: retq
6025
+ %res = call <4 x i64 > @llvm.x86.avx512.mask.psrlv4.di (<4 x i64 > %x0 , <4 x i64 > %x1 , <4 x i64 > %x2 , i8 %x3 )
6026
+ %res1 = call <4 x i64 > @llvm.x86.avx512.mask.psrlv4.di (<4 x i64 > %x0 , <4 x i64 > %x1 , <4 x i64 > zeroinitializer , i8 %x3 )
6027
+ %res2 = call <4 x i64 > @llvm.x86.avx512.mask.psrlv4.di (<4 x i64 > %x0 , <4 x i64 > %x1 , <4 x i64 > %x2 , i8 -1 )
6028
+ %res3 = add <4 x i64 > %res , %res1
6029
+ %res4 = add <4 x i64 > %res3 , %res2
6030
+ ret <4 x i64 > %res4
6031
+ }
6032
+
6033
+ declare <4 x i32 > @llvm.x86.avx512.mask.psrlv4.si (<4 x i32 >, <4 x i32 >, <4 x i32 >, i8 )
6034
+
6035
+ define <4 x i32 >@test_int_x86_avx512_mask_psrlv4_si (<4 x i32 > %x0 , <4 x i32 > %x1 , <4 x i32 > %x2 , i8 %x3 ) {
6036
+ ; CHECK-LABEL: test_int_x86_avx512_mask_psrlv4_si:
6037
+ ; CHECK: ## BB#0:
6038
+ ; CHECK-NEXT: movzbl %dil, %eax
6039
+ ; CHECK-NEXT: kmovw %eax, %k1
6040
+ ; CHECK-NEXT: vpsrlvd %xmm1, %xmm0, %xmm2 {%k1}
6041
+ ; CHECK-NEXT: vpsrlvd %xmm1, %xmm0, %xmm3 {%k1} {z}
6042
+ ; CHECK-NEXT: vpsrlvd %xmm1, %xmm0, %xmm0
6043
+ ; CHECK-NEXT: vpaddd %xmm3, %xmm2, %xmm1
6044
+ ; CHECK-NEXT: vpaddd %xmm0, %xmm1, %xmm0
6045
+ ; CHECK-NEXT: retq
6046
+ %res = call <4 x i32 > @llvm.x86.avx512.mask.psrlv4.si (<4 x i32 > %x0 , <4 x i32 > %x1 , <4 x i32 > %x2 , i8 %x3 )
6047
+ %res1 = call <4 x i32 > @llvm.x86.avx512.mask.psrlv4.si (<4 x i32 > %x0 , <4 x i32 > %x1 , <4 x i32 > zeroinitializer , i8 %x3 )
6048
+ %res2 = call <4 x i32 > @llvm.x86.avx512.mask.psrlv4.si (<4 x i32 > %x0 , <4 x i32 > %x1 , <4 x i32 > %x2 , i8 -1 )
6049
+ %res3 = add <4 x i32 > %res , %res1
6050
+ %res4 = add <4 x i32 > %res3 , %res2
6051
+ ret <4 x i32 > %res4
6052
+ }
6053
+
6054
+ declare <8 x i32 > @llvm.x86.avx512.mask.psrlv8.si (<8 x i32 >, <8 x i32 >, <8 x i32 >, i8 )
6055
+
6056
+ define <8 x i32 >@test_int_x86_avx512_mask_psrlv8_si (<8 x i32 > %x0 , <8 x i32 > %x1 , <8 x i32 > %x2 , i8 %x3 ) {
6057
+ ; CHECK-LABEL: test_int_x86_avx512_mask_psrlv8_si:
6058
+ ; CHECK: ## BB#0:
6059
+ ; CHECK-NEXT: movzbl %dil, %eax
6060
+ ; CHECK-NEXT: kmovw %eax, %k1
6061
+ ; CHECK-NEXT: vpsrlvd %ymm1, %ymm0, %ymm2 {%k1}
6062
+ ; CHECK-NEXT: vpsrlvd %ymm1, %ymm0, %ymm3 {%k1} {z}
6063
+ ; CHECK-NEXT: vpsrlvd %ymm1, %ymm0, %ymm0
6064
+ ; CHECK-NEXT: vpaddd %ymm3, %ymm2, %ymm1
6065
+ ; CHECK-NEXT: vpaddd %ymm0, %ymm1, %ymm0
6066
+ ; CHECK-NEXT: retq
6067
+ %res = call <8 x i32 > @llvm.x86.avx512.mask.psrlv8.si (<8 x i32 > %x0 , <8 x i32 > %x1 , <8 x i32 > %x2 , i8 %x3 )
6068
+ %res1 = call <8 x i32 > @llvm.x86.avx512.mask.psrlv8.si (<8 x i32 > %x0 , <8 x i32 > %x1 , <8 x i32 > zeroinitializer , i8 %x3 )
6069
+ %res2 = call <8 x i32 > @llvm.x86.avx512.mask.psrlv8.si (<8 x i32 > %x0 , <8 x i32 > %x1 , <8 x i32 > %x2 , i8 -1 )
6070
+ %res3 = add <8 x i32 > %res , %res1
6071
+ %res4 = add <8 x i32 > %res3 , %res2
6072
+ ret <8 x i32 > %res4
6073
+ }
0 commit comments