[llvm] [X86] Fold X * 1 + Z --> X + Z for VPMADD52L (PR #158516)
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 15 02:27:13 PDT 2025
================
@@ -44978,19 +44979,33 @@ bool X86TargetLowering::SimplifyDemandedBitsForTargetNode(
return true;
KnownBits KnownMul;
- KnownOp0 = KnownOp0.trunc(52);
- KnownOp1 = KnownOp1.trunc(52);
+ KnownOp0 = OrigKnownOp0.trunc(52);
+ KnownOp1 = OrigKnownOp1.trunc(52);
KnownMul = Opc == X86ISD::VPMADD52L ? KnownBits::mul(KnownOp0, KnownOp1)
: KnownBits::mulhu(KnownOp0, KnownOp1);
KnownMul = KnownMul.zext(64);
+ SDLoc DL(Op);
// lo/hi(X * Y) + Z --> C + Z
if (KnownMul.isConstant()) {
- SDLoc DL(Op);
SDValue C = TLO.DAG.getConstant(KnownMul.getConstant(), DL, VT);
return TLO.CombineTo(Op, TLO.DAG.getNode(ISD::ADD, DL, VT, C, Op2));
}
+ // C * X --> X * C
+ if (KnownOp0.isConstant()) {
+ std::swap(OrigKnownOp0, OrigKnownOp1);
+ std::swap(KnownOp0, KnownOp1);
+ std::swap(Op0, Op1);
+ }
+
+ // lo(X * 1) + Z --> lo(X) + Z --> X iff X == lo(X)
----------------
RKSimon wrote:
`lo(X * 1) + Z --> lo(X) + Z iff X == lo(X)`
https://github.com/llvm/llvm-project/pull/158516
More information about the llvm-commits
mailing list