[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