forked from OSchip/llvm-project
[X86][AVX] ComputeNumSignBitsForTargetNode - add support for X86ISD::VTRUNC
llvm-svn: 316462
This commit is contained in:
parent
8aa32ffbad
commit
5e8c3f328f
|
@ -27239,6 +27239,16 @@ unsigned X86TargetLowering::ComputeNumSignBitsForTargetNode(
|
|||
return Tmp;
|
||||
}
|
||||
|
||||
case X86ISD::VTRUNC: {
|
||||
SDValue Src = Op.getOperand(0);
|
||||
unsigned NumSrcBits = Src.getScalarValueSizeInBits();
|
||||
assert(VTBits < NumSrcBits && "Illegal truncation input type");
|
||||
unsigned Tmp = DAG.ComputeNumSignBits(Src, Depth + 1);
|
||||
if (Tmp > (NumSrcBits - VTBits))
|
||||
return Tmp - (NumSrcBits - VTBits);
|
||||
return 1;
|
||||
}
|
||||
|
||||
case X86ISD::PACKSS: {
|
||||
// PACKSS is just a truncation if the sign bits extend to the packed size.
|
||||
// TODO: Add DemandedElts support.
|
||||
|
|
|
@ -254,9 +254,7 @@ define <8 x i16> @avg_v8i16_mask(<8 x i16> %a, <8 x i16> %b, <8 x i16> %src, i8
|
|||
; AVX512F-NEXT: kmovw %edi, %k1
|
||||
; AVX512F-NEXT: vpternlogq $255, %zmm1, %zmm1, %zmm1 {%k1} {z}
|
||||
; AVX512F-NEXT: vpmovqw %zmm1, %xmm1
|
||||
; AVX512F-NEXT: vpand %xmm1, %xmm0, %xmm0
|
||||
; AVX512F-NEXT: vpandn %xmm2, %xmm1, %xmm1
|
||||
; AVX512F-NEXT: vpor %xmm1, %xmm0, %xmm0
|
||||
; AVX512F-NEXT: vpblendvb %xmm1, %xmm0, %xmm2, %xmm0
|
||||
; AVX512F-NEXT: vzeroupper
|
||||
; AVX512F-NEXT: retq
|
||||
;
|
||||
|
@ -311,9 +309,7 @@ define <16 x i16> @avg_v16i16_mask(<16 x i16> %a, <16 x i16> %b, <16 x i16> %src
|
|||
; AVX512F-NEXT: kmovw %edi, %k1
|
||||
; AVX512F-NEXT: vpternlogd $255, %zmm1, %zmm1, %zmm1 {%k1} {z}
|
||||
; AVX512F-NEXT: vpmovdw %zmm1, %ymm1
|
||||
; AVX512F-NEXT: vpand %ymm1, %ymm0, %ymm0
|
||||
; AVX512F-NEXT: vpandn %ymm2, %ymm1, %ymm1
|
||||
; AVX512F-NEXT: vpor %ymm1, %ymm0, %ymm0
|
||||
; AVX512F-NEXT: vpblendvb %ymm1, %ymm0, %ymm2, %ymm0
|
||||
; AVX512F-NEXT: retq
|
||||
;
|
||||
; AVX512BWVL-LABEL: avg_v16i16_mask:
|
||||
|
|
|
@ -54,9 +54,7 @@ define <16 x i8> @vselect_packss_v16i16(<16 x i16> %a0, <16 x i16> %a1, <16 x i8
|
|||
; AVX512-NEXT: vpcmpeqw %ymm1, %ymm0, %ymm0
|
||||
; AVX512-NEXT: vpmovsxwd %ymm0, %zmm0
|
||||
; AVX512-NEXT: vpmovdb %zmm0, %xmm0
|
||||
; AVX512-NEXT: vpand %xmm2, %xmm0, %xmm1
|
||||
; AVX512-NEXT: vpandn %xmm3, %xmm0, %xmm0
|
||||
; AVX512-NEXT: vpor %xmm0, %xmm1, %xmm0
|
||||
; AVX512-NEXT: vpblendvb %xmm0, %xmm2, %xmm3, %xmm0
|
||||
; AVX512-NEXT: vzeroupper
|
||||
; AVX512-NEXT: retq
|
||||
%1 = icmp eq <16 x i16> %a0, %a1
|
||||
|
@ -134,9 +132,7 @@ define <16 x i8> @vselect_packss_v16i32(<16 x i32> %a0, <16 x i32> %a1, <16 x i8
|
|||
; AVX512-NEXT: vpcmpeqd %zmm1, %zmm0, %k1
|
||||
; AVX512-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
|
||||
; AVX512-NEXT: vpmovdb %zmm0, %xmm0
|
||||
; AVX512-NEXT: vpand %xmm2, %xmm0, %xmm1
|
||||
; AVX512-NEXT: vpandn %xmm3, %xmm0, %xmm0
|
||||
; AVX512-NEXT: vpor %xmm0, %xmm1, %xmm0
|
||||
; AVX512-NEXT: vpblendvb %xmm0, %xmm2, %xmm3, %xmm0
|
||||
; AVX512-NEXT: vzeroupper
|
||||
; AVX512-NEXT: retq
|
||||
%1 = icmp eq <16 x i32> %a0, %a1
|
||||
|
@ -392,9 +388,7 @@ define <16 x i8> @vselect_packss_v16i64(<16 x i64> %a0, <16 x i64> %a1, <16 x i8
|
|||
; AVX512-NEXT: vpmovqd %zmm0, %ymm0
|
||||
; AVX512-NEXT: vinserti64x4 $1, %ymm0, %zmm8, %zmm0
|
||||
; AVX512-NEXT: vpmovdb %zmm0, %xmm0
|
||||
; AVX512-NEXT: vpand %xmm4, %xmm0, %xmm1
|
||||
; AVX512-NEXT: vpandn %xmm5, %xmm0, %xmm0
|
||||
; AVX512-NEXT: vpor %xmm0, %xmm1, %xmm0
|
||||
; AVX512-NEXT: vpblendvb %xmm0, %xmm4, %xmm5, %xmm0
|
||||
; AVX512-NEXT: vzeroupper
|
||||
; AVX512-NEXT: retq
|
||||
%1 = icmp eq <16 x i64> %a0, %a1
|
||||
|
|
Loading…
Reference in New Issue