[llvm] InstCombine: Improve single-use fneg(fabs(x)) SimplifyDemandedFPClass handling (PR #176360)
Yingwei Zheng via llvm-commits
llvm-commits at lists.llvm.org
Fri Jan 30 05:10:25 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());
----------------
dtcxzyw wrote:
Duplicate one-use check.
https://github.com/llvm/llvm-project/pull/176360
More information about the llvm-commits
mailing list