[llvm] db0ea51 - Revert "[TableGen] Add generation of argument register lists"
Bill Wendling via llvm-commits
llvm-commits at lists.llvm.org
Thu May 19 15:16:25 PDT 2022
Author: Bill Wendling
Date: 2022-05-19T15:16:08-07:00
New Revision: db0ea51c830af095b8e9ff1b9ba23f87b10cf3f5
URL: https://github.com/llvm/llvm-project/commit/db0ea51c830af095b8e9ff1b9ba23f87b10cf3f5
DIFF: https://github.com/llvm/llvm-project/commit/db0ea51c830af095b8e9ff1b9ba23f87b10cf3f5.diff
LOG: Revert "[TableGen] Add generation of argument register lists"
There are build bot failures.
This reverts commit 3fa1b6557d08a148ef853c2a761f1c43e09fef5e.
Added:
Modified:
llvm/utils/TableGen/CallingConvEmitter.cpp
Removed:
################################################################################
diff --git a/llvm/utils/TableGen/CallingConvEmitter.cpp b/llvm/utils/TableGen/CallingConvEmitter.cpp
index 279a01e4ac6aa..fe5b13eda122f 100644
--- a/llvm/utils/TableGen/CallingConvEmitter.cpp
+++ b/llvm/utils/TableGen/CallingConvEmitter.cpp
@@ -20,14 +20,6 @@ using namespace llvm;
namespace {
class CallingConvEmitter {
RecordKeeper &Records;
- unsigned Counter;
- std::string CurrentAction;
- bool SwiftAction;
-
- std::map<std::string, std::set<std::string>> AssignedRegsMap;
- std::map<std::string, std::set<std::string>> AssignedSwiftRegsMap;
- std::map<std::string, std::set<std::string>> DelegateToMap;
-
public:
explicit CallingConvEmitter(RecordKeeper &R) : Records(R) {}
@@ -36,7 +28,7 @@ class CallingConvEmitter {
private:
void EmitCallingConv(Record *CC, raw_ostream &O);
void EmitAction(Record *Action, unsigned Indent, raw_ostream &O);
- void EmitArgRegisterLists(raw_ostream &O);
+ unsigned Counter;
};
} // End anonymous namespace
@@ -46,7 +38,6 @@ void CallingConvEmitter::run(raw_ostream &O) {
// Emit prototypes for all of the non-custom CC's so that they can forward ref
// each other.
Records.startTimer("Emit prototypes");
- O << "#ifndef GET_CC_REGISTER_LISTS\n\n";
for (Record *CC : CCs) {
if (!CC->getValueAsBit("Custom")) {
unsigned Pad = CC->getName().size();
@@ -67,28 +58,18 @@ void CallingConvEmitter::run(raw_ostream &O) {
// Emit each non-custom calling convention description in full.
Records.startTimer("Emit full descriptions");
for (Record *CC : CCs) {
- if (!CC->getValueAsBit("Custom")) {
+ if (!CC->getValueAsBit("Custom"))
EmitCallingConv(CC, O);
- }
}
-
- EmitArgRegisterLists(O);
-
- O << "\n#endif // CC_REGISTER_LIST\n";
}
+
void CallingConvEmitter::EmitCallingConv(Record *CC, raw_ostream &O) {
ListInit *CCActions = CC->getValueAsListInit("Actions");
Counter = 0;
- CurrentAction = CC->getName().str();
- // Call upon the creation of a map entry from the void!
- // We want an entry in AssignedRegsMap for every action, even if that
- // entry is empty.
- AssignedRegsMap[CurrentAction] = {};
-
O << "\n\n";
- unsigned Pad = CurrentAction.size();
+ unsigned Pad = CC->getName().size();
if (CC->getValueAsBit("Entry")) {
O << "bool llvm::";
Pad += 12;
@@ -96,21 +77,13 @@ void CallingConvEmitter::EmitCallingConv(Record *CC, raw_ostream &O) {
O << "static bool ";
Pad += 13;
}
- O << CurrentAction << "(unsigned ValNo, MVT ValVT,\n"
+ O << CC->getName() << "(unsigned ValNo, MVT ValVT,\n"
<< std::string(Pad, ' ') << "MVT LocVT, CCValAssign::LocInfo LocInfo,\n"
<< std::string(Pad, ' ') << "ISD::ArgFlagsTy ArgFlags, CCState &State) {\n";
// Emit all of the actions, in order.
for (unsigned i = 0, e = CCActions->size(); i != e; ++i) {
- Record *Action = CCActions->getElementAsRecord(i);
- SwiftAction = llvm::any_of(Action->getSuperClasses(),
- [](const std::pair<Record *, SMRange> &Class) {
- StringRef Name =
- Class.first->getNameInitAsString();
- return Name.startswith("CCIfSwift");
- });
-
O << "\n";
- EmitAction(Action, 2, O);
+ EmitAction(CCActions->getElementAsRecord(i), 2, O);
}
O << "\n return true; // CC didn't match.\n";
@@ -120,7 +93,7 @@ void CallingConvEmitter::EmitCallingConv(Record *CC, raw_ostream &O) {
void CallingConvEmitter::EmitAction(Record *Action,
unsigned Indent, raw_ostream &O) {
std::string IndentStr = std::string(Indent, ' ');
-
+
if (Action->isSubClassOf("CCPredicateAction")) {
O << IndentStr << "if (";
@@ -148,30 +121,18 @@ void CallingConvEmitter::EmitAction(Record *Action,
O << IndentStr << "if (!" << CC->getName()
<< "(ValNo, ValVT, LocVT, LocInfo, ArgFlags, State))\n"
<< IndentStr << " return false;\n";
- DelegateToMap[CurrentAction].insert(CC->getName().str());
} else if (Action->isSubClassOf("CCAssignToReg")) {
ListInit *RegList = Action->getValueAsListInit("RegList");
if (RegList->size() == 1) {
- std::string Name = getQualifiedName(RegList->getElementAsRecord(0));
- O << IndentStr << "if (unsigned Reg = State.AllocateReg(" << Name
- << ")) {\n";
- if (SwiftAction)
- AssignedSwiftRegsMap[CurrentAction].insert(Name);
- else
- AssignedRegsMap[CurrentAction].insert(Name);
+ O << IndentStr << "if (unsigned Reg = State.AllocateReg(";
+ O << getQualifiedName(RegList->getElementAsRecord(0)) << ")) {\n";
} else {
O << IndentStr << "static const MCPhysReg RegList" << ++Counter
<< "[] = {\n";
O << IndentStr << " ";
ListSeparator LS;
- for (unsigned i = 0, e = RegList->size(); i != e; ++i) {
- std::string Name = getQualifiedName(RegList->getElementAsRecord(i));
- if (SwiftAction)
- AssignedSwiftRegsMap[CurrentAction].insert(Name);
- else
- AssignedRegsMap[CurrentAction].insert(Name);
- O << LS << Name;
- }
+ for (unsigned i = 0, e = RegList->size(); i != e; ++i)
+ O << LS << getQualifiedName(RegList->getElementAsRecord(i));
O << "\n" << IndentStr << "};\n";
O << IndentStr << "if (unsigned Reg = State.AllocateReg(RegList"
<< Counter << ")) {\n";
@@ -326,83 +287,6 @@ void CallingConvEmitter::EmitAction(Record *Action,
}
}
-void CallingConvEmitter::EmitArgRegisterLists(raw_ostream &O) {
- // Transitively merge all delegated CCs into AssignedRegsMap.
- using EntryTy = std::pair<std::string, std::set<std::string>>;
- bool Redo;
- do {
- Redo = false;
- std::deque<EntryTy> Worklist(DelegateToMap.begin(), DelegateToMap.end());
-
- while (!Worklist.empty()) {
- EntryTy Entry = Worklist.front();
- Worklist.pop_front();
-
- const std::string &CCName = Entry.first;
- std::set<std::string> &Registers = Entry.second;
- if (!Registers.empty())
- continue;
-
- for (auto &InnerEntry : Worklist) {
- const std::string &InnerCCName = InnerEntry.first;
- std::set<std::string> &InnerRegisters = InnerEntry.second;
-
- if (InnerRegisters.find(CCName) != InnerRegisters.end()) {
- AssignedRegsMap[InnerCCName].insert(
- AssignedRegsMap[CCName].begin(),
- AssignedRegsMap[CCName].end());
- InnerRegisters.erase(CCName);
- }
- }
-
- DelegateToMap.erase(CCName);
- Redo = true;
- }
- } while (Redo);
-
- if (AssignedRegsMap.empty())
- return;
-
- O << "\n#else\n\n";
-
- for (auto &Entry : AssignedRegsMap) {
- const std::string &RegName = Entry.first;
- std::set<std::string> &Registers = Entry.second;
-
- if (RegName.empty())
- continue;
-
- O << "const MCRegister " << Entry.first << "_ArgRegs[] = { ";
-
- if (Registers.empty()) {
- O << "0";
- } else {
- ListSeparator LS;
- for (const std::string &Reg : Registers)
- O << LS << Reg;
- }
-
- O << " };\n";
- }
-
- if (AssignedSwiftRegsMap.empty())
- return;
-
- O << "\n// Registers used by Swift.\n";
- for (auto &Entry : AssignedSwiftRegsMap) {
- const std::string &RegName = Entry.first;
- std::set<std::string> &Registers = Entry.second;
-
- O << "const MCRegister " << RegName << "_Swift_ArgRegs[] = { ";
-
- ListSeparator LS;
- for (const std::string &Reg : Registers)
- O << LS << Reg;
-
- O << " };\n";
- }
-}
-
namespace llvm {
void EmitCallingConv(RecordKeeper &RK, raw_ostream &OS) {
More information about the llvm-commits
mailing list