From 4ee240b86085ef90d20ce731a434287805d119ea Mon Sep 17 00:00:00 2001 From: Chuanqi Xu Date: Mon, 14 Feb 2022 14:09:26 +0800 Subject: [PATCH] [NFC] [ValueTracking] Add unittest for haveNoCommonBitsSet --- llvm/unittests/Analysis/ValueTrackingTest.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/llvm/unittests/Analysis/ValueTrackingTest.cpp b/llvm/unittests/Analysis/ValueTrackingTest.cpp index f4b4d34..9fb4a7e 100644 --- a/llvm/unittests/Analysis/ValueTrackingTest.cpp +++ b/llvm/unittests/Analysis/ValueTrackingTest.cpp @@ -1725,6 +1725,28 @@ TEST_F(ComputeKnownBitsTest, ComputeKnownBitsCrash) { A, M->getDataLayout(), /* Depth */ 0, &AC, F->front().getTerminator()); } +TEST_F(ValueTrackingTest, HaveNoCommonBitsSet) { + { + // Check for an inverted mask: (X & ~M) op (Y & M). + auto M = parseModule(R"( + define i32 @test(i32 %X, i32 %Y, i32 %M) { + %1 = xor i32 %M, -1 + %LHS = and i32 %1, %X + %RHS = and i32 %Y, %M + %Ret = add i32 %LHS, %RHS + ret i32 %Ret + })"); + + F = M->getFunction("test"); + auto *LHS = findInstructionByNameOrNull(F, "LHS"); + auto *RHS = findInstructionByNameOrNull(F, "RHS"); + + const DataLayout &DL = M->getDataLayout(); + EXPECT_TRUE(haveNoCommonBitsSet(LHS, RHS, DL)); + EXPECT_TRUE(haveNoCommonBitsSet(RHS, LHS, DL)); + } +} + class IsBytewiseValueTest : public ValueTrackingTest, public ::testing::WithParamInterface< std::pair> { -- 2.7.4