From b55d59ef2c23ed3281ea08ab5dd9552a43c45a25 Mon Sep 17 00:00:00 2001 From: Jay Foad Date: Mon, 10 Jun 2024 09:48:30 +0100 Subject: [PATCH] [KnownBits] Speed up ForeachKnownBits in unit test. NFC. Use fast unsigned arithmetic before constructing an APInt. This gives me a ~2x speed up when running this in my Release+Asserts build: $ unittests/Support/SupportTests --gtest_filter=KnownBitsTest.*Exhaustive --- llvm/unittests/Support/KnownBitsTest.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/llvm/unittests/Support/KnownBitsTest.h b/llvm/unittests/Support/KnownBitsTest.h index 556da2b9ecdad..974051891d48e 100644 --- a/llvm/unittests/Support/KnownBitsTest.h +++ b/llvm/unittests/Support/KnownBitsTest.h @@ -34,13 +34,13 @@ template void ForeachKnownBits(unsigned Bits, FnTy Fn) { template void ForeachNumInKnownBits(const KnownBits &Known, FnTy Fn) { unsigned Bits = Known.getBitWidth(); - unsigned Max = 1 << Bits; + assert(Bits < 32); + unsigned Max = 1u << Bits; + unsigned Zero = Known.Zero.getZExtValue(); + unsigned One = Known.One.getZExtValue(); for (unsigned N = 0; N < Max; ++N) { - APInt Num(Bits, N); - if ((Num & Known.Zero) != 0 || (~Num & Known.One) != 0) - continue; - - Fn(Num); + if ((N & Zero) == 0 && (~N & One) == 0) + Fn(APInt(Bits, N)); } }