diff options
author | Simon Pilgrim <llvm-dev@redking.me.uk> | 2022-07-29 11:06:26 +0100 |
---|---|---|
committer | Simon Pilgrim <llvm-dev@redking.me.uk> | 2022-07-29 11:06:39 +0100 |
commit | 9082c131061c7391bf372fcca52031ed8b945f89 (patch) | |
tree | 5acf9d8ab9daac3c7c4aa54574d6898131a244fb /llvm/unittests/Support/KnownBitsTest.cpp | |
parent | 039fb3e5a12fccacd6ee5272e461e7e186397636 (diff) | |
download | llvm-9082c131061c7391bf372fcca52031ed8b945f89.zip llvm-9082c131061c7391bf372fcca52031ed8b945f89.tar.gz llvm-9082c131061c7391bf372fcca52031ed8b945f89.tar.bz2 |
[Support] Add KnownBits::concat method
Add a method for the various cases where we need to concatenate 2 KnownBits together (BUILD_PAIR and SHIFT_PARTS in particular) - uses the existing APInt::concat 'HiBits.concat(LoBits)' convention
Differential Revision: https://reviews.llvm.org/D130557
Diffstat (limited to 'llvm/unittests/Support/KnownBitsTest.cpp')
-rw-r--r-- | llvm/unittests/Support/KnownBitsTest.cpp | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/llvm/unittests/Support/KnownBitsTest.cpp b/llvm/unittests/Support/KnownBitsTest.cpp index 04c1d7c..1d609e9 100644 --- a/llvm/unittests/Support/KnownBitsTest.cpp +++ b/llvm/unittests/Support/KnownBitsTest.cpp @@ -508,4 +508,29 @@ TEST(KnownBitsTest, CommonBitsSet) { }); } +TEST(KnownBitsTest, ConcatBits) { + unsigned Bits = 4; + for (unsigned LoBits = 1; LoBits < Bits; ++LoBits) { + unsigned HiBits = Bits - LoBits; + ForeachKnownBits(LoBits, [&](const KnownBits &KnownLo) { + ForeachKnownBits(HiBits, [&](const KnownBits &KnownHi) { + KnownBits KnownAll = KnownHi.concat(KnownLo); + + EXPECT_EQ(KnownLo.countMinPopulation() + KnownHi.countMinPopulation(), + KnownAll.countMinPopulation()); + EXPECT_EQ(KnownLo.countMaxPopulation() + KnownHi.countMaxPopulation(), + KnownAll.countMaxPopulation()); + + KnownBits ExtractLo = KnownAll.extractBits(LoBits, 0); + KnownBits ExtractHi = KnownAll.extractBits(HiBits, LoBits); + + EXPECT_EQ(KnownLo.One.getZExtValue(), ExtractLo.One.getZExtValue()); + EXPECT_EQ(KnownHi.One.getZExtValue(), ExtractHi.One.getZExtValue()); + EXPECT_EQ(KnownLo.Zero.getZExtValue(), ExtractLo.Zero.getZExtValue()); + EXPECT_EQ(KnownHi.Zero.getZExtValue(), ExtractHi.Zero.getZExtValue()); + }); + }); + } +} + } // end anonymous namespace |