summaryrefslogtreecommitdiffstats
path: root/llvm/unittests/ADT/APIntTest.cpp
diff options
context:
space:
mode:
authorRoman Lebedev <lebedev.ri@gmail.com>2019-11-08 17:19:45 +0300
committerRoman Lebedev <lebedev.ri@gmail.com>2019-11-08 17:52:43 +0300
commit9ca363d89c103b06b986f87c0eaf3e8a00b06947 (patch)
treec0ae13a3fa5aa40ff16443bb9cf3861e41fb3c5e /llvm/unittests/ADT/APIntTest.cpp
parent1f592ecf82381f8689c4a4c6c863591679b2f665 (diff)
downloadbcm5719-llvm-9ca363d89c103b06b986f87c0eaf3e8a00b06947.tar.gz
bcm5719-llvm-9ca363d89c103b06b986f87c0eaf3e8a00b06947.zip
[APInt] Add saturating truncation methods
Summary: The signed one is needed for implementation of `ConstantRange::smul_sat()`, unsigned is for completeness only. Reviewers: nikic, RKSimon, spatel Reviewed By: nikic Subscribers: hiraditya, dexonsmith, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D69993
Diffstat (limited to 'llvm/unittests/ADT/APIntTest.cpp')
-rw-r--r--llvm/unittests/ADT/APIntTest.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/llvm/unittests/ADT/APIntTest.cpp b/llvm/unittests/ADT/APIntTest.cpp
index fe4e7426099..030b000c258 100644
--- a/llvm/unittests/ADT/APIntTest.cpp
+++ b/llvm/unittests/ADT/APIntTest.cpp
@@ -1177,9 +1177,26 @@ TEST(APIntTest, fromString) {
TEST(APIntTest, SaturatingMath) {
APInt AP_10 = APInt(8, 10);
+ APInt AP_42 = APInt(8, 42);
APInt AP_100 = APInt(8, 100);
APInt AP_200 = APInt(8, 200);
+ EXPECT_EQ(APInt(7, 100), AP_100.truncUSat(7));
+ EXPECT_EQ(APInt(6, 63), AP_100.truncUSat(6));
+ EXPECT_EQ(APInt(5, 31), AP_100.truncUSat(5));
+
+ EXPECT_EQ(APInt(7, 127), AP_200.truncUSat(7));
+ EXPECT_EQ(APInt(6, 63), AP_200.truncUSat(6));
+ EXPECT_EQ(APInt(5, 31), AP_200.truncUSat(5));
+
+ EXPECT_EQ(APInt(7, 42), AP_42.truncSSat(7));
+ EXPECT_EQ(APInt(6, 31), AP_42.truncSSat(6));
+ EXPECT_EQ(APInt(5, 15), AP_42.truncSSat(5));
+
+ EXPECT_EQ(APInt(7, -56), AP_200.truncSSat(7));
+ EXPECT_EQ(APInt(6, -32), AP_200.truncSSat(6));
+ EXPECT_EQ(APInt(5, -16), AP_200.truncSSat(5));
+
EXPECT_EQ(APInt(8, 200), AP_100.uadd_sat(AP_100));
EXPECT_EQ(APInt(8, 255), AP_100.uadd_sat(AP_200));
EXPECT_EQ(APInt(8, 255), APInt(8, 255).uadd_sat(APInt(8, 255)));
OpenPOWER on IntegriCloud