1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-19 02:52:53 +02:00

Added unit tests to check supported rounding modes

Also added fixed misspelled metadata name.

Differential Revision: https://reviews.llvm.org/D66073

llvm-svn: 368650
This commit is contained in:
Serge Pavlov 2019-08-13 05:21:18 +00:00
parent 8603d4c930
commit 2dd1bcc226
2 changed files with 29 additions and 1 deletions

View File

@ -143,7 +143,7 @@ ConstrainedFPIntrinsic::RoundingModeToStr(RoundingMode UseRounding) {
RoundingStr = "round.upward"; RoundingStr = "round.upward";
break; break;
case ConstrainedFPIntrinsic::rmTowardZero: case ConstrainedFPIntrinsic::rmTowardZero:
RoundingStr = "round.tozero"; RoundingStr = "round.towardzero";
break; break;
} }
return RoundingStr; return RoundingStr;

View File

@ -187,6 +187,34 @@ TEST_F(IRBuilderTest, ConstrainedFP) {
ASSERT_TRUE(CII->getExceptionBehavior() == ConstrainedFPIntrinsic::ebIgnore); ASSERT_TRUE(CII->getExceptionBehavior() == ConstrainedFPIntrinsic::ebIgnore);
ASSERT_TRUE(CII->getRoundingMode() == ConstrainedFPIntrinsic::rmUpward); 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. // Now override the defaults.
Call = Builder.CreateConstrainedFPBinOp( Call = Builder.CreateConstrainedFPBinOp(
Intrinsic::experimental_constrained_fadd, V, V, nullptr, "", nullptr, Intrinsic::experimental_constrained_fadd, V, V, nullptr, "", nullptr,