forked from OSchip/llvm-project
[X86][SSE] Early out from ComputeNumSignBitsForTargetNode. NFCI.
Early out from vector shift by immediates that will exceed eltsize - don't bother making an unnecessary ComputeNumSignBits recursive call. llvm-svn: 314903
This commit is contained in:
parent
bbf56fb621
commit
46a366ccb7
|
@ -27210,20 +27210,24 @@ unsigned X86TargetLowering::ComputeNumSignBitsForTargetNode(
|
|||
}
|
||||
|
||||
case X86ISD::VSHLI: {
|
||||
// TODO: Add DemandedElts support.
|
||||
SDValue Src = Op.getOperand(0);
|
||||
unsigned Tmp = DAG.ComputeNumSignBits(Src, Depth + 1);
|
||||
APInt ShiftVal = cast<ConstantSDNode>(Op.getOperand(1))->getAPIntValue();
|
||||
if (ShiftVal.uge(VTBits))
|
||||
return VTBits; // Shifted all bits out --> zero.
|
||||
unsigned Tmp = DAG.ComputeNumSignBits(Src, Depth + 1);
|
||||
if (ShiftVal.uge(Tmp))
|
||||
return 1; // Shifted all sign bits out --> unknown.
|
||||
return Tmp - ShiftVal.getZExtValue();
|
||||
}
|
||||
|
||||
case X86ISD::VSRAI: {
|
||||
// TODO: Add DemandedElts support.
|
||||
SDValue Src = Op.getOperand(0);
|
||||
unsigned Tmp = DAG.ComputeNumSignBits(Src, Depth + 1);
|
||||
APInt ShiftVal = cast<ConstantSDNode>(Op.getOperand(1))->getAPIntValue();
|
||||
if (ShiftVal.uge(VTBits - 1))
|
||||
return VTBits; // Sign splat.
|
||||
unsigned Tmp = DAG.ComputeNumSignBits(Src, Depth + 1);
|
||||
ShiftVal += Tmp;
|
||||
return ShiftVal.uge(VTBits) ? VTBits : ShiftVal.getZExtValue();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue