From 1ee59cba5d90841a615d95195a972b3c24c7dc2b Mon Sep 17 00:00:00 2001 From: Benjamin Kramer Date: Tue, 16 Jun 2015 14:57:29 +0000 Subject: [InstSimplify] Allow folding of fdiv X, X with just NaNs ignored Any combination of +-inf/+-inf is NaN so it's already ignored with nnan and we can skip checking for ninf. Also rephrase logic in comments a bit. llvm-svn: 239821 --- llvm/lib/Analysis/InstructionSimplify.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'llvm/lib/Analysis/InstructionSimplify.cpp') diff --git a/llvm/lib/Analysis/InstructionSimplify.cpp b/llvm/lib/Analysis/InstructionSimplify.cpp index 8f7a940aa95..12e406bb1a2 100644 --- a/llvm/lib/Analysis/InstructionSimplify.cpp +++ b/llvm/lib/Analysis/InstructionSimplify.cpp @@ -1126,13 +1126,13 @@ static Value *SimplifyFDivInst(Value *Op0, Value *Op1, FastMathFlags FMF, if (FMF.noNaNs() && FMF.noSignedZeros() && match(Op0, m_AnyZero())) return Op0; - if (FMF.noNaNs() && FMF.noInfs()) { - // X / X -> 1.0 iff NaNs and infinities are ignored. + if (FMF.noNaNs()) { + // X / X -> 1.0 is legal when NaNs are ignored. if (Op0 == Op1) return ConstantFP::get(Op0->getType(), 1.0); // -X / X -> -1.0 and - // X / -X -> -1.0 iff NaNs and infinities are ignored. + // X / -X -> -1.0 are legal when NaNs are ignored. // We can ignore signed zeros because +-0.0/+-0.0 is NaN and ignored. if ((BinaryOperator::isFNeg(Op0, /*IgnoreZeroSign=*/true) && BinaryOperator::getFNegArgument(Op0) == Op1) || -- cgit v1.2.3