forked from OSchip/llvm-project
[IR] Add UnaryOperator::CreateFNegFMF(...)
Differential Revision: https://reviews.llvm.org/D62705 llvm-svn: 362828
This commit is contained in:
parent
9fa6538f3b
commit
ef57e50bd2
|
@ -154,6 +154,20 @@ public:
|
|||
}
|
||||
#include "llvm/IR/Instruction.def"
|
||||
|
||||
static UnaryOperator *CreateWithCopiedFlags(UnaryOps Opc,
|
||||
Value *V,
|
||||
Instruction *CopyO,
|
||||
const Twine &Name = "") {
|
||||
UnaryOperator *UO = Create(Opc, V, Name);
|
||||
UO->copyIRFlags(CopyO);
|
||||
return UO;
|
||||
}
|
||||
|
||||
static UnaryOperator *CreateFNegFMF(Value *Op, Instruction *FMFSource,
|
||||
const Twine &Name = "") {
|
||||
return CreateWithCopiedFlags(Instruction::FNeg, Op, FMFSource, Name);
|
||||
}
|
||||
|
||||
UnaryOps getOpcode() const {
|
||||
return static_cast<UnaryOps>(Instruction::getOpcode());
|
||||
}
|
||||
|
@ -269,7 +283,7 @@ public:
|
|||
static BinaryOperator *CreateFNegFMF(Value *Op, Instruction *FMFSource,
|
||||
const Twine &Name = "") {
|
||||
Value *Zero = ConstantFP::getNegativeZero(Op->getType());
|
||||
return CreateWithCopiedFlags(Instruction::FSub, Zero, Op, FMFSource);
|
||||
return CreateWithCopiedFlags(Instruction::FSub, Zero, Op, FMFSource, Name);
|
||||
}
|
||||
|
||||
static BinaryOperator *CreateNSW(BinaryOps Opc, Value *V1, Value *V2,
|
||||
|
|
|
@ -1081,5 +1081,23 @@ TEST(InstructionsTest, PhiIsNotFPMathOperator) {
|
|||
I->deleteValue();
|
||||
}
|
||||
|
||||
TEST(InstructionsTest, FNegInstruction) {
|
||||
LLVMContext Context;
|
||||
Type *FltTy = Type::getFloatTy(Context);
|
||||
Constant *One = ConstantFP::get(FltTy, 1.0);
|
||||
BinaryOperator *FAdd = BinaryOperator::CreateFAdd(One, One);
|
||||
FAdd->setHasNoNaNs(true);
|
||||
UnaryOperator *FNeg = UnaryOperator::CreateFNegFMF(One, FAdd);
|
||||
EXPECT_TRUE(FNeg->hasNoNaNs());
|
||||
EXPECT_FALSE(FNeg->hasNoInfs());
|
||||
EXPECT_FALSE(FNeg->hasNoSignedZeros());
|
||||
EXPECT_FALSE(FNeg->hasAllowReciprocal());
|
||||
EXPECT_FALSE(FNeg->hasAllowContract());
|
||||
EXPECT_FALSE(FNeg->hasAllowReassoc());
|
||||
EXPECT_FALSE(FNeg->hasApproxFunc());
|
||||
FAdd->deleteValue();
|
||||
FNeg->deleteValue();
|
||||
}
|
||||
|
||||
} // end anonymous namespace
|
||||
} // end namespace llvm
|
||||
|
|
Loading…
Reference in New Issue