[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