[llvm] r300368 - [RDF] Correctly enumerate reg units for reg masks

Krzysztof Parzyszek via llvm-commits llvm-commits at lists.llvm.org
Fri Apr 14 14:17:37 PDT 2017


Author: kparzysz
Date: Fri Apr 14 16:17:36 2017
New Revision: 300368

URL: http://llvm.org/viewvc/llvm-project?rev=300368&view=rev
Log:
[RDF] Correctly enumerate reg units for reg masks

Modified:
    llvm/trunk/lib/Target/Hexagon/RDFRegisters.cpp

Modified: llvm/trunk/lib/Target/Hexagon/RDFRegisters.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/RDFRegisters.cpp?rev=300368&r1=300367&r2=300368&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Hexagon/RDFRegisters.cpp (original)
+++ llvm/trunk/lib/Target/Hexagon/RDFRegisters.cpp Fri Apr 14 16:17:36 2017
@@ -246,13 +246,15 @@ bool RegisterAggr::hasCoverOf(RegisterRe
 
 RegisterAggr &RegisterAggr::insert(RegisterRef RR) {
   if (PhysicalRegisterInfo::isRegMaskId(RR.Reg)) {
-    // XXX SLOW
+    BitVector PU(PRI.getTRI().getNumRegUnits()); // Preserved units.
     const uint32_t *MB = PRI.getRegMaskBits(RR.Reg);
     for (unsigned i = 1, e = PRI.getTRI().getNumRegs(); i != e; ++i) {
-      if (MB[i/32] & (1u << (i%32)))
+      if (!(MB[i/32] & (1u << (i%32))))
         continue;
-      insert(RegisterRef(i, LaneBitmask::getAll()));
+      for (MCRegUnitIterator U(i, &PRI.getTRI()); U.isValid(); ++U)
+        PU.set(*U);
     }
+    Units |= PU.flip();
     return *this;
   }
 




More information about the llvm-commits mailing list