Skip to content

Commit 5612dc5

Browse files
Revert "[TableGen][DecoderEmitter] Store HW mode ID instead of name (NFC) (#154052)"
This reverts commit b20bbd4. Reverted due to greendragon failures: 20:34:43 In file included from /Users/ec2-user/jenkins/workspace/llvm.org/as-lldb-cmake/llvm-project/llvm/utils/TableGen/DecoderEmitter.cpp:14: 20:34:43 In file included from /Users/ec2-user/jenkins/workspace/llvm.org/as-lldb-cmake/llvm-project/llvm/utils/TableGen/Common/CodeGenHwModes.h:14: 20:34:43 In file included from /Users/ec2-user/jenkins/workspace/llvm.org/as-lldb-cmake/llvm-project/llvm/include/llvm/ADT/DenseMap.h:20: 20:34:43 In file included from /Users/ec2-user/jenkins/workspace/llvm.org/as-lldb-cmake/llvm-project/llvm/include/llvm/ADT/STLExtras.h:21: 20:34:43 In file included from /Users/ec2-user/jenkins/workspace/llvm.org/as-lldb-cmake/llvm-project/llvm/include/llvm/ADT/Hashing.h:53: 20:34:43 In file included from /Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.2.sdk/usr/include/c++/v1/algorithm:1913: 20:34:43 In file included from /Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.2.sdk/usr/include/c++/v1/chrono:746: 20:34:43 In file included from /Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.2.sdk/usr/include/c++/v1/__chrono/convert_to_tm.h:19: 20:34:43 In file included from /Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.2.sdk/usr/include/c++/v1/__chrono/statically_widen.h:17: 20:34:43 In file included from /Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.2.sdk/usr/include/c++/v1/__format/concepts.h:17: 20:34:43 In file included from /Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.2.sdk/usr/include/c++/v1/__format/format_parse_context.h:15: 20:34:43 In file included from /Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.2.sdk/usr/include/c++/v1/string_view:1027: 20:34:43 In file included from /Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.2.sdk/usr/include/c++/v1/functional:515: 20:34:43 In file included from /Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.2.sdk/usr/include/c++/v1/__functional/boyer_moore_searcher.h:26: 20:34:43 /Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.2.sdk/usr/include/c++/v1/vector:1376:19: error: object of type 'llvm::const_set_bits_iterator_impl<llvm::SmallBitVector>' cannot be assigned because its copy assignment operator is implicitly deleted 20:34:43 __mid = __first; 20:34:43 ^ 20:34:43 /Users/ec2-user/jenkins/workspace/llvm.org/as-lldb-cmake/llvm-project/llvm/utils/TableGen/DecoderEmitter.cpp:2404:13: note: in instantiation of function template specialization 'std::vector<unsigned int>::assign<llvm::const_set_bits_iterator_impl<llvm::SmallBitVector>, 0>' requested here 20:34:43 HwModeIDs.assign(BV.set_bits_begin(), BV.set_bits_end()); 20:34:43 ^ 20:34:43 /Users/ec2-user/jenkins/workspace/llvm.org/as-lldb-cmake/llvm-project/llvm/include/llvm/ADT/BitVector.h:35:21: note: copy assignment operator of 'const_set_bits_iterator_impl<llvm::SmallBitVector>' is implicitly deleted because field 'Parent' is of reference type 'const llvm::SmallBitVector &' 20:34:43 const BitVectorT &Parent; 20:34:43 ^ 20:34:43 1 warning and 1 error generated.
1 parent 668e649 commit 5612dc5

File tree

1 file changed

+42
-29
lines changed

1 file changed

+42
-29
lines changed

llvm/utils/TableGen/DecoderEmitter.cpp

Lines changed: 42 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -208,14 +208,14 @@ struct DecoderTableInfo {
208208
struct EncodingAndInst {
209209
const Record *EncodingDef;
210210
const CodeGenInstruction *Inst;
211-
unsigned HwModeID;
211+
StringRef HwModeName;
212212

213213
EncodingAndInst(const Record *EncodingDef, const CodeGenInstruction *Inst,
214-
unsigned HwModeID = DefaultMode)
215-
: EncodingDef(EncodingDef), Inst(Inst), HwModeID(HwModeID) {}
214+
StringRef HwModeName = "")
215+
: EncodingDef(EncodingDef), Inst(Inst), HwModeName(HwModeName) {}
216216
};
217217

218-
using NamespacesHwModesMap = std::map<std::string, std::set<unsigned>>;
218+
using NamespacesHwModesMap = std::map<std::string, std::set<StringRef>>;
219219

220220
class DecoderEmitter {
221221
const RecordKeeper &RK;
@@ -2391,53 +2391,63 @@ static bool Check(DecodeStatus &Out, DecodeStatus In) {
23912391
)";
23922392
}
23932393

2394-
// Collect all HwModes referenced by the target for encoding purposes.
2394+
// Collect all HwModes referenced by the target for encoding purposes,
2395+
// returning a vector of corresponding names.
23952396
static void collectHwModesReferencedForEncodings(
2396-
const CodeGenHwModes &HWM, std::vector<unsigned> &HwModeIDs,
2397+
const CodeGenHwModes &HWM, std::vector<StringRef> &Names,
23972398
NamespacesHwModesMap &NamespacesWithHwModes) {
23982399
SmallBitVector BV(HWM.getNumModeIds());
23992400
for (const auto &MS : HWM.getHwModeSelects()) {
24002401
for (auto [HwModeID, EncodingDef] : MS.second.Items) {
24012402
if (EncodingDef->isSubClassOf("InstructionEncoding")) {
24022403
std::string DecoderNamespace =
24032404
EncodingDef->getValueAsString("DecoderNamespace").str();
2404-
NamespacesWithHwModes[DecoderNamespace].insert(HwModeID);
2405+
if (HwModeID == DefaultMode) {
2406+
NamespacesWithHwModes[DecoderNamespace].insert("");
2407+
} else {
2408+
NamespacesWithHwModes[DecoderNamespace].insert(
2409+
HWM.getMode(HwModeID).Name);
2410+
}
24052411
BV.set(HwModeID);
24062412
}
24072413
}
24082414
}
2409-
HwModeIDs.assign(BV.set_bits_begin(), BV.set_bits_end());
2415+
transform(BV.set_bits(), std::back_inserter(Names), [&HWM](const int &M) {
2416+
if (M == DefaultMode)
2417+
return StringRef("");
2418+
return HWM.getModeName(M, /*IncludeDefault=*/true);
2419+
});
24102420
}
24112421

24122422
static void
24132423
handleHwModesUnrelatedEncodings(const CodeGenInstruction *Instr,
2414-
ArrayRef<unsigned> HwModeIDs,
2424+
ArrayRef<StringRef> HwModeNames,
24152425
NamespacesHwModesMap &NamespacesWithHwModes,
24162426
std::vector<EncodingAndInst> &GlobalEncodings) {
24172427
const Record *InstDef = Instr->TheDef;
24182428

24192429
switch (DecoderEmitterSuppressDuplicates) {
24202430
case SUPPRESSION_DISABLE: {
2421-
for (unsigned HwModeID : HwModeIDs)
2422-
GlobalEncodings.emplace_back(InstDef, Instr, HwModeID);
2431+
for (StringRef HwModeName : HwModeNames)
2432+
GlobalEncodings.emplace_back(InstDef, Instr, HwModeName);
24232433
break;
24242434
}
24252435
case SUPPRESSION_LEVEL1: {
24262436
std::string DecoderNamespace =
24272437
InstDef->getValueAsString("DecoderNamespace").str();
24282438
auto It = NamespacesWithHwModes.find(DecoderNamespace);
24292439
if (It != NamespacesWithHwModes.end()) {
2430-
for (unsigned HwModeID : It->second)
2431-
GlobalEncodings.emplace_back(InstDef, Instr, HwModeID);
2440+
for (StringRef HwModeName : It->second)
2441+
GlobalEncodings.emplace_back(InstDef, Instr, HwModeName);
24322442
} else {
24332443
// Only emit the encoding once, as it's DecoderNamespace doesn't
24342444
// contain any HwModes.
2435-
GlobalEncodings.emplace_back(InstDef, Instr, DefaultMode);
2445+
GlobalEncodings.emplace_back(InstDef, Instr, "");
24362446
}
24372447
break;
24382448
}
24392449
case SUPPRESSION_LEVEL2:
2440-
GlobalEncodings.emplace_back(InstDef, Instr, DefaultMode);
2450+
GlobalEncodings.emplace_back(InstDef, Instr, "");
24412451
break;
24422452
}
24432453
}
@@ -2468,28 +2478,34 @@ namespace {
24682478

24692479
// First, collect all encoding-related HwModes referenced by the target.
24702480
// And establish a mapping table between DecoderNamespace and HwMode.
2471-
// If HwModeNames is empty, add the default mode so we always have one HwMode.
2481+
// If HwModeNames is empty, add the empty string so we always have one HwMode.
24722482
const CodeGenHwModes &HWM = Target.getHwModes();
2473-
std::vector<unsigned> HwModeIDs;
2483+
std::vector<StringRef> HwModeNames;
24742484
NamespacesHwModesMap NamespacesWithHwModes;
2475-
collectHwModesReferencedForEncodings(HWM, HwModeIDs, NamespacesWithHwModes);
2476-
if (HwModeIDs.empty())
2477-
HwModeIDs.push_back(DefaultMode);
2485+
collectHwModesReferencedForEncodings(HWM, HwModeNames, NamespacesWithHwModes);
2486+
if (HwModeNames.empty())
2487+
HwModeNames.push_back("");
24782488

24792489
const auto &NumberedInstructions = Target.getInstructions();
24802490
NumberedEncodings.reserve(NumberedInstructions.size());
24812491
for (const auto &NumberedInstruction : NumberedInstructions) {
24822492
const Record *InstDef = NumberedInstruction->TheDef;
24832493
if (const Record *RV = InstDef->getValueAsOptionalDef("EncodingInfos")) {
24842494
EncodingInfoByHwMode EBM(RV, HWM);
2485-
for (auto [HwModeID, EncodingDef] : EBM)
2486-
NumberedEncodings.emplace_back(EncodingDef, NumberedInstruction,
2487-
HwModeID);
2495+
for (auto [HwModeID, EncodingDef] : EBM) {
2496+
// DecoderTables with DefaultMode should not have any suffix.
2497+
if (HwModeID == DefaultMode) {
2498+
NumberedEncodings.emplace_back(EncodingDef, NumberedInstruction, "");
2499+
} else {
2500+
NumberedEncodings.emplace_back(EncodingDef, NumberedInstruction,
2501+
HWM.getMode(HwModeID).Name);
2502+
}
2503+
}
24882504
continue;
24892505
}
24902506
// This instruction is encoded the same on all HwModes.
24912507
// According to user needs, provide varying degrees of suppression.
2492-
handleHwModesUnrelatedEncodings(NumberedInstruction, HwModeIDs,
2508+
handleHwModesUnrelatedEncodings(NumberedInstruction, HwModeNames,
24932509
NamespacesWithHwModes, NumberedEncodings);
24942510
}
24952511
for (const Record *NumberedAlias :
@@ -2536,11 +2552,8 @@ namespace {
25362552
}
25372553
std::string DecoderNamespace =
25382554
EncodingDef->getValueAsString("DecoderNamespace").str();
2539-
// DecoderTables with DefaultMode should not have any suffix.
2540-
if (NumberedEncoding.HwModeID != DefaultMode) {
2541-
StringRef HwModeName = HWM.getModeName(NumberedEncoding.HwModeID);
2542-
DecoderNamespace += ("_" + HwModeName).str();
2543-
}
2555+
if (!NumberedEncoding.HwModeName.empty())
2556+
DecoderNamespace += "_" + NumberedEncoding.HwModeName.str();
25442557
EncMap[{DecoderNamespace, Size}].push_back(NEI);
25452558
} else {
25462559
NumEncodingsOmitted++;

0 commit comments

Comments
 (0)