[llvm] [ADT] Add fshl/fshr operations to APSInt (PR #153790)

via llvm-commits llvm-commits at lists.llvm.org
Fri Aug 15 04:32:27 PDT 2025


github-actions[bot] wrote:

<!--LLVM CODE FORMAT COMMENT: {clang-format}-->


:warning: C/C++ code formatter, clang-format found issues in your code. :warning:

<details>
<summary>
You can test this locally with the following command:
</summary>

``````````bash
git-clang-format --diff HEAD~1 HEAD --extensions h,cpp -- llvm/include/llvm/ADT/APSInt.h llvm/lib/Support/APSInt.cpp llvm/unittests/ADT/APSIntTest.cpp
``````````

</details>

<details>
<summary>
View the diff from clang-format here.
</summary>

``````````diff
diff --git a/llvm/lib/Support/APSInt.cpp b/llvm/lib/Support/APSInt.cpp
index 8e2dc55bf..99643a7d7 100644
--- a/llvm/lib/Support/APSInt.cpp
+++ b/llvm/lib/Support/APSInt.cpp
@@ -45,21 +45,21 @@ void APSInt::Profile(FoldingSetNodeID& ID) const {
 APSInt llvm::APSIntOps::fshl(const APSInt &Hi, const APSInt &Lo,
                              const APSInt &Shift) {
   bool IsUnsigned = Hi.isUnsigned();
-  APSInt BitWidth(APInt(Hi.getBitWidth(),
-                        static_cast<uint64_t>(Hi.getBitWidth())),
-                  IsUnsigned);
+  APSInt BitWidth(
+      APInt(Hi.getBitWidth(), static_cast<uint64_t>(Hi.getBitWidth())),
+      IsUnsigned);
   return APSInt((Hi << (Shift % BitWidth)) |
-                (Lo >> (BitWidth - (Shift % BitWidth))),
+                    (Lo >> (BitWidth - (Shift % BitWidth))),
                 IsUnsigned);
 }
 
 APSInt llvm::APSIntOps::fshr(const APSInt &Hi, const APSInt &Lo,
                              const APSInt &Shift) {
   bool IsUnsigned = Hi.isUnsigned();
-  APSInt BitWidth(APInt(Hi.getBitWidth(),
-                        static_cast<uint64_t>(Hi.getBitWidth())),
-                  IsUnsigned);
+  APSInt BitWidth(
+      APInt(Hi.getBitWidth(), static_cast<uint64_t>(Hi.getBitWidth())),
+      IsUnsigned);
   return APSInt((Hi << (BitWidth - (Shift % BitWidth))) |
-                (Lo >> (Shift % BitWidth)),
+                    (Lo >> (Shift % BitWidth)),
                 IsUnsigned);
 }
diff --git a/llvm/unittests/ADT/APSIntTest.cpp b/llvm/unittests/ADT/APSIntTest.cpp
index be303a99b..7f76f9515 100644
--- a/llvm/unittests/ADT/APSIntTest.cpp
+++ b/llvm/unittests/ADT/APSIntTest.cpp
@@ -288,8 +288,8 @@ TEST(APSIntTest, UnsignedHighBit) {
 // Right shift of unsigned numbers translates to a logical shift.
 TEST(APSIntTest, RightShiftUnsigned) {
   // Right shift of a negative number.
-  const APInt neg_one(128, static_cast<uint64_t>(-1), /*isSigned*/true);
-  const APSInt neg_one_unsigned(APSInt(neg_one, /*isUnsigned*/true));
+  const APInt neg_one(128, static_cast<uint64_t>(-1), /*isSigned*/ true);
+  const APSInt neg_one_unsigned(APSInt(neg_one, /*isUnsigned*/ true));
   EXPECT_EQ(0, neg_one_unsigned >> 128);
 
   APSInt i256(APSInt(APInt::getHighBitsSet(256, 2)));
@@ -307,66 +307,94 @@ TEST(APSIntTest, RightShiftUnsigned) {
 // Right shift of signed numbers translates to a arithmetic shift.
 TEST(APSIntTest, RightShiftSigned) {
   // Right shift of a negative number.
-  const APInt neg_one = APInt(64, static_cast<uint64_t>(-1), /*isSigned*/true);
-  const APSInt neg_one_signed(APSInt(neg_one, /*isUnsigned*/false));
+  const APInt neg_one = APInt(64, static_cast<uint64_t>(-1), /*isSigned*/ true);
+  const APSInt neg_one_signed(APSInt(neg_one, /*isUnsigned*/ false));
   EXPECT_EQ(neg_one, neg_one_signed >> 7);
 
-  APSInt i72(APSInt(APInt::getHighBitsSet(72, 1), /*isUnsigned*/false));
+  APSInt i72(APSInt(APInt::getHighBitsSet(72, 1), /*isUnsigned*/ false));
   i72 >>= 46;
   EXPECT_EQ(47U, i72.countl_one());
   EXPECT_EQ(25U, i72.countr_zero());
   EXPECT_EQ(47U, i72.popcount());
 
   // Ensure we handle large shifts of multi-word.
-  const APSInt signmin128(APSInt(APInt::getSignedMinValue(128), /*isUnsigned*/false));
+  const APSInt signmin128(
+      APSInt(APInt::getSignedMinValue(128), /*isUnsigned*/ false));
   EXPECT_TRUE((signmin128 >> 128).isAllOnes());
 
   // Ensure we handle large shifts of multi-word.
-  const APSInt umax128(APSInt(APInt::getSignedMaxValue(128), /*isUnsigned*/false));
+  const APSInt umax128(
+      APSInt(APInt::getSignedMaxValue(128), /*isUnsigned*/ false));
   EXPECT_EQ(0, umax128 >> 128);
 }
 
 TEST(APSIntTest, Fshl) {
   // Unsigned
   EXPECT_EQ(APSIntOps::fshl(APSInt(APInt(8, 0)), APSInt(APInt(8, 255)),
-                            APSInt(APInt(8, 8))).getExtValue(), 0);
+                            APSInt(APInt(8, 8)))
+                .getExtValue(),
+            0);
   EXPECT_EQ(APSIntOps::fshl(APSInt(APInt(8, 255)), APSInt(APInt(8, 0)),
-                            APSInt(APInt(8, 8))).getExtValue(), 255);
+                            APSInt(APInt(8, 8)))
+                .getExtValue(),
+            255);
   EXPECT_EQ(APSIntOps::fshl(APSInt(APInt(8, 255)), APSInt(APInt(8, 0)),
-                            APSInt(APInt(8, 15))).getExtValue(), 128);
+                            APSInt(APInt(8, 15)))
+                .getExtValue(),
+            128);
   EXPECT_EQ(APSIntOps::fshl(APSInt(APInt(8, 15)), APSInt(APInt(8, 15)),
-                            APSInt(APInt(8, 11))).getExtValue(), 120);
+                            APSInt(APInt(8, 11)))
+                .getExtValue(),
+            120);
   EXPECT_EQ(APSIntOps::fshl(APSInt(APInt(8, 2)), APSInt(APInt(8, 1)),
-                            APSInt(APInt(8, 3))).getExtValue(), 16);
+                            APSInt(APInt(8, 3)))
+                .getExtValue(),
+            16);
   // Signed
   EXPECT_EQ(APSIntOps::fshl(APSInt(APInt(32, 0), false),
                             APSInt(APInt(32, 2147483647), false),
-                            APSInt(APInt(32, 32), false)).getExtValue(), 0);
+                            APSInt(APInt(32, 32), false))
+                .getExtValue(),
+            0);
   EXPECT_EQ(APSIntOps::fshl(APSInt(APInt(64, 1), false),
                             APSInt(APInt(64, 2), false),
-                            APSInt(APInt(64, 3), false)).getExtValue(), 8);
+                            APSInt(APInt(64, 3), false))
+                .getExtValue(),
+            8);
 }
 
 TEST(APSIntTest, Fshr) {
   // Unsigned
   EXPECT_EQ(APSIntOps::fshr(APSInt(APInt(8, 0)), APSInt(APInt(8, 255)),
-                            APSInt(APInt(8, 8))).getExtValue(), 255);
+                            APSInt(APInt(8, 8)))
+                .getExtValue(),
+            255);
   EXPECT_EQ(APSIntOps::fshr(APSInt(APInt(8, 255)), APSInt(APInt(8, 0)),
-                            APSInt(APInt(8, 8))).getExtValue(), 0);
+                            APSInt(APInt(8, 8)))
+                .getExtValue(),
+            0);
   EXPECT_EQ(APSIntOps::fshr(APSInt(APInt(8, 255)), APSInt(APInt(8, 0)),
-                            APSInt(APInt(8, 15))).getExtValue(), 254);
+                            APSInt(APInt(8, 15)))
+                .getExtValue(),
+            254);
   EXPECT_EQ(APSIntOps::fshr(APSInt(APInt(8, 15)), APSInt(APInt(8, 15)),
-                            APSInt(APInt(8, 11))).getExtValue(), 225);
+                            APSInt(APInt(8, 11)))
+                .getExtValue(),
+            225);
   EXPECT_EQ(APSIntOps::fshr(APSInt(APInt(8, 1)), APSInt(APInt(8, 2)),
-                            APSInt(APInt(8, 3))).getExtValue(), 32);
+                            APSInt(APInt(8, 3)))
+                .getExtValue(),
+            32);
   // Signed
   EXPECT_EQ(APSIntOps::fshr(APSInt(APInt(64, 0), false),
                             APSInt(APInt(64, 9223372036854775807), false),
-                            APSInt(APInt(64, 64), false)).getExtValue(),
+                            APSInt(APInt(64, 64), false))
+                .getExtValue(),
             9223372036854775807);
   EXPECT_EQ(APSIntOps::fshr(APSInt(APInt(64, 1), false),
                             APSInt(APInt(64, 2), false),
-                            APSInt(APInt(64, 3), false)).getExtValue(),
+                            APSInt(APInt(64, 3), false))
+                .getExtValue(),
             2305843009213693952);
 }
 

``````````

</details>


https://github.com/llvm/llvm-project/pull/153790


More information about the llvm-commits mailing list