From 35abd3e39e09ec4e094fbdf0e4e48cf18d10252c Mon Sep 17 00:00:00 2001 From: Andrea Di Biagio Date: Thu, 28 Jun 2018 11:20:14 +0000 Subject: [PATCH] [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. llvm-svn: 335837 --- llvm/tools/llvm-mca/RegisterFile.cpp | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/llvm/tools/llvm-mca/RegisterFile.cpp b/llvm/tools/llvm-mca/RegisterFile.cpp index db4a0d1..5da4b5e 100644 --- a/llvm/tools/llvm-mca/RegisterFile.cpp +++ b/llvm/tools/llvm-mca/RegisterFile.cpp @@ -181,20 +181,26 @@ void RegisterFile::collectWrites(SmallVectorImpl &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 Regs) const { -- 2.7.4