[llvm] r265733 - [RegisterBankInfo] Refactor the code to use BitMaskClassIterator.

Quentin Colombet via llvm-commits llvm-commits at lists.llvm.org
Thu Apr 7 15:08:57 PDT 2016


Author: qcolombet
Date: Thu Apr  7 17:08:56 2016
New Revision: 265733

URL: http://llvm.org/viewvc/llvm-project?rev=265733&view=rev
Log:
[RegisterBankInfo] Refactor the code to use BitMaskClassIterator.

Modified:
    llvm/trunk/lib/CodeGen/GlobalISel/RegisterBankInfo.cpp

Modified: llvm/trunk/lib/CodeGen/GlobalISel/RegisterBankInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/GlobalISel/RegisterBankInfo.cpp?rev=265733&r1=265732&r2=265733&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/GlobalISel/RegisterBankInfo.cpp (original)
+++ llvm/trunk/lib/CodeGen/GlobalISel/RegisterBankInfo.cpp Thu Apr  7 17:08:56 2016
@@ -119,35 +119,18 @@ void RegisterBankInfo::addRegBankCoverag
     MaxSize = std::max(MaxSize, CurRC.getSize() * 8);
 
     // Walk through all sub register classes and push them into the worklist.
-    const uint32_t *SubClassMask = CurRC.getSubClassMask();
-    // The subclasses mask is broken down into chunks of uint32_t, but it still
-    // represents all register classes.
     bool First = true;
-    for (unsigned Base = 0; Base < NbOfRegClasses; Base += 32) {
-      unsigned Idx = Base;
-      for (uint32_t Mask = *SubClassMask++; Mask; Mask >>= 1, ++Idx) {
-        unsigned Offset = countTrailingZeros(Mask);
-        unsigned SubRCId = Idx + Offset;
-        if (!Covered.test(SubRCId)) {
-          if (First)
-            DEBUG(dbgs() << "  Enqueue sub-class: ");
-          DEBUG(dbgs() << TRI.getRegClassName(TRI.getRegClass(SubRCId))
-                       << ", ");
-          WorkList.push_back(SubRCId);
-          // Remember that we saw the sub class.
-          Covered.set(SubRCId);
-          First = false;
-        }
-
-        // Move the cursor to the next sub class.
-        // I.e., eat up the zeros then move to the next bit.
-        // This last part is done as part of the loop increment.
-
-        // By construction, Offset must be less than 32.
-        // Otherwise, than means Mask was zero. I.e., no UB.
-        Mask >>= Offset;
-        // Remember that we shifted the base offset.
-        Idx += Offset;
+    for (BitMaskClassIterator It(CurRC.getSubClassMask(), TRI); It.isValid();
+         ++It) {
+      unsigned SubRCId = It.getID();
+      if (!Covered.test(SubRCId)) {
+        if (First)
+          DEBUG(dbgs() << "  Enqueue sub-class: ");
+        DEBUG(dbgs() << TRI.getRegClassName(TRI.getRegClass(SubRCId)) << ", ");
+        WorkList.push_back(SubRCId);
+        // Remember that we saw the sub class.
+        Covered.set(SubRCId);
+        First = false;
       }
     }
     if (!First)
@@ -173,33 +156,19 @@ void RegisterBankInfo::addRegBankCoverag
            ++SuperRCIt) {
         if (Pushed)
           break;
-        const uint32_t *SuperRCMask = SuperRCIt.getMask();
-        for (unsigned Base = 0; Base < NbOfRegClasses; Base += 32) {
-          unsigned Idx = Base;
-          for (uint32_t Mask = *SuperRCMask++; Mask; Mask >>= 1, ++Idx) {
-            unsigned Offset = countTrailingZeros(Mask);
-            unsigned SuperRCId = Idx + Offset;
-            if (SuperRCId == RCId) {
-              if (First)
-                DEBUG(dbgs() << "  Enqueue subreg-class: ");
-              DEBUG(dbgs() << TRI.getRegClassName(SubRC) << ", ");
-              WorkList.push_back(SubRCId);
-              // Remember that we saw the sub class.
-              Covered.set(SubRCId);
-              Pushed = true;
-              First = false;
-              break;
-            }
-
-            // Move the cursor to the next sub class.
-            // I.e., eat up the zeros then move to the next bit.
-            // This last part is done as part of the loop increment.
-
-            // By construction, Offset must be less than 32.
-            // Otherwise, than means Mask was zero. I.e., no UB.
-            Mask >>= Offset;
-            // Remember that we shifted the base offset.
-            Idx += Offset;
+        for (BitMaskClassIterator It(SuperRCIt.getMask(), TRI); It.isValid();
+             ++It) {
+          unsigned SuperRCId = It.getID();
+          if (SuperRCId == RCId) {
+            if (First)
+              DEBUG(dbgs() << "  Enqueue subreg-class: ");
+            DEBUG(dbgs() << TRI.getRegClassName(SubRC) << ", ");
+            WorkList.push_back(SubRCId);
+            // Remember that we saw the sub class.
+            Covered.set(SubRCId);
+            Pushed = true;
+            First = false;
+            break;
           }
         }
       }




More information about the llvm-commits mailing list