[llvm] r354243 - [MC] Make SubtargetFeatureKV only store one FeatureBitset and use an 'unsigned' to hold the value.
Craig Topper via llvm-commits
llvm-commits at lists.llvm.org
Sun Feb 17 22:46:17 PST 2019
Author: ctopper
Date: Sun Feb 17 22:46:17 2019
New Revision: 354243
URL: http://llvm.org/viewvc/llvm-project?rev=354243&view=rev
Log:
[MC] Make SubtargetFeatureKV only store one FeatureBitset and use an 'unsigned' to hold the value.
This class is used for two difference tablegen generated tables. For one of the tables the Value FeatureBitset only has one bit set. For the other usage the Implies field was unused.
This patch changes the Value field to just be an unsigned. For the usage that put a real vector in bitset, we now use the previously unused Implies field and leave the Value field unused instead.
This is good for a 16K reduction in the size of llc on my local build with all targets enabled.
Modified:
llvm/trunk/include/llvm/MC/SubtargetFeature.h
llvm/trunk/lib/MC/SubtargetFeature.cpp
llvm/trunk/utils/TableGen/SubtargetEmitter.cpp
Modified: llvm/trunk/include/llvm/MC/SubtargetFeature.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/SubtargetFeature.h?rev=354243&r1=354242&r2=354243&view=diff
==============================================================================
--- llvm/trunk/include/llvm/MC/SubtargetFeature.h (original)
+++ llvm/trunk/include/llvm/MC/SubtargetFeature.h Sun Feb 17 22:46:17 2019
@@ -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
Modified: llvm/trunk/lib/MC/SubtargetFeature.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/SubtargetFeature.cpp?rev=354243&r1=354242&r2=354243&view=diff
==============================================================================
--- llvm/trunk/lib/MC/SubtargetFeature.cpp (original)
+++ llvm/trunk/lib/MC/SubtargetFeature.cpp Sun Feb 17 22:46:17 2019
@@ -127,8 +127,8 @@ void SetImpliedBits(FeatureBitset &Bits,
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 &Bit
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(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
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(String
// 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 {
Modified: llvm/trunk/utils/TableGen/SubtargetEmitter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/SubtargetEmitter.cpp?rev=354243&r1=354242&r2=354243&view=diff
==============================================================================
--- llvm/trunk/utils/TableGen/SubtargetEmitter.cpp (original)
+++ llvm/trunk/utils/TableGen/SubtargetEmitter.cpp Sun Feb 17 22:46:17 2019
@@ -203,7 +203,7 @@ unsigned SubtargetEmitter::FeatureKeyVal
OS << " { "
<< "\"" << CommandLineName << "\", "
<< "\"" << Desc << "\", "
- << "{ " << Target << "::" << Name << " }, ";
+ << Target << "::" << Name << ", ";
RecVec ImpliesList = Feature->getValueAsListOfDefs("Implies");
@@ -242,18 +242,18 @@ unsigned SubtargetEmitter::CPUKeyValues(
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
More information about the llvm-commits
mailing list