[llvm-commits] [llvm] r154510 - /llvm/trunk/utils/TableGen/CodeGenRegisters.cpp

Andrew Trick atrick at apple.com
Wed Apr 11 10:35:27 PDT 2012


Author: atrick
Date: Wed Apr 11 12:35:26 2012
New Revision: 154510

URL: http://llvm.org/viewvc/llvm-project?rev=154510&view=rev
Log:
TableGen'd regpressure: register unit set pruning.

The pruning is more complete if it is not done incrementally. The code
is also a tad less convluted.

Modified:
    llvm/trunk/utils/TableGen/CodeGenRegisters.cpp

Modified: llvm/trunk/utils/TableGen/CodeGenRegisters.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/CodeGenRegisters.cpp?rev=154510&r1=154509&r2=154510&view=diff
==============================================================================
--- llvm/trunk/utils/TableGen/CodeGenRegisters.cpp (original)
+++ llvm/trunk/utils/TableGen/CodeGenRegisters.cpp Wed Apr 11 12:35:26 2012
@@ -1167,8 +1167,7 @@
   assert(RegClassUnitSets.empty() && "this invalidates RegClassUnitSets");
 
   // Form an equivalence class of UnitSets with no significant difference.
-  // Populate PrunedUnitSets with each equivalence class's superset.
-  std::vector<RegUnitSet> PrunedUnitSets;
+  std::vector<unsigned> SuperSetIDs;
   for (unsigned SubIdx = 0, EndIdx = RegUnitSets.size();
        SubIdx != EndIdx; ++SubIdx) {
     const RegUnitSet &SubSet = RegUnitSets[SubIdx];
@@ -1176,25 +1175,22 @@
     for (; SuperIdx != EndIdx; ++SuperIdx) {
       if (SuperIdx == SubIdx)
         continue;
-      const RegUnitSet *SuperSet = 0;
-      if (SuperIdx > SubIdx)
-        SuperSet = &RegUnitSets[SuperIdx];
-      else {
-        // Compare with already-pruned sets.
-        if (SuperIdx >= PrunedUnitSets.size())
-          continue;
-        SuperSet = &PrunedUnitSets[SuperIdx];
-      }
-      if (isRegUnitSubSet(SubSet.Units, SuperSet->Units)
-          && (SubSet.Units.size() + 3 > SuperSet->Units.size())) {
+
+      const RegUnitSet &SuperSet = RegUnitSets[SuperIdx];
+      if (isRegUnitSubSet(SubSet.Units, SuperSet.Units)
+          && (SubSet.Units.size() + 3 > SuperSet.Units.size())) {
         break;
       }
     }
-    if (SuperIdx != EndIdx)
-      continue;
-    PrunedUnitSets.resize(PrunedUnitSets.size()+1);
-    PrunedUnitSets.back().Name = RegUnitSets[SubIdx].Name;
-    PrunedUnitSets.back().Units.swap(RegUnitSets[SubIdx].Units);
+    if (SuperIdx == EndIdx)
+      SuperSetIDs.push_back(SubIdx);
+  }
+  // Populate PrunedUnitSets with each equivalence class's superset.
+  std::vector<RegUnitSet> PrunedUnitSets(SuperSetIDs.size());
+  for (unsigned i = 0, e = SuperSetIDs.size(); i != e; ++i) {
+    unsigned SuperIdx = SuperSetIDs[i];
+    PrunedUnitSets[i].Name = RegUnitSets[SuperIdx].Name;
+    PrunedUnitSets[i].Units.swap(RegUnitSets[SuperIdx].Units);
   }
   RegUnitSets.swap(PrunedUnitSets);
 }





More information about the llvm-commits mailing list