summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorSimon Pilgrim <llvm-dev@redking.me.uk>2017-09-11 14:03:47 +0000
committerSimon Pilgrim <llvm-dev@redking.me.uk>2017-09-11 14:03:47 +0000
commitb092bd321a072f667dd0984fe2b07c144802b1aa (patch)
tree496dbe9cea126c6f321b2162b153af8047dac856 /llvm/lib
parent660ba2b8afb797fd9dfb0efa3c9135dec12a5424 (diff)
downloadbcm5719-llvm-b092bd321a072f667dd0984fe2b07c144802b1aa.tar.gz
bcm5719-llvm-b092bd321a072f667dd0984fe2b07c144802b1aa.zip
[X86][SSE] Add support for X86ISD::PACKSS to ComputeNumSignBitsForTargetNode
Helps improve combineLogicBlendIntoPBLENDV support by allowing us to peek into through PACKSS truncations of vector comparison results. Differential Revision: https://reviews.llvm.org/D37680 llvm-svn: 312916
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Target/X86/X86ISelLowering.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index 01bdce9fab9..5f3888a325d 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -27091,6 +27091,18 @@ unsigned X86TargetLowering::ComputeNumSignBitsForTargetNode(
return Tmp;
}
+ case X86ISD::PACKSS: {
+ // PACKSS is just a truncation if the sign bits extend to the packed size.
+ // TODO: Add DemandedElts support.
+ unsigned SrcBits = Op.getOperand(0).getScalarValueSizeInBits();
+ unsigned Tmp0 = DAG.ComputeNumSignBits(Op.getOperand(0), Depth + 1);
+ unsigned Tmp1 = DAG.ComputeNumSignBits(Op.getOperand(1), Depth + 1);
+ unsigned Tmp = std::min(Tmp0, Tmp1);
+ if (Tmp > (SrcBits - VTBits))
+ return Tmp - (SrcBits - VTBits);
+ return 1;
+ }
+
case X86ISD::VSHLI: {
SDValue Src = Op.getOperand(0);
unsigned Tmp = DAG.ComputeNumSignBits(Src, Depth + 1);
OpenPOWER on IntegriCloud