mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 03:02:36 +01:00
[SelectionDAG] Better ISD::ANY_EXTEND/ISD::ANY_EXTEND_VECTOR_INREG ComputeKnownBits support
Add DemandedElts handling to ISD::ANY_EXTEND and add missing ISD::ANY_EXTEND_VECTOR_INREG handling. Despite the lack of test changes this code IS being used - its just that the ANY_EXTEND ops are legalized later on (typically to ZERO_EXTEND equivalents) so we typically manage to combine later on.
This commit is contained in:
parent
7d570d46c1
commit
3d9a43315e
@ -3099,8 +3099,15 @@ KnownBits SelectionDAG::computeKnownBits(SDValue Op, const APInt &DemandedElts,
|
||||
Known = Known.sext(BitWidth);
|
||||
break;
|
||||
}
|
||||
case ISD::ANY_EXTEND_VECTOR_INREG: {
|
||||
EVT InVT = Op.getOperand(0).getValueType();
|
||||
APInt InDemandedElts = DemandedElts.zextOrSelf(InVT.getVectorNumElements());
|
||||
Known = computeKnownBits(Op.getOperand(0), InDemandedElts, Depth + 1);
|
||||
Known = Known.zext(BitWidth, false /* ExtendedBitsAreKnownZero */);
|
||||
break;
|
||||
}
|
||||
case ISD::ANY_EXTEND: {
|
||||
Known = computeKnownBits(Op.getOperand(0), Depth+1);
|
||||
Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
|
||||
Known = Known.zext(BitWidth, false /* ExtendedBitsAreKnownZero */);
|
||||
break;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user