@@ -42665,23 +42665,35 @@ SDValue X86TargetLowering::SimplifyMultipleUseDemandedBitsForTargetNode(
42665
42665
bool X86TargetLowering::isGuaranteedNotToBeUndefOrPoisonForTargetNode(
42666
42666
SDValue Op, const APInt &DemandedElts, const SelectionDAG &DAG,
42667
42667
bool PoisonOnly, unsigned Depth) const {
42668
- unsigned EltsBits = Op.getScalarValueSizeInBits();
42669
42668
unsigned NumElts = DemandedElts.getBitWidth();
42670
42669
42671
42670
// TODO: Add more target shuffles.
42672
42671
switch (Op.getOpcode()) {
42673
42672
case X86ISD::PSHUFD:
42674
42673
case X86ISD::VPERMILPI: {
42675
42674
SmallVector<int, 8> Mask;
42676
- DecodePSHUFMask(NumElts, EltsBits, Op.getConstantOperandVal(1), Mask);
42677
-
42678
- APInt DemandedSrcElts = APInt::getZero(NumElts);
42679
- for (unsigned I = 0; I != NumElts; ++I)
42680
- if (DemandedElts[I])
42681
- DemandedSrcElts.setBit(Mask[I]);
42682
-
42683
- return DAG.isGuaranteedNotToBeUndefOrPoison(
42684
- Op.getOperand(0), DemandedSrcElts, PoisonOnly, Depth + 1);
42675
+ SmallVector<SDValue, 2> Ops;
42676
+ if (getTargetShuffleMask(Op.getNode(), Op.getSimpleValueType(), true, Ops,
42677
+ Mask)) {
42678
+ SmallVector<APInt, 2> DemandedSrcElts(Ops.size(),
42679
+ APInt::getZero(NumElts));
42680
+ for (auto M : enumerate(Mask)) {
42681
+ if (!DemandedElts[M.index()] || M.value() == SM_SentinelZero)
42682
+ continue;
42683
+ if (M.value() == SM_SentinelUndef)
42684
+ return false;
42685
+ assert(0 <= M.value() && M.value() < (int)(Ops.size() * NumElts) &&
42686
+ "Shuffle mask index out of range");
42687
+ DemandedSrcElts[M.value() / NumElts].setBit(M.value() % NumElts);
42688
+ }
42689
+ for (auto Op : enumerate(Ops))
42690
+ if (!DemandedSrcElts[Op.index()].isZero() &&
42691
+ !DAG.isGuaranteedNotToBeUndefOrPoison(
42692
+ Op.value(), DemandedSrcElts[Op.index()], PoisonOnly, Depth + 1))
42693
+ return false;
42694
+ return true;
42695
+ }
42696
+ break;
42685
42697
}
42686
42698
}
42687
42699
return TargetLowering::isGuaranteedNotToBeUndefOrPoisonForTargetNode(
0 commit comments