Skip to content

Commit c4ea7bd

Browse files
[DAG] Fold trunc(avg(x,y)) for avgceil/floor u/s nodes if they have sufficient leading zero/sign bits-11
1 parent 4e1af14 commit c4ea7bd

File tree

1 file changed

+5
-8
lines changed

1 file changed

+5
-8
lines changed

llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)