From 9ca363d89c103b06b986f87c0eaf3e8a00b06947 Mon Sep 17 00:00:00 2001 From: Roman Lebedev Date: Fri, 8 Nov 2019 17:19:45 +0300 Subject: [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 --- llvm/unittests/ADT/APIntTest.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'llvm/unittests/ADT/APIntTest.cpp') 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))); -- cgit v1.2.3