simplify some code
authorChris Lattner <sabre@nondot.org>
Sun, 6 Jan 2008 01:12:44 +0000 (01:12 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 6 Jan 2008 01:12:44 +0000 (01:12 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45642 91177308-0d34-0410-b5e6-96231b3b80d8

utils/TableGen/InstrInfoEmitter.cpp
utils/TableGen/InstrInfoEmitter.h

index 10962041e79d912fd8e411743bb98607497bc428..b3ca0aa91272811ba6b89e43147b2edd672434c5 100644 (file)
@@ -175,10 +175,7 @@ void InstrInfoEmitter::emitRecord(const CodeGenInstruction &Inst, unsigned Num,
   else
     OS << Inst.Name;
   
-  unsigned ItinClass = !IsItineraries ? 0 :
-            ItinClassNumber(Inst.TheDef->getValueAsDef("Itinerary")->getName());
-  
-  OS << "\",\t" << ItinClass << ", 0";
+  OS << "\",\t" << getItinClassNumber(Inst.TheDef) << ", 0";
 
   // Try to determine (from the pattern), if the instruction is a store.
   bool isStore = false;
@@ -258,28 +255,23 @@ void InstrInfoEmitter::emitRecord(const CodeGenInstruction &Inst, unsigned Num,
   OS << " },  // Inst #" << Num << " = " << Inst.TheDef->getName() << "\n";
 }
 
-struct LessRecord {
+struct RecordNameComparator {
   bool operator()(const Record *Rec1, const Record *Rec2) const {
     return Rec1->getName() < Rec2->getName();
   }
 };
+
 void InstrInfoEmitter::GatherItinClasses() {
   std::vector<Record*> DefList =
                           Records.getAllDerivedDefinitions("InstrItinClass");
-  IsItineraries = !DefList.empty();
-  
-  if (!IsItineraries) return;
-  
-  std::sort(DefList.begin(), DefList.end(), LessRecord());
+  std::sort(DefList.begin(), DefList.end(), RecordNameComparator());
 
-  for (unsigned i = 0, N = DefList.size(); i < N; i++) {
-    Record *Def = DefList[i];
-    ItinClassMap[Def->getName()] = i;
-  }
+  for (unsigned i = 0, N = DefList.size(); i < N; i++)
+    ItinClassMap[DefList[i]->getName()] = i;
 }  
   
-unsigned InstrInfoEmitter::ItinClassNumber(std::string ItinName) {
-  return ItinClassMap[ItinName];
+unsigned InstrInfoEmitter::getItinClassNumber(const Record *InstRec) {
+  return ItinClassMap[InstRec->getValueAsDef("Itinerary")->getName()];
 }
 
 void InstrInfoEmitter::emitShiftedValue(Record *R, StringInit *Val,
index fe40b5803d7b7daf6aa5720ebd5f19cdd4fc7cda..5893d4473bf7180a711a15dab3f58fdc2402ebf8 100644 (file)
@@ -16,6 +16,7 @@
 #define INSTRINFO_EMITTER_H
 
 #include "TableGenBackend.h"
+#include "CodeGenDAGPatterns.h"
 #include <vector>
 #include <map>
 
@@ -28,11 +29,11 @@ class CodeGenInstruction;
 
 class InstrInfoEmitter : public TableGenBackend {
   RecordKeeper &Records;
-  bool IsItineraries;
+  CodeGenDAGPatterns CDP;
   std::map<std::string, unsigned> ItinClassMap;
   
 public:
-  InstrInfoEmitter(RecordKeeper &R) : Records(R), IsItineraries(false) {}
+  InstrInfoEmitter(RecordKeeper &R) : Records(R), CDP(R) { }
 
   // run - Output the instruction set description, returning true on failure.
   void run(std::ostream &OS);
@@ -46,7 +47,7 @@ private:
                   std::map<std::vector<std::string>, unsigned> &OpInfo,
                   std::ostream &OS);
   void GatherItinClasses();
-  unsigned ItinClassNumber(std::string ItinName);
+  unsigned getItinClassNumber(const Record *InstRec);
   void emitShiftedValue(Record *R, StringInit *Val, IntInit *Shift,
                         std::ostream &OS);
   std::vector<std::string> GetOperandInfo(const CodeGenInstruction &Inst);