diff options
author | Craig Topper <craig.topper@sifive.com> | 2023-08-23 20:49:55 -0700 |
---|---|---|
committer | Craig Topper <craig.topper@sifive.com> | 2023-08-23 20:49:55 -0700 |
commit | 4f12c0b7d6fb91e2c1058470a523c008bfe0bd72 (patch) | |
tree | 532dd426bb5b7886689c2dc45c114501a8fddd25 | |
parent | 2ad50f354a2dbd7a1c0ab0ab15723ed48d4a5b7b (diff) | |
download | llvm-4f12c0b7d6fb91e2c1058470a523c008bfe0bd72.zip llvm-4f12c0b7d6fb91e2c1058470a523c008bfe0bd72.tar.gz llvm-4f12c0b7d6fb91e2c1058470a523c008bfe0bd72.tar.bz2 |
[X86] Remove FeatureBitset from X86TargetParser.cpp. NFC
Use the templated Bitset added in D158576.
Reviewed By: arsenm
Differential Revision: https://reviews.llvm.org/D158682
-rw-r--r-- | llvm/lib/TargetParser/X86TargetParser.cpp | 72 |
1 files changed, 2 insertions, 70 deletions
diff --git a/llvm/lib/TargetParser/X86TargetParser.cpp b/llvm/lib/TargetParser/X86TargetParser.cpp index 4c221bd..8d2401e 100644 --- a/llvm/lib/TargetParser/X86TargetParser.cpp +++ b/llvm/lib/TargetParser/X86TargetParser.cpp @@ -11,6 +11,7 @@ //===----------------------------------------------------------------------===// #include "llvm/TargetParser/X86TargetParser.h" +#include "llvm/ADT/Bitset.h" #include "llvm/ADT/StringSwitch.h" #include <numeric> @@ -19,76 +20,7 @@ using namespace llvm::X86; namespace { -/// Container class for CPU features. -/// This is a constexpr reimplementation of a subset of std::bitset. It would be -/// nice to use std::bitset directly, but it doesn't support constant -/// initialization. -class FeatureBitset { - static constexpr unsigned NUM_FEATURE_WORDS = - (X86::CPU_FEATURE_MAX + 31) / 32; - - // This cannot be a std::array, operator[] is not constexpr until C++17. - uint32_t Bits[NUM_FEATURE_WORDS] = {}; - -public: - constexpr FeatureBitset() = default; - constexpr FeatureBitset(std::initializer_list<unsigned> Init) { - for (auto I : Init) - set(I); - } - - bool any() const { - return llvm::any_of(Bits, [](uint64_t V) { return V != 0; }); - } - - constexpr FeatureBitset &set(unsigned I) { - Bits[I / 32] |= uint32_t(1) << (I % 32); - return *this; - } - - constexpr bool operator[](unsigned I) const { - uint32_t Mask = uint32_t(1) << (I % 32); - return (Bits[I / 32] & Mask) != 0; - } - - constexpr FeatureBitset &operator&=(const FeatureBitset &RHS) { - for (unsigned I = 0, E = std::size(Bits); I != E; ++I) - Bits[I] &= RHS.Bits[I]; - return *this; - } - - constexpr FeatureBitset &operator|=(const FeatureBitset &RHS) { - for (unsigned I = 0, E = std::size(Bits); I != E; ++I) - Bits[I] |= RHS.Bits[I]; - return *this; - } - - constexpr FeatureBitset operator&(const FeatureBitset &RHS) const { - FeatureBitset Result = *this; - Result &= RHS; - return Result; - } - - constexpr FeatureBitset operator|(const FeatureBitset &RHS) const { - FeatureBitset Result = *this; - Result |= RHS; - return Result; - } - - constexpr FeatureBitset operator~() const { - FeatureBitset Result; - for (unsigned I = 0, E = std::size(Bits); I != E; ++I) - Result.Bits[I] = ~Bits[I]; - return Result; - } - - constexpr bool operator!=(const FeatureBitset &RHS) const { - for (unsigned I = 0, E = std::size(Bits); I != E; ++I) - if (Bits[I] != RHS.Bits[I]) - return true; - return false; - } -}; +using FeatureBitset = Bitset<X86::CPU_FEATURE_MAX>; struct ProcInfo { StringLiteral Name; |