diff options
| author | Jay Foad <jay.foad@amd.com> | 2024-04-04 16:11:06 +0100 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-04-04 16:11:06 +0100 | 
| commit | 1b761205f2686516cebadbcbc37f798197d9c482 (patch) | |
| tree | 2aa2a932303b99777e2d369c021ea612b4b43acc /llvm/unittests/ADT/APIntTest.cpp | |
| parent | 51f1cb5355d296ccb7756944d0545d9c96066b78 (diff) | |
| download | llvm-1b761205f2686516cebadbcbc37f798197d9c482.zip llvm-1b761205f2686516cebadbcbc37f798197d9c482.tar.gz llvm-1b761205f2686516cebadbcbc37f798197d9c482.tar.bz2 | |
[APInt] Add a simpler overload of multiplicativeInverse (#87610)
The current APInt::multiplicativeInverse takes a modulus which can be
any value, but all in-tree callers use a power of two. Moreover, most
callers want to use two to the power of the width of an existing APInt,
which is awkward because 2^N is not representable as an N-bit APInt.
Add a new overload of multiplicativeInverse which implicitly uses
2^BitWidth as the modulus.
Diffstat (limited to 'llvm/unittests/ADT/APIntTest.cpp')
| -rw-r--r-- | llvm/unittests/ADT/APIntTest.cpp | 3 | 
1 files changed, 2 insertions, 1 deletions
| diff --git a/llvm/unittests/ADT/APIntTest.cpp b/llvm/unittests/ADT/APIntTest.cpp index d5ef63e..23f9ee2 100644 --- a/llvm/unittests/ADT/APIntTest.cpp +++ b/llvm/unittests/ADT/APIntTest.cpp @@ -3257,9 +3257,10 @@ TEST(APIntTest, MultiplicativeInverseExaustive) {                .multiplicativeInverse(APInt::getSignedMinValue(BitWidth + 1))                .trunc(BitWidth);        APInt One = V * MulInv; -      if (!V.isZero() && V.countr_zero() == 0) { +      if (V[0]) {          // Multiplicative inverse exists for all odd numbers.          EXPECT_TRUE(One.isOne()); +        EXPECT_TRUE((V * V.multiplicativeInverse()).isOne());        } else {          // Multiplicative inverse does not exist for even numbers (and 0).          EXPECT_TRUE(MulInv.isZero()); | 
