forked from OSchip/llvm-project
[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:
parent
655fdd3f82
commit
fe645d295f
|
@ -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; }
|
||||
|
|
|
@ -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));
|
||||
|
|
Loading…
Reference in New Issue