summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
Diffstat (limited to 'llvm')
-rw-r--r--llvm/include/llvm/MC/SubtargetFeature.h2
-rw-r--r--llvm/lib/MC/SubtargetFeature.cpp22
-rw-r--r--llvm/utils/TableGen/SubtargetEmitter.cpp12
3 files changed, 18 insertions, 18 deletions
diff --git a/llvm/include/llvm/MC/SubtargetFeature.h b/llvm/include/llvm/MC/SubtargetFeature.h
index 5f49d3894ae..9c0a3f6e45f 100644
--- a/llvm/include/llvm/MC/SubtargetFeature.h
+++ b/llvm/include/llvm/MC/SubtargetFeature.h
@@ -52,7 +52,7 @@ public:
struct SubtargetFeatureKV {
const char *Key; ///< K-V key string
const char *Desc; ///< Help descriptor
- FeatureBitset Value; ///< K-V integer value
+ unsigned Value; ///< K-V integer value
FeatureBitset Implies; ///< K-V bit mask
/// Compare routine for std::lower_bound
diff --git a/llvm/lib/MC/SubtargetFeature.cpp b/llvm/lib/MC/SubtargetFeature.cpp
index 793f00d46ed..50f979b9d11 100644
--- a/llvm/lib/MC/SubtargetFeature.cpp
+++ b/llvm/lib/MC/SubtargetFeature.cpp
@@ -127,8 +127,8 @@ void SetImpliedBits(FeatureBitset &Bits, const SubtargetFeatureKV &FeatureEntry,
for (const SubtargetFeatureKV &FE : FeatureTable) {
if (FeatureEntry.Value == FE.Value) continue;
- if ((FeatureEntry.Implies & FE.Value).any()) {
- Bits |= FE.Value;
+ if (FeatureEntry.Implies.test(FE.Value)) {
+ Bits.set(FE.Value);
SetImpliedBits(Bits, FE, FeatureTable);
}
}
@@ -142,8 +142,8 @@ void ClearImpliedBits(FeatureBitset &Bits,
for (const SubtargetFeatureKV &FE : FeatureTable) {
if (FeatureEntry.Value == FE.Value) continue;
- if ((FE.Implies & FeatureEntry.Value).any()) {
- Bits &= ~FE.Value;
+ if (FE.Implies.test(FeatureEntry.Value)) {
+ Bits.reset(FE.Value);
ClearImpliedBits(Bits, FE, FeatureTable);
}
}
@@ -157,12 +157,12 @@ SubtargetFeatures::ToggleFeature(FeatureBitset &Bits, StringRef Feature,
Find(StripFlag(Feature), FeatureTable);
// If there is a match
if (FeatureEntry) {
- if ((Bits & FeatureEntry->Value) == FeatureEntry->Value) {
- Bits &= ~FeatureEntry->Value;
+ if (Bits.test(FeatureEntry->Value)) {
+ Bits.reset(FeatureEntry->Value);
// For each feature that implies this, clear it.
ClearImpliedBits(Bits, *FeatureEntry, FeatureTable);
} else {
- Bits |= FeatureEntry->Value;
+ Bits.set(FeatureEntry->Value);
// For each feature that this implies, set it.
SetImpliedBits(Bits, *FeatureEntry, FeatureTable);
@@ -184,12 +184,12 @@ void SubtargetFeatures::ApplyFeatureFlag(FeatureBitset &Bits, StringRef Feature,
if (FeatureEntry) {
// Enable/disable feature in bits
if (isEnabled(Feature)) {
- Bits |= FeatureEntry->Value;
+ Bits.set(FeatureEntry->Value);
// For each feature that this implies, set it.
SetImpliedBits(Bits, *FeatureEntry, FeatureTable);
} else {
- Bits &= ~FeatureEntry->Value;
+ Bits.reset(FeatureEntry->Value);
// For each feature that implies this, clear it.
ClearImpliedBits(Bits, *FeatureEntry, FeatureTable);
@@ -225,11 +225,11 @@ SubtargetFeatures::getFeatureBits(StringRef CPU,
// If there is a match
if (CPUEntry) {
// Set base feature bits
- Bits = CPUEntry->Value;
+ Bits = CPUEntry->Implies;
// Set the feature implied by this CPU feature, if any.
for (auto &FE : FeatureTable) {
- if ((CPUEntry->Value & FE.Value).any())
+ if (CPUEntry->Implies.test(FE.Value))
SetImpliedBits(Bits, FE, FeatureTable);
}
} else {
diff --git a/llvm/utils/TableGen/SubtargetEmitter.cpp b/llvm/utils/TableGen/SubtargetEmitter.cpp
index 792c957ea19..92b85d88235 100644
--- a/llvm/utils/TableGen/SubtargetEmitter.cpp
+++ b/llvm/utils/TableGen/SubtargetEmitter.cpp
@@ -203,7 +203,7 @@ unsigned SubtargetEmitter::FeatureKeyValues(raw_ostream &OS) {
OS << " { "
<< "\"" << CommandLineName << "\", "
<< "\"" << Desc << "\", "
- << "{ " << Target << "::" << Name << " }, ";
+ << Target << "::" << Name << ", ";
RecVec ImpliesList = Feature->getValueAsListOfDefs("Implies");
@@ -242,18 +242,18 @@ unsigned SubtargetEmitter::CPUKeyValues(raw_ostream &OS) {
StringRef Name = Processor->getValueAsString("Name");
RecVec FeatureList = Processor->getValueAsListOfDefs("Features");
- // Emit as { "cpu", "description", { f1 , f2 , ... fn } },
- OS << " { "
+ // Emit as { "cpu", "description", 0, { f1 , f2 , ... fn } },
+ // The 0 is for the feature id which isn't used for CPUs.
+ OS << " { "
<< "\"" << Name << "\", "
- << "\"Select the " << Name << " processor\", ";
+ << "\"Select the " << Name << " processor\", 0, ";
OS << "{";
for (unsigned j = 0, M = FeatureList.size(); j < M;) {
OS << " " << Target << "::" << FeatureList[j]->getName();
if (++j < M) OS << ",";
}
- // The { } is for the "implies" section of this data structure.
- OS << " }, { } },\n";
+ OS << " } },\n";
}
// End processor table
OpenPOWER on IntegriCloud