[PATCH] D158682: [X86] Remove FeatureBitset from X86TargetParser.cpp. NFC
Craig Topper via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 23 20:50:03 PDT 2023
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG4f12c0b7d6fb: [X86] Remove FeatureBitset from X86TargetParser.cpp. NFC (authored by craig.topper).
Changed prior to commit:
https://reviews.llvm.org/D158682?vs=552919&id=552972#toc
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D158682/new/
https://reviews.llvm.org/D158682
Files:
llvm/lib/TargetParser/X86TargetParser.cpp
Index: llvm/lib/TargetParser/X86TargetParser.cpp
===================================================================
--- llvm/lib/TargetParser/X86TargetParser.cpp
+++ 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 @@
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;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D158682.552972.patch
Type: text/x-patch
Size: 2624 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230824/289e0ec8/attachment.bin>
More information about the llvm-commits
mailing list