@@ -16302,10 +16302,9 @@ SDValue DAGCombiner::visitTRUNCATE(SDNode *N) {
1630216302 SDValue Y = N0.getOperand(1);
1630316303 unsigned SrcBits = X.getScalarValueSizeInBits();
1630416304 unsigned DstBits = VT.getScalarSizeInBits();
16305- KnownBits KnownX = DAG.computeKnownBits(X);
16306- KnownBits KnownY = DAG.computeKnownBits(Y);
16307- if (KnownX.countMinLeadingZeros() >= (SrcBits - DstBits) &&
16308- KnownY.countMinLeadingZeros() >= (SrcBits - DstBits)) {
16305+ APInt UpperBits = APInt::getBitsSetFrom(SrcBits, DstBits);
16306+ if (DAG.MaskedValueIsZero(X, UpperBits) &&
16307+ DAG.MaskedValueIsZero(Y, UpperBits)) {
1630916308 SDValue Tx = DAG.getNode(ISD::TRUNCATE, DL, VT, X);
1631016309 SDValue Ty = DAG.getNode(ISD::TRUNCATE, DL, VT, Y);
1631116310 return DAG.getNode(N0.getOpcode(), DL, VT, Tx, Ty);
@@ -16318,13 +16317,11 @@ SDValue DAGCombiner::visitTRUNCATE(SDNode *N) {
1631816317 TLI.isOperationLegal(N0.getOpcode(), VT)) {
1631916318 SDValue X = N0.getOperand(0);
1632016319 SDValue Y = N0.getOperand(1);
16321- unsigned SignBitsX = DAG.ComputeNumSignBits(X);
16322- unsigned SignBitsY = DAG.ComputeNumSignBits(Y);
1632316320 unsigned SrcBits = X.getScalarValueSizeInBits();
1632416321 unsigned DstBits = VT.getScalarSizeInBits();
1632516322 unsigned NeededSignBits = SrcBits - DstBits + 1;
16326-
16327- if (SignBitsX >= NeededSignBits && SignBitsY >= NeededSignBits) {
16323+ if (DAG.ComputeNumSignBits(X) >= NeededSignBits &&
16324+ DAG.ComputeNumSignBits(Y) >= NeededSignBits) {
1632816325 SDValue Tx = DAG.getNode(ISD::TRUNCATE, DL, VT, X);
1632916326 SDValue Ty = DAG.getNode(ISD::TRUNCATE, DL, VT, Y);
1633016327 return DAG.getNode(N0.getOpcode(), DL, VT, Tx, Ty);
0 commit comments