[llvm] [X86] X86TargetLowering::computeKnownBitsForTargetNode - add X86ISD::VPMADD52L\H handling (PR #156349)
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 1 09:04:56 PDT 2025
================
@@ -38994,9 +38994,49 @@ void X86TargetLowering::computeKnownBitsForTargetNode(const SDValue Op,
computeKnownBitsForPSADBW(LHS, RHS, Known, DemandedElts, DAG, Depth);
break;
}
+
}
break;
}
+ case X86ISD::VPMADD52L:
+ case X86ISD::VPMADD52H: {
+ EVT VT = Op.getValueType();
+ if (!VT.isVector() || VT.getScalarSizeInBits() != 64) {
+ Known.resetAll();
+ return;
+ }
+
+ const unsigned BW = 64;
+ APInt Low52 = APInt::getLowBitsSet(BW, 52);
+ APInt High12 = APInt::getBitsSetFrom(BW, 52);
+
+ KnownBits K0 =
+ DAG.computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
+ KnownBits K1 =
+ DAG.computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1);
+ KnownBits KAcc =
+ DAG.computeKnownBits(Op.getOperand(2), DemandedElts, Depth + 1);
+
+ if ((K0.Zero & Low52) == Low52 || (K1.Zero & Low52) == Low52) {
+ Known = KAcc;
+ return;
+ }
----------------
RKSimon wrote:
Take a look at #156293 where we have to do something very similar - we should be able to simplify this to:
```
K0 = K0,trunc(52);
K1 = K1,trunc(52);
KnownBits KnownMul = Opc == X86ISD::VPMADD52L ? KnownBits::mul(K0, K1) : KnownBits::mulhu(K0, K1);
KnownMul = KnownMul.zext(64);
KnownBits OutKB = KnownBits::computeForAddSub(true, false, false, KAcc, KnownMul);
```
https://github.com/llvm/llvm-project/pull/156349
More information about the llvm-commits
mailing list