From c3434b390d6ea255aa4bd82cfd6ddcdee99e4a23 Mon Sep 17 00:00:00 2001 From: Michael Kuperstein Date: Wed, 13 May 2015 10:28:46 +0000 Subject: Reverting r237234, "Use std::bitset for SubtargetFeatures" The buildbots are still not satisfied. MIPS and ARM are failing (even though at least MIPS was expected to pass). llvm-svn: 237245 --- llvm/lib/MC/SubtargetFeature.cpp | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) (limited to 'llvm/lib/MC/SubtargetFeature.cpp') diff --git a/llvm/lib/MC/SubtargetFeature.cpp b/llvm/lib/MC/SubtargetFeature.cpp index 78006e0d702..3880d883389 100644 --- a/llvm/lib/MC/SubtargetFeature.cpp +++ b/llvm/lib/MC/SubtargetFeature.cpp @@ -151,12 +151,12 @@ std::string SubtargetFeatures::getString() const { /// feature, set it. /// static -void SetImpliedBits(FeatureBitset &Bits, const SubtargetFeatureKV *FeatureEntry, +void SetImpliedBits(uint64_t &Bits, const SubtargetFeatureKV *FeatureEntry, ArrayRef FeatureTable) { for (auto &FE : FeatureTable) { if (FeatureEntry->Value == FE.Value) continue; - if ((FeatureEntry->Implies & FE.Value).any()) { + if (FeatureEntry->Implies & FE.Value) { Bits |= FE.Value; SetImpliedBits(Bits, &FE, FeatureTable); } @@ -167,13 +167,12 @@ void SetImpliedBits(FeatureBitset &Bits, const SubtargetFeatureKV *FeatureEntry, /// feature, clear it. /// static -void ClearImpliedBits(FeatureBitset &Bits, - const SubtargetFeatureKV *FeatureEntry, +void ClearImpliedBits(uint64_t &Bits, const SubtargetFeatureKV *FeatureEntry, ArrayRef FeatureTable) { for (auto &FE : FeatureTable) { if (FeatureEntry->Value == FE.Value) continue; - if ((FE.Implies & FeatureEntry->Value).any()) { + if (FE.Implies & FeatureEntry->Value) { Bits &= ~FE.Value; ClearImpliedBits(Bits, &FE, FeatureTable); } @@ -182,8 +181,8 @@ void ClearImpliedBits(FeatureBitset &Bits, /// ToggleFeature - Toggle a feature and returns the newly updated feature /// bits. -FeatureBitset -SubtargetFeatures::ToggleFeature(FeatureBitset Bits, StringRef Feature, +uint64_t +SubtargetFeatures::ToggleFeature(uint64_t Bits, StringRef Feature, ArrayRef FeatureTable) { // Find feature in table. @@ -193,6 +192,7 @@ SubtargetFeatures::ToggleFeature(FeatureBitset Bits, StringRef Feature, if (FeatureEntry) { if ((Bits & FeatureEntry->Value) == FeatureEntry->Value) { Bits &= ~FeatureEntry->Value; + // For each feature that implies this, clear it. ClearImpliedBits(Bits, FeatureEntry, FeatureTable); } else { @@ -213,13 +213,13 @@ SubtargetFeatures::ToggleFeature(FeatureBitset Bits, StringRef Feature, /// getFeatureBits - Get feature bits a CPU. /// -FeatureBitset +uint64_t SubtargetFeatures::getFeatureBits(StringRef CPU, ArrayRef CPUTable, ArrayRef FeatureTable) { if (CPUTable.empty() || FeatureTable.empty()) - return FeatureBitset(); + return 0; #ifndef NDEBUG for (size_t i = 1, e = CPUTable.size(); i != e; ++i) { @@ -231,8 +231,7 @@ SubtargetFeatures::getFeatureBits(StringRef CPU, "CPU features table is not sorted"); } #endif - // Resulting bits - FeatureBitset Bits; + uint64_t Bits = 0; // Resulting bits // Check if help is needed if (CPU == "help") @@ -249,7 +248,7 @@ SubtargetFeatures::getFeatureBits(StringRef CPU, // Set the feature implied by this CPU feature, if any. for (auto &FE : FeatureTable) { - if ((CPUEntry->Value & FE.Value).any()) + if (CPUEntry->Value & FE.Value) SetImpliedBits(Bits, &FE, FeatureTable); } } else { -- cgit v1.2.3