diff options
author | Roman Lebedev <lebedev.ri@gmail.com> | 2019-11-08 17:19:45 +0300 |
---|---|---|
committer | Roman Lebedev <lebedev.ri@gmail.com> | 2019-11-08 17:52:43 +0300 |
commit | 9ca363d89c103b06b986f87c0eaf3e8a00b06947 (patch) | |
tree | c0ae13a3fa5aa40ff16443bb9cf3861e41fb3c5e /llvm/unittests/ADT/APIntTest.cpp | |
parent | 1f592ecf82381f8689c4a4c6c863591679b2f665 (diff) | |
download | bcm5719-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.cpp | 17 |
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))); |