}
}
-defm VPSLLV : avx512_var_shift_types<0x47, "vpsllv", shl, SSE_INTSHIFT_P>,
- avx512_var_shift_w<0x12, "vpsllvw", shl, SSE_INTSHIFT_P>;
+let Sched = WriteVarVecShift in
+def AVX512_VARSHIFT_P : OpndItins<
+ IIC_SSE_INTSH_P_RR, IIC_SSE_INTSH_P_RM
+>;
+
+defm VPSLLV : avx512_var_shift_types<0x47, "vpsllv", shl, AVX512_VARSHIFT_P>,
+ avx512_var_shift_w<0x12, "vpsllvw", shl, AVX512_VARSHIFT_P>;
-defm VPSRAV : avx512_var_shift_types<0x46, "vpsrav", sra, SSE_INTSHIFT_P>,
- avx512_var_shift_w<0x11, "vpsravw", sra, SSE_INTSHIFT_P>;
+defm VPSRAV : avx512_var_shift_types<0x46, "vpsrav", sra, AVX512_VARSHIFT_P>,
+ avx512_var_shift_w<0x11, "vpsravw", sra, AVX512_VARSHIFT_P>;
-defm VPSRLV : avx512_var_shift_types<0x45, "vpsrlv", srl, SSE_INTSHIFT_P>,
- avx512_var_shift_w<0x10, "vpsrlvw", srl, SSE_INTSHIFT_P>;
+defm VPSRLV : avx512_var_shift_types<0x45, "vpsrlv", srl, AVX512_VARSHIFT_P>,
+ avx512_var_shift_w<0x10, "vpsrlvw", srl, AVX512_VARSHIFT_P>;
-defm VPRORV : avx512_var_shift_types<0x14, "vprorv", rotr, SSE_INTSHIFT_P>;
-defm VPROLV : avx512_var_shift_types<0x15, "vprolv", rotl, SSE_INTSHIFT_P>;
+defm VPRORV : avx512_var_shift_types<0x14, "vprorv", rotr, AVX512_VARSHIFT_P>;
+defm VPROLV : avx512_var_shift_types<0x15, "vprolv", rotl, AVX512_VARSHIFT_P>;
defm : avx512_var_shift_lowering<avx512vl_i64_info, "VPSRAVQ", sra, [HasAVX512, NoVLX]>;
defm : avx512_var_shift_lowering<avx512vl_i16_info, "VPSLLVW", shl, [HasBWI, NoVLX]>;
; GENERIC: # %bb.0:
; GENERIC-NEXT: vpmovd2m %zmm0, %k0 # sched: [1:0.33]
; GENERIC-NEXT: vpmovm2d %k0, %zmm0 # sched: [1:0.33]
-; GENERIC-NEXT: vpsrld $31, %zmm0, %zmm0 # sched: [3:1.00]
+; GENERIC-NEXT: vpsrld $31, %zmm0, %zmm0 # sched: [1:1.00]
; GENERIC-NEXT: vcvtdq2ps %zmm0, %zmm0 # sched: [4:1.00]
; GENERIC-NEXT: retq # sched: [1:1.00]
;
; GENERIC: # %bb.0:
; GENERIC-NEXT: vpmovd2m %zmm0, %k0 # sched: [1:0.33]
; GENERIC-NEXT: vpmovm2d %k0, %zmm0 # sched: [1:0.33]
-; GENERIC-NEXT: vpsrld $31, %zmm0, %zmm1 # sched: [3:1.00]
+; GENERIC-NEXT: vpsrld $31, %zmm0, %zmm1 # sched: [1:1.00]
; GENERIC-NEXT: vcvtdq2pd %ymm1, %zmm0 # sched: [4:1.00]
; GENERIC-NEXT: vextracti64x4 $1, %zmm1, %ymm1 # sched: [1:1.00]
; GENERIC-NEXT: vcvtdq2pd %ymm1, %zmm1 # sched: [4:1.00]
; GENERIC: # %bb.0:
; GENERIC-NEXT: kmovd %edi, %k0 # sched: [1:0.33]
; GENERIC-NEXT: vpmovm2d %k0, %zmm0 # sched: [1:0.33]
-; GENERIC-NEXT: vpsrld $31, %zmm0, %zmm0 # sched: [3:1.00]
+; GENERIC-NEXT: vpsrld $31, %zmm0, %zmm0 # sched: [1:1.00]
; GENERIC-NEXT: retq # sched: [1:1.00]
;
; SKX-LABEL: zext_16i1_to_16xi32:
; GENERIC: # %bb.0:
; GENERIC-NEXT: kmovd %edi, %k0 # sched: [1:0.33]
; GENERIC-NEXT: vpmovm2q %k0, %zmm0 # sched: [1:0.33]
-; GENERIC-NEXT: vpsrlq $63, %zmm0, %zmm0 # sched: [3:1.00]
+; GENERIC-NEXT: vpsrlq $63, %zmm0, %zmm0 # sched: [1:1.00]
; GENERIC-NEXT: retq # sched: [1:1.00]
;
; SKX-LABEL: zext_8i1_to_8xi64:
define i16 @trunc_16i32_to_16i1(<16 x i32> %a) {
; GENERIC-LABEL: trunc_16i32_to_16i1:
; GENERIC: # %bb.0:
-; GENERIC-NEXT: vpslld $31, %zmm0, %zmm0 # sched: [3:1.00]
+; GENERIC-NEXT: vpslld $31, %zmm0, %zmm0 # sched: [1:1.00]
; GENERIC-NEXT: vpmovd2m %zmm0, %k0 # sched: [1:0.33]
; GENERIC-NEXT: kmovd %k0, %eax # sched: [1:0.33]
; GENERIC-NEXT: # kill: def $ax killed $ax killed $eax
define <64 x i16> @test21(<64 x i16> %x , <64 x i1> %mask) nounwind readnone {
; GENERIC-LABEL: test21:
; GENERIC: # %bb.0:
-; GENERIC-NEXT: vpsllw $7, %zmm2, %zmm2 # sched: [3:1.00]
+; GENERIC-NEXT: vpsllw $7, %zmm2, %zmm2 # sched: [1:1.00]
; GENERIC-NEXT: vpmovb2m %zmm2, %k1 # sched: [1:0.33]
; GENERIC-NEXT: vmovdqu16 %zmm0, %zmm0 {%k1} {z} # sched: [1:0.33]
; GENERIC-NEXT: kshiftrq $32, %k1, %k1 # sched: [1:1.00]
; GENERIC: # %bb.0:
; GENERIC-NEXT: vpcmpeqw %zmm1, %zmm0, %k0 # sched: [3:1.00]
; GENERIC-NEXT: vpmovm2w %k0, %zmm0 # sched: [1:0.33]
-; GENERIC-NEXT: vpsrlw $15, %zmm0, %zmm0 # sched: [3:1.00]
+; GENERIC-NEXT: vpsrlw $15, %zmm0, %zmm0 # sched: [1:1.00]
; GENERIC-NEXT: retq # sched: [1:1.00]
;
; SKX-LABEL: zext_32xi1_to_32xi16:
define void @store_32i1_1(<32 x i1>* %a, <32 x i16> %v) {
; GENERIC-LABEL: store_32i1_1:
; GENERIC: # %bb.0:
-; GENERIC-NEXT: vpsllw $15, %zmm0, %zmm0 # sched: [3:1.00]
+; GENERIC-NEXT: vpsllw $15, %zmm0, %zmm0 # sched: [1:1.00]
; GENERIC-NEXT: vpmovw2m %zmm0, %k0 # sched: [1:0.33]
; GENERIC-NEXT: kmovd %k0, (%rdi) # sched: [1:1.00]
; GENERIC-NEXT: vzeroupper # sched: [100:0.33]
;
; GENERIC-LABEL: store_64i1:
; GENERIC: # %bb.0:
-; GENERIC-NEXT: vpsllw $7, %zmm0, %zmm0 # sched: [3:1.00]
+; GENERIC-NEXT: vpsllw $7, %zmm0, %zmm0 # sched: [1:1.00]
; GENERIC-NEXT: vpmovb2m %zmm0, %k0 # sched: [1:0.33]
; GENERIC-NEXT: kmovq %k0, (%rdi) # sched: [1:1.00]
; GENERIC-NEXT: vzeroupper # sched: [100:0.33]