summaryrefslogtreecommitdiff
path: root/unittests/VMCore/InstructionsTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'unittests/VMCore/InstructionsTest.cpp')
-rw-r--r--unittests/VMCore/InstructionsTest.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/unittests/VMCore/InstructionsTest.cpp b/unittests/VMCore/InstructionsTest.cpp
index 218a9a08c4..9c0cb4409f 100644
--- a/unittests/VMCore/InstructionsTest.cpp
+++ b/unittests/VMCore/InstructionsTest.cpp
@@ -12,8 +12,11 @@
#include "llvm/Constants.h"
#include "llvm/DerivedTypes.h"
#include "llvm/LLVMContext.h"
+#include "llvm/Operator.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/Analysis/ValueTracking.h"
+#include "llvm/Support/MDBuilder.h"
+#include "llvm/Support/IRBuilder.h"
#include "llvm/Target/TargetData.h"
#include "gtest/gtest.h"
@@ -226,5 +229,27 @@ TEST(InstructionsTest, VectorGep) {
delete PtrVecB;
}
+TEST(InstructionsTest, FPMathOperator) {
+ LLVMContext &Context = getGlobalContext();
+ IRBuilder<> Builder(Context);
+ MDBuilder MDHelper(Context);
+ Instruction *I = Builder.CreatePHI(Builder.getDoubleTy(), 0);
+ MDNode *MD1 = MDHelper.createFPMath(1.0);
+ MDNode *MDF = MDHelper.createFastFPMath();
+ Value *V1 = Builder.CreateFAdd(I, I, "", MD1);
+ Value *VF = Builder.CreateFAdd(I, I, "", MDF);
+ EXPECT_TRUE(isa<FPMathOperator>(V1));
+ EXPECT_TRUE(isa<FPMathOperator>(VF));
+ FPMathOperator *O1 = cast<FPMathOperator>(V1);
+ FPMathOperator *OF = cast<FPMathOperator>(VF);
+ EXPECT_FALSE(O1->isFastFPAccuracy());
+ EXPECT_TRUE(OF->isFastFPAccuracy());
+ EXPECT_EQ(O1->getFPAccuracy(), 1.0);
+ EXPECT_GT(OF->getFPAccuracy(), 999.0);
+ delete V1;
+ delete VF;
+ delete I;
+}
+
} // end anonymous namespace
} // end namespace llvm