Remove unused function.
[oota-llvm.git] / utils / TableGen / RegisterInfoEmitter.cpp
index 64e1dfee0f58846b5b68ea91c45dff46b926a2ad..0c5e8442c2aa114d9f935c62cf542ef9a25d1a22 100644 (file)
@@ -466,15 +466,16 @@ void RegisterInfoEmitter::run(std::ostream &OS) {
   // Print the SubregHashTable, a simple quadratically probed
   // hash table for determining if a register is a subregister
   // of another register.
-  unsigned SubregHashTableSize = NextPowerOf2(2 * Regs.size());
-  unsigned* SubregHashTable =
-                  (unsigned*)malloc(2 * SubregHashTableSize * sizeof(unsigned));
-  for (unsigned i = 0; i < SubregHashTableSize * 2; ++i)
-    SubregHashTable[i] = ~0U;
-  
+  unsigned NumSubRegs = 0;
   std::map<Record*, unsigned> RegNo;
-  for (unsigned i = 0, e = Regs.size(); i != e; ++i)
+  for (unsigned i = 0, e = Regs.size(); i != e; ++i) {
     RegNo[Regs[i].TheDef] = i;
+    NumSubRegs += RegisterSubRegs[Regs[i].TheDef].size();
+  }
+  
+  unsigned SubregHashTableSize = NextPowerOf2(2 * NumSubRegs);
+  unsigned* SubregHashTable = new unsigned[2 * SubregHashTableSize];
+  std::fill(SubregHashTable, SubregHashTable + 2 * SubregHashTableSize, ~0U);
   
   for (unsigned i = 0, e = Regs.size(); i != e; ++i) {
     Record* R = Regs[i].TheDef;
@@ -484,11 +485,11 @@ void RegisterInfoEmitter::run(std::ostream &OS) {
       // We have to increase the indices of both registers by one when
       // computing the hash because, in the generated code, there
       // will be an extra empty slot at register 0.
-      size_t index = ((i+1) + (RegNo[RJ]+1) * 37) % SubregHashTableSize;
+      size_t index = ((i+1) + (RegNo[RJ]+1) * 37) & (SubregHashTableSize-1);
       unsigned ProbeAmt = 2;
       while (SubregHashTable[index*2] != ~0U &&
              SubregHashTable[index*2+1] != ~0U) {
-        index = (index + ProbeAmt) % SubregHashTableSize;
+        index = (index + ProbeAmt) & (SubregHashTableSize-1);
         ProbeAmt += 2;
       }
       
@@ -500,32 +501,37 @@ void RegisterInfoEmitter::run(std::ostream &OS) {
   if (SubregHashTableSize) {
     std::string Namespace = Regs[0].TheDef->getValueAsString("Namespace");
     
-    OS << "\n\n  unsigned SubregHashTable[] = {";
+    OS << "\n\n  const unsigned SubregHashTable[] = { ";
     for (unsigned i = 0; i < SubregHashTableSize - 1; ++i) {
+      if (i != 0)
+        // Insert spaces for nice formatting.
+        OS << "                                       ";
+      
       if (SubregHashTable[2*i] != ~0U) {
         OS << getQualifiedName(Regs[SubregHashTable[2*i]].TheDef) << ", "
-           << getQualifiedName(Regs[SubregHashTable[2*i+1]].TheDef) << ", ";
+           << getQualifiedName(Regs[SubregHashTable[2*i+1]].TheDef) << ", \n";
       } else {
-        OS << Namespace << "::NoRegister, " << Namespace << "::NoRegister, ";
+        OS << Namespace << "::NoRegister, " << Namespace << "::NoRegister, \n";
       }
     }
     
     unsigned Idx = SubregHashTableSize*2-2;
     if (SubregHashTable[Idx] != ~0U) {
-      OS << getQualifiedName(Regs[SubregHashTable[Idx]].TheDef) << ", "
-         << getQualifiedName(Regs[SubregHashTable[Idx+1]].TheDef) << "};\n";
+      OS << "                                       "
+         << getQualifiedName(Regs[SubregHashTable[Idx]].TheDef) << ", "
+         << getQualifiedName(Regs[SubregHashTable[Idx+1]].TheDef) << " };\n";
     } else {
-      OS << Namespace << "::NoRegister, " << Namespace << "::NoRegister};\n";
+      OS << Namespace << "::NoRegister, " << Namespace << "::NoRegister };\n";
     }
     
-    OS << "  unsigned SubregHashTableSize = "
+    OS << "  const unsigned SubregHashTableSize = "
        << SubregHashTableSize << ";\n";
   } else {
-    OS << "\n\n  unsigned SubregHashTable[] = { ~0U, ~0U };\n"
-       << "  unsigned SubregHashTableSize = 1;\n";
+    OS << "\n\n  const unsigned SubregHashTable[] = { ~0U, ~0U };\n"
+       << "  const unsigned SubregHashTableSize = 1;\n";
   }
   
-  free(SubregHashTable);
+  delete [] SubregHashTable;
 
   if (!RegisterAliases.empty())
     OS << "\n\n  // Register Alias Sets...\n";
@@ -671,9 +677,8 @@ void RegisterInfoEmitter::run(std::ostream &OS) {
      << "(int CallFrameSetupOpcode, int CallFrameDestroyOpcode)\n"
      << "  : TargetRegisterInfo(RegisterDescriptors, " << Registers.size()+1
      << ", RegisterClasses, RegisterClasses+" << RegisterClasses.size() <<",\n "
-     << "                 CallFrameSetupOpcode, CallFrameDestroyOpcode) {\n"
-     << "  this->SubregHash = SubregHashTable;\n"
-     << "  this->SubregHashSize = SubregHashTableSize;\n"
+     << "                 CallFrameSetupOpcode, CallFrameDestroyOpcode,\n"
+     << "                 SubregHashTable, SubregHashTableSize) {\n"
      << "}\n\n";
 
   // Collect all information about dwarf register numbers