Browse Source

[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.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@335837 91177308-0d34-0410-b5e6-96231b3b80d8
Andrea Di Biagio 7 years ago
parent
commit
5652271db1
1 changed files with 13 additions and 7 deletions
  1. 13 7
      tools/llvm-mca/RegisterFile.cpp

+ 13 - 7
tools/llvm-mca/RegisterFile.cpp

@@ -181,20 +181,26 @@ void RegisterFile::collectWrites(SmallVectorImpl<WriteState *> &Writes,
                                  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 {