mirror of
https://github.com/RPCS3/llvm.git
synced 2025-02-24 21:00:36 +00:00
[IR] Add UnaryOperator::CreateFNegFMF(...)
Differential Revision: https://reviews.llvm.org/D62705 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@362828 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
b182b22618
commit
be913530f9
@ -154,6 +154,20 @@ public:
|
|||||||
}
|
}
|
||||||
#include "llvm/IR/Instruction.def"
|
#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 {
|
UnaryOps getOpcode() const {
|
||||||
return static_cast<UnaryOps>(Instruction::getOpcode());
|
return static_cast<UnaryOps>(Instruction::getOpcode());
|
||||||
}
|
}
|
||||||
@ -269,7 +283,7 @@ public:
|
|||||||
static BinaryOperator *CreateFNegFMF(Value *Op, Instruction *FMFSource,
|
static BinaryOperator *CreateFNegFMF(Value *Op, Instruction *FMFSource,
|
||||||
const Twine &Name = "") {
|
const Twine &Name = "") {
|
||||||
Value *Zero = ConstantFP::getNegativeZero(Op->getType());
|
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,
|
static BinaryOperator *CreateNSW(BinaryOps Opc, Value *V1, Value *V2,
|
||||||
|
@ -1081,5 +1081,23 @@ TEST(InstructionsTest, PhiIsNotFPMathOperator) {
|
|||||||
I->deleteValue();
|
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 anonymous namespace
|
||||||
} // end namespace llvm
|
} // end namespace llvm
|
||||||
|
Loading…
x
Reference in New Issue
Block a user