[DAG] add convenience function to propagate FMF; NFC

There's only one use of this currently, but that could
change with D46563. Either way, we shouldn't have to
update code outside of the flags struct when those
flag definitions change.

llvm-svn: 332155
This commit is contained in:
Sanjay Patel 2018-05-11 23:13:36 +00:00
parent 655fdd3f82
commit fe645d295f
2 changed files with 15 additions and 8 deletions

View File

@ -37,6 +37,7 @@
#include "llvm/IR/Instruction.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/Metadata.h"
#include "llvm/IR/Operator.h"
#include "llvm/Support/AlignOf.h"
#include "llvm/Support/AtomicOrdering.h"
#include "llvm/Support/Casting.h"
@ -374,7 +375,19 @@ public:
: AnyDefined(false), NoUnsignedWrap(false), NoSignedWrap(false),
Exact(false), NoNaNs(false), NoInfs(false),
NoSignedZeros(false), AllowReciprocal(false), VectorReduction(false),
AllowContract(false), ApproximateFuncs(false), AllowReassociation(false) {}
AllowContract(false), ApproximateFuncs(false),
AllowReassociation(false) {}
/// Propagate the fast-math-flags from an IR FPMathOperator.
void copyFMF(const FPMathOperator &FPMO) {
setNoNaNs(FPMO.hasNoNaNs());
setNoInfs(FPMO.hasNoInfs());
setNoSignedZeros(FPMO.hasNoSignedZeros());
setAllowReciprocal(FPMO.hasAllowReciprocal());
setAllowContract(FPMO.hasAllowContract());
setApproximateFuncs(FPMO.hasApproxFunc());
setAllowReassociation(FPMO.hasAllowReassoc());
}
/// Sets the state of the flags to the defined state.
void setDefined() { AnyDefined = true; }

View File

@ -2753,13 +2753,7 @@ void SelectionDAGBuilder::visitBinary(const User &I, unsigned Opcode) {
DEBUG(dbgs() << "Detected a reduction operation:" << I << "\n");
}
if (auto *FPOp = dyn_cast<FPMathOperator>(&I)) {
Flags.setAllowReciprocal(FPOp->hasAllowReciprocal());
Flags.setAllowContract(FPOp->hasAllowContract());
Flags.setNoInfs(FPOp->hasNoInfs());
Flags.setNoNaNs(FPOp->hasNoNaNs());
Flags.setNoSignedZeros(FPOp->hasNoSignedZeros());
Flags.setApproximateFuncs(FPOp->hasApproxFunc());
Flags.setAllowReassociation(FPOp->hasAllowReassoc());
Flags.copyFMF(*FPOp);
}
SDValue Op1 = getValue(I.getOperand(0));