forked from OSchip/llvm-project
[InstSimplify] Rename SimplifyFPUnOp and SimplifyFPBinOp
Summary: SimplifyFPBinOp is a variant of SimplifyBinOp that lets you specify fast math flags, but the name is misleading because both functions can simplify both FP and non-FP ops. Instead, overload SimplifyBinOp so that you can optionally specify fast math flags. Likewise for SimplifyFPUnOp. Reviewers: spatel Reviewed By: spatel Subscribers: xbolva00, cameron.mcinally, eraman, hiraditya, haicheng, zzheng, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D64902 llvm-svn: 366902
This commit is contained in:
parent
3624074426
commit
565c54320e
|
@ -234,21 +234,19 @@ Value *SimplifyCmpInst(unsigned Predicate, Value *LHS, Value *RHS,
|
|||
/// Given operand for a UnaryOperator, fold the result or return null.
|
||||
Value *SimplifyUnOp(unsigned Opcode, Value *Op, const SimplifyQuery &Q);
|
||||
|
||||
/// Given operand for an FP UnaryOperator, fold the result or return null.
|
||||
/// In contrast to SimplifyUnOp, try to use FastMathFlag when folding the
|
||||
/// result. In case we don't need FastMathFlags, simply fall to SimplifyUnOp.
|
||||
Value *SimplifyFPUnOp(unsigned Opcode, Value *Op, FastMathFlags FMF,
|
||||
const SimplifyQuery &Q);
|
||||
/// Given operand for a UnaryOperator, fold the result or return null.
|
||||
/// Try to use FastMathFlags when folding the result.
|
||||
Value *SimplifyUnOp(unsigned Opcode, Value *Op, FastMathFlags FMF,
|
||||
const SimplifyQuery &Q);
|
||||
|
||||
/// Given operands for a BinaryOperator, fold the result or return null.
|
||||
Value *SimplifyBinOp(unsigned Opcode, Value *LHS, Value *RHS,
|
||||
const SimplifyQuery &Q);
|
||||
|
||||
/// Given operands for an FP BinaryOperator, fold the result or return null.
|
||||
/// In contrast to SimplifyBinOp, try to use FastMathFlag when folding the
|
||||
/// result. In case we don't need FastMathFlags, simply fall to SimplifyBinOp.
|
||||
Value *SimplifyFPBinOp(unsigned Opcode, Value *LHS, Value *RHS,
|
||||
FastMathFlags FMF, const SimplifyQuery &Q);
|
||||
/// Given operands for a BinaryOperator, fold the result or return null.
|
||||
/// Try to use FastMathFlags when folding the result.
|
||||
Value *SimplifyBinOp(unsigned Opcode, Value *LHS, Value *RHS,
|
||||
FastMathFlags FMF, const SimplifyQuery &Q);
|
||||
|
||||
/// Given a callsite, fold the result or return null.
|
||||
Value *SimplifyCall(CallBase *Call, const SimplifyQuery &Q);
|
||||
|
|
|
@ -1070,8 +1070,8 @@ bool CallAnalyzer::visitBinaryOperator(BinaryOperator &I) {
|
|||
|
||||
Value *SimpleV = nullptr;
|
||||
if (auto FI = dyn_cast<FPMathOperator>(&I))
|
||||
SimpleV = SimplifyFPBinOp(I.getOpcode(), CLHS ? CLHS : LHS,
|
||||
CRHS ? CRHS : RHS, FI->getFastMathFlags(), DL);
|
||||
SimpleV = SimplifyBinOp(I.getOpcode(), CLHS ? CLHS : LHS,
|
||||
CRHS ? CRHS : RHS, FI->getFastMathFlags(), DL);
|
||||
else
|
||||
SimpleV =
|
||||
SimplifyBinOp(I.getOpcode(), CLHS ? CLHS : LHS, CRHS ? CRHS : RHS, DL);
|
||||
|
|
|
@ -56,8 +56,8 @@ static Value *simplifyFPUnOp(unsigned, Value *, const FastMathFlags &,
|
|||
const SimplifyQuery &, unsigned);
|
||||
static Value *SimplifyBinOp(unsigned, Value *, Value *, const SimplifyQuery &,
|
||||
unsigned);
|
||||
static Value *SimplifyFPBinOp(unsigned, Value *, Value *, const FastMathFlags &,
|
||||
const SimplifyQuery &, unsigned);
|
||||
static Value *SimplifyBinOp(unsigned, Value *, Value *, const FastMathFlags &,
|
||||
const SimplifyQuery &, unsigned);
|
||||
static Value *SimplifyCmpInst(unsigned, Value *, Value *, const SimplifyQuery &,
|
||||
unsigned);
|
||||
static Value *SimplifyICmpInst(unsigned Predicate, Value *LHS, Value *RHS,
|
||||
|
@ -4564,8 +4564,7 @@ static Value *simplifyUnOp(unsigned Opcode, Value *Op, const SimplifyQuery &Q,
|
|||
|
||||
/// Given the operand for a UnaryOperator, see if we can fold the result.
|
||||
/// If not, this returns null.
|
||||
/// In contrast to SimplifyUnOp, try to use FastMathFlag when folding the
|
||||
/// result. In case we don't need FastMathFlags, simply fall to SimplifyUnOp.
|
||||
/// Try to use FastMathFlags when folding the result.
|
||||
static Value *simplifyFPUnOp(unsigned Opcode, Value *Op,
|
||||
const FastMathFlags &FMF,
|
||||
const SimplifyQuery &Q, unsigned MaxRecurse) {
|
||||
|
@ -4581,8 +4580,8 @@ Value *llvm::SimplifyUnOp(unsigned Opcode, Value *Op, const SimplifyQuery &Q) {
|
|||
return ::simplifyUnOp(Opcode, Op, Q, RecursionLimit);
|
||||
}
|
||||
|
||||
Value *llvm::SimplifyFPUnOp(unsigned Opcode, Value *Op, FastMathFlags FMF,
|
||||
const SimplifyQuery &Q) {
|
||||
Value *llvm::SimplifyUnOp(unsigned Opcode, Value *Op, FastMathFlags FMF,
|
||||
const SimplifyQuery &Q) {
|
||||
return ::simplifyFPUnOp(Opcode, Op, FMF, Q, RecursionLimit);
|
||||
}
|
||||
|
||||
|
@ -4634,11 +4633,10 @@ static Value *SimplifyBinOp(unsigned Opcode, Value *LHS, Value *RHS,
|
|||
|
||||
/// Given operands for a BinaryOperator, see if we can fold the result.
|
||||
/// If not, this returns null.
|
||||
/// In contrast to SimplifyBinOp, try to use FastMathFlag when folding the
|
||||
/// result. In case we don't need FastMathFlags, simply fall to SimplifyBinOp.
|
||||
static Value *SimplifyFPBinOp(unsigned Opcode, Value *LHS, Value *RHS,
|
||||
const FastMathFlags &FMF, const SimplifyQuery &Q,
|
||||
unsigned MaxRecurse) {
|
||||
/// Try to use FastMathFlags when folding the result.
|
||||
static Value *SimplifyBinOp(unsigned Opcode, Value *LHS, Value *RHS,
|
||||
const FastMathFlags &FMF, const SimplifyQuery &Q,
|
||||
unsigned MaxRecurse) {
|
||||
switch (Opcode) {
|
||||
case Instruction::FAdd:
|
||||
return SimplifyFAddInst(LHS, RHS, FMF, Q, MaxRecurse);
|
||||
|
@ -4658,9 +4656,9 @@ Value *llvm::SimplifyBinOp(unsigned Opcode, Value *LHS, Value *RHS,
|
|||
return ::SimplifyBinOp(Opcode, LHS, RHS, Q, RecursionLimit);
|
||||
}
|
||||
|
||||
Value *llvm::SimplifyFPBinOp(unsigned Opcode, Value *LHS, Value *RHS,
|
||||
FastMathFlags FMF, const SimplifyQuery &Q) {
|
||||
return ::SimplifyFPBinOp(Opcode, LHS, RHS, FMF, Q, RecursionLimit);
|
||||
Value *llvm::SimplifyBinOp(unsigned Opcode, Value *LHS, Value *RHS,
|
||||
FastMathFlags FMF, const SimplifyQuery &Q) {
|
||||
return ::SimplifyBinOp(Opcode, LHS, RHS, FMF, Q, RecursionLimit);
|
||||
}
|
||||
|
||||
/// Given operands for a CmpInst, see if we can fold the result.
|
||||
|
|
|
@ -78,7 +78,7 @@ bool UnrolledInstAnalyzer::visitBinaryOperator(BinaryOperator &I) {
|
|||
const DataLayout &DL = I.getModule()->getDataLayout();
|
||||
if (auto FI = dyn_cast<FPMathOperator>(&I))
|
||||
SimpleV =
|
||||
SimplifyFPBinOp(I.getOpcode(), LHS, RHS, FI->getFastMathFlags(), DL);
|
||||
SimplifyBinOp(I.getOpcode(), LHS, RHS, FI->getFastMathFlags(), DL);
|
||||
else
|
||||
SimpleV = SimplifyBinOp(I.getOpcode(), LHS, RHS, DL);
|
||||
|
||||
|
|
Loading…
Reference in New Issue