https://github.com/arsenm updated https://github.com/llvm/llvm-project/pull/174023
>From 1c3d261925f681ac68a6eaf24d227004d0dfc34e Mon Sep 17 00:00:00 2001 From: Matt Arsenault <[email protected]> Date: Tue, 30 Dec 2025 20:19:45 +0100 Subject: [PATCH] InstCombine: Handle fmul by -0 case in SimplifyDemandedFPClass The fmul visitor handles this case as copysign and fneg. --- .../InstCombineSimplifyDemanded.cpp | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp b/llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp index 5e200560e83d1..cd46f5f0bc881 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp @@ -2180,8 +2180,6 @@ Value *InstCombinerImpl::SimplifyDemandedUseFPClass(Value *V, // X * -0.0 --> copysign(0.0, -X) // TODO: Apply knowledge of no-infinity returns to sources. - - // TODO: Known -0, turn into copysign(y, fneg(x)) like visitFMul. if (KnownLHS.isKnownNeverInfOrNaN() && KnownRHS.isKnownAlways(fcPosZero | fcNan)) { // => copysign(+0, lhs) @@ -2200,6 +2198,26 @@ Value *InstCombinerImpl::SimplifyDemandedUseFPClass(Value *V, return Copysign; } + if (KnownLHS.isKnownNeverInfOrNaN() && + KnownRHS.isKnownAlways(fcNegZero | fcNan)) { + // => copysign(0, fneg(lhs)) + // Note: Dropping canonicalize + Value *Copysign = + Builder.CreateCopySign(Y, Builder.CreateFNegFMF(X, FMF), FMF); + Copysign->takeName(I); + return Copysign; + } + + if (KnownLHS.isKnownAlways(fcNegZero | fcNan) && + KnownRHS.isKnownNeverInfOrNaN()) { + // => copysign(+0, fneg(rhs)) + // Note: Dropping canonicalize + Value *Copysign = + Builder.CreateCopySign(X, Builder.CreateFNegFMF(Y, FMF), FMF); + Copysign->takeName(I); + return Copysign; + } + Type *EltTy = VTy->getScalarType(); DenormalMode Mode = F.getDenormalMode(EltTy->getFltSemantics()); _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
