[llvm] InstCombine: Improve single-use fneg(fabs(x)) SimplifyDemandedFPClass handling (PR #176360)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Fri Jan 30 05:15:40 PST 2026
================
@@ -2258,6 +2283,44 @@ Value *InstCombinerImpl::SimplifyDemandedUseFPClass(Instruction *I,
switch (I->getOpcode()) {
case Instruction::FNeg: {
+ // Special case fneg(fabs(x))
+
+ Value *FNegSrc = I->getOperand(0);
+ Value *FNegFAbsSrc;
+ if (match(FNegSrc, m_OneUse(m_FAbs(m_Value(FNegFAbsSrc))))) {
+ KnownFPClass KnownSrc;
+ if (SimplifyDemandedFPClass(cast<Instruction>(FNegSrc), 0,
+ llvm::unknown_sign(DemandedMask), KnownSrc,
+ Depth + 1))
+ return I;
+
+ FastMathFlags FabsFMF = cast<FPMathOperator>(FNegSrc)->getFastMathFlags();
+ FPClassTest ThisDemandedMask =
+ adjustDemandedMaskFromFlags(DemandedMask, FabsFMF);
+
+ bool IsNSZ = FMF.noSignedZeros() ||
+ (FabsFMF.noSignedZeros() && FNegSrc->hasOneUse());
----------------
arsenm wrote:
Actually I think I put the new one in the wrong place
https://github.com/llvm/llvm-project/pull/176360
More information about the llvm-commits
mailing list