Skip to content

Commit 8fbc7fd

Browse files
committed
[DAG] SimplifyMultipleUseDemandedBits - peek through unused ISD::INSERT_SUBVECTOR subvectors
If we don't demand any elements of the inserted subvector then just skip it.
1 parent 23ccc05 commit 8fbc7fd

File tree

4 files changed

+143
-137
lines changed

4 files changed

+143
-137
lines changed

llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp

+12
Original file line numberDiff line numberDiff line change
@@ -749,6 +749,18 @@ SDValue TargetLowering::SimplifyMultipleUseDemandedBits(
749749
return Vec;
750750
break;
751751
}
752+
case ISD::INSERT_SUBVECTOR: {
753+
// If we don't demand the inserted subvector, return the base vector.
754+
SDValue Vec = Op.getOperand(0);
755+
SDValue Sub = Op.getOperand(1);
756+
auto *CIdx = dyn_cast<ConstantSDNode>(Op.getOperand(2));
757+
unsigned NumVecElts = Vec.getValueType().getVectorNumElements();
758+
unsigned NumSubElts = Sub.getValueType().getVectorNumElements();
759+
if (CIdx && CIdx->getAPIntValue().ule(NumVecElts - NumSubElts))
760+
if (DemandedElts.extractBits(NumSubElts, CIdx->getZExtValue()) == 0)
761+
return Vec;
762+
break;
763+
}
752764
case ISD::VECTOR_SHUFFLE: {
753765
ArrayRef<int> ShuffleMask = cast<ShuffleVectorSDNode>(Op)->getMask();
754766

0 commit comments

Comments
 (0)