summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorSerge Pavlov <sepavloff@gmail.com>2019-08-13 05:21:18 +0000
committerSerge Pavlov <sepavloff@gmail.com>2019-08-13 05:21:18 +0000
commit2a09b9acfb6fa14bbb08df3c13fb9fb0d09069d1 (patch)
treee6c9b43e08bedffafffe20e626bb853c4bda98e0 /llvm
parent892cdc73be231c0148ca092260644c30b1dd4e16 (diff)
downloadbcm5719-llvm-2a09b9acfb6fa14bbb08df3c13fb9fb0d09069d1.tar.gz
bcm5719-llvm-2a09b9acfb6fa14bbb08df3c13fb9fb0d09069d1.zip
Added unit tests to check supported rounding modes
Also added fixed misspelled metadata name. Differential Revision: https://reviews.llvm.org/D66073 llvm-svn: 368650
Diffstat (limited to 'llvm')
-rw-r--r--llvm/lib/IR/IntrinsicInst.cpp2
-rw-r--r--llvm/unittests/IR/IRBuilderTest.cpp28
2 files changed, 29 insertions, 1 deletions
diff --git a/llvm/lib/IR/IntrinsicInst.cpp b/llvm/lib/IR/IntrinsicInst.cpp
index 7a042326f67..b2471128007 100644
--- a/llvm/lib/IR/IntrinsicInst.cpp
+++ b/llvm/lib/IR/IntrinsicInst.cpp
@@ -143,7 +143,7 @@ ConstrainedFPIntrinsic::RoundingModeToStr(RoundingMode UseRounding) {
RoundingStr = "round.upward";
break;
case ConstrainedFPIntrinsic::rmTowardZero:
- RoundingStr = "round.tozero";
+ RoundingStr = "round.towardzero";
break;
}
return RoundingStr;
diff --git a/llvm/unittests/IR/IRBuilderTest.cpp b/llvm/unittests/IR/IRBuilderTest.cpp
index f73cf140e19..f7a932e2919 100644
--- a/llvm/unittests/IR/IRBuilderTest.cpp
+++ b/llvm/unittests/IR/IRBuilderTest.cpp
@@ -187,6 +187,34 @@ TEST_F(IRBuilderTest, ConstrainedFP) {
ASSERT_TRUE(CII->getExceptionBehavior() == ConstrainedFPIntrinsic::ebIgnore);
ASSERT_TRUE(CII->getRoundingMode() == ConstrainedFPIntrinsic::rmUpward);
+ Builder.setDefaultConstrainedExcept(ConstrainedFPIntrinsic::ebIgnore);
+ Builder.setDefaultConstrainedRounding(ConstrainedFPIntrinsic::rmToNearest);
+ V = Builder.CreateFAdd(V, V);
+ CII = cast<ConstrainedFPIntrinsic>(V);
+ ASSERT_TRUE(CII->getExceptionBehavior() == ConstrainedFPIntrinsic::ebIgnore);
+ ASSERT_TRUE(CII->getRoundingMode() == ConstrainedFPIntrinsic::rmToNearest);
+
+ Builder.setDefaultConstrainedExcept(ConstrainedFPIntrinsic::ebMayTrap);
+ Builder.setDefaultConstrainedRounding(ConstrainedFPIntrinsic::rmDownward);
+ V = Builder.CreateFAdd(V, V);
+ CII = cast<ConstrainedFPIntrinsic>(V);
+ ASSERT_TRUE(CII->getExceptionBehavior() == ConstrainedFPIntrinsic::ebMayTrap);
+ ASSERT_TRUE(CII->getRoundingMode() == ConstrainedFPIntrinsic::rmDownward);
+
+ Builder.setDefaultConstrainedExcept(ConstrainedFPIntrinsic::ebStrict);
+ Builder.setDefaultConstrainedRounding(ConstrainedFPIntrinsic::rmTowardZero);
+ V = Builder.CreateFAdd(V, V);
+ CII = cast<ConstrainedFPIntrinsic>(V);
+ ASSERT_TRUE(CII->getExceptionBehavior() == ConstrainedFPIntrinsic::ebStrict);
+ ASSERT_TRUE(CII->getRoundingMode() == ConstrainedFPIntrinsic::rmTowardZero);
+
+ Builder.setDefaultConstrainedExcept(ConstrainedFPIntrinsic::ebIgnore);
+ Builder.setDefaultConstrainedRounding(ConstrainedFPIntrinsic::rmDynamic);
+ V = Builder.CreateFAdd(V, V);
+ CII = cast<ConstrainedFPIntrinsic>(V);
+ ASSERT_TRUE(CII->getExceptionBehavior() == ConstrainedFPIntrinsic::ebIgnore);
+ ASSERT_TRUE(CII->getRoundingMode() == ConstrainedFPIntrinsic::rmDynamic);
+
// Now override the defaults.
Call = Builder.CreateConstrainedFPBinOp(
Intrinsic::experimental_constrained_fadd, V, V, nullptr, "", nullptr,
OpenPOWER on IntegriCloud