From e90ea76380d411bf81861228f23e4716ef337100 Mon Sep 17 00:00:00 2001 From: Sanjay Patel Date: Wed, 30 Dec 2020 09:11:10 -0500 Subject: [PATCH] [IR] remove 'NoNan' param when creating FP reductions This is no-functional-change-intended (AFAIK, we can't isolate this difference in a regression test). That's because the callers should be setting the IRBuilder's FMF field when creating the reduction and/or setting those flags after creating. It doesn't make sense to override this one flag alone. This is part of a multi-step process to clean up the FMF setting/propagation. See PR35538 for an example. --- llvm/include/llvm/IR/IRBuilder.h | 4 ++-- llvm/lib/IR/IRBuilder.cpp | 20 ++++---------------- llvm/lib/Transforms/Utils/LoopUtils.cpp | 4 ++-- 3 files changed, 8 insertions(+), 20 deletions(-) diff --git a/llvm/include/llvm/IR/IRBuilder.h b/llvm/include/llvm/IR/IRBuilder.h index 4b26299..c9074ab 100644 --- a/llvm/include/llvm/IR/IRBuilder.h +++ b/llvm/include/llvm/IR/IRBuilder.h @@ -779,11 +779,11 @@ public: /// Create a vector float max reduction intrinsic of the source /// vector. - CallInst *CreateFPMaxReduce(Value *Src, bool NoNaN = false); + CallInst *CreateFPMaxReduce(Value *Src); /// Create a vector float min reduction intrinsic of the source /// vector. - CallInst *CreateFPMinReduce(Value *Src, bool NoNaN = false); + CallInst *CreateFPMinReduce(Value *Src); /// Create a lifetime.start intrinsic. /// diff --git a/llvm/lib/IR/IRBuilder.cpp b/llvm/lib/IR/IRBuilder.cpp index e8fa353..51e2891 100644 --- a/llvm/lib/IR/IRBuilder.cpp +++ b/llvm/lib/IR/IRBuilder.cpp @@ -380,24 +380,12 @@ CallInst *IRBuilderBase::CreateIntMinReduce(Value *Src, bool IsSigned) { return getReductionIntrinsic(this, ID, Src); } -CallInst *IRBuilderBase::CreateFPMaxReduce(Value *Src, bool NoNaN) { - auto Rdx = getReductionIntrinsic(this, Intrinsic::vector_reduce_fmax, Src); - if (NoNaN) { - FastMathFlags FMF; - FMF.setNoNaNs(); - Rdx->setFastMathFlags(FMF); - } - return Rdx; +CallInst *IRBuilderBase::CreateFPMaxReduce(Value *Src) { + return getReductionIntrinsic(this, Intrinsic::vector_reduce_fmax, Src); } -CallInst *IRBuilderBase::CreateFPMinReduce(Value *Src, bool NoNaN) { - auto Rdx = getReductionIntrinsic(this, Intrinsic::vector_reduce_fmin, Src); - if (NoNaN) { - FastMathFlags FMF; - FMF.setNoNaNs(); - Rdx->setFastMathFlags(FMF); - } - return Rdx; +CallInst *IRBuilderBase::CreateFPMinReduce(Value *Src) { + return getReductionIntrinsic(this, Intrinsic::vector_reduce_fmin, Src); } CallInst *IRBuilderBase::CreateLifetimeStart(Value *Ptr, ConstantInt *Size) { diff --git a/llvm/lib/Transforms/Utils/LoopUtils.cpp b/llvm/lib/Transforms/Utils/LoopUtils.cpp index 80ae6b3..a3665a5 100644 --- a/llvm/lib/Transforms/Utils/LoopUtils.cpp +++ b/llvm/lib/Transforms/Utils/LoopUtils.cpp @@ -1039,10 +1039,10 @@ Value *llvm::createSimpleTargetReduction( case Instruction::FCmp: if (Flags.IsMaxOp) { MinMaxKind = RD::MRK_FloatMax; - BuildFunc = [&]() { return Builder.CreateFPMaxReduce(Src, Flags.NoNaN); }; + BuildFunc = [&]() { return Builder.CreateFPMaxReduce(Src); }; } else { MinMaxKind = RD::MRK_FloatMin; - BuildFunc = [&]() { return Builder.CreateFPMinReduce(Src, Flags.NoNaN); }; + BuildFunc = [&]() { return Builder.CreateFPMinReduce(Src); }; } break; default: -- 2.7.4