[llvm] r335837 - [llvm-mca] Refactor method RegisterFile::collectWrites(). NFCI

Andrea Di Biagio via llvm-commits llvm-commits at lists.llvm.org
Thu Jun 28 04:20:14 PDT 2018


Author: adibiagio
Date: Thu Jun 28 04:20:14 2018
New Revision: 335837

URL: http://llvm.org/viewvc/llvm-project?rev=335837&view=rev
Log:
[llvm-mca] Refactor method RegisterFile::collectWrites(). NFCI

Rather than calling std::find in a loop, just sort the vector and remove
duplicate entries at the end of the function.

Also, move the debug print at the end of the function, and query the
MCRegisterInfo to print register names rather than physreg IDs.

No functional change intended.

Modified:
    llvm/trunk/tools/llvm-mca/RegisterFile.cpp

Modified: llvm/trunk/tools/llvm-mca/RegisterFile.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-mca/RegisterFile.cpp?rev=335837&r1=335836&r2=335837&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-mca/RegisterFile.cpp (original)
+++ llvm/trunk/tools/llvm-mca/RegisterFile.cpp Thu Jun 28 04:20:14 2018
@@ -181,20 +181,26 @@ void RegisterFile::collectWrites(SmallVe
                                  unsigned RegID) const {
   assert(RegID && RegID < RegisterMappings.size());
   WriteState *WS = RegisterMappings[RegID].first;
-  if (WS) {
-    LLVM_DEBUG(dbgs() << "Found a dependent use of RegID=" << RegID << '\n');
+  if (WS)
     Writes.push_back(WS);
-  }
 
   // Handle potential partial register updates.
   for (MCSubRegIterator I(RegID, &MRI); I.isValid(); ++I) {
     WS = RegisterMappings[*I].first;
-    if (WS && std::find(Writes.begin(), Writes.end(), WS) == Writes.end()) {
-      LLVM_DEBUG(dbgs() << "Found a dependent use of subReg " << *I
-                        << " (part of " << RegID << ")\n");
+    if (WS)
       Writes.push_back(WS);
-    }
   }
+
+  // Remove duplicate entries and resize the input vector.
+  llvm::sort(Writes.begin(), Writes.end());
+  auto It = std::unique(Writes.begin(), Writes.end());
+  Writes.resize(std::distance(Writes.begin(), It));
+
+  LLVM_DEBUG({
+    for (const WriteState *WS : Writes)
+      dbgs() << "Found a dependent use of Register "
+             << MRI.getName(WS->getRegisterID()) << "\n";
+  });
 }
 
 unsigned RegisterFile::isAvailable(ArrayRef<unsigned> Regs) const {




More information about the llvm-commits mailing list