aboutsummaryrefslogtreecommitdiff
path: root/tools/llvm-mca
diff options
context:
space:
mode:
authorAndrea Di Biagio <Andrea_DiBiagio@sn.scee.net>2018-06-28 11:20:14 +0000
committerAndrea Di Biagio <Andrea_DiBiagio@sn.scee.net>2018-06-28 11:20:14 +0000
commit5652271db1afe735efda339ab5281b4c86efe83e (patch)
treee64816298c38a57d72c9af44289d6e82fd667c10 /tools/llvm-mca
parent9d41c557cbeb7576856fc9ac9fac9f7b1bf9f8a6 (diff)
[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
Diffstat (limited to 'tools/llvm-mca')
-rw-r--r--tools/llvm-mca/RegisterFile.cpp20
1 files changed, 13 insertions, 7 deletions
diff --git a/tools/llvm-mca/RegisterFile.cpp b/tools/llvm-mca/RegisterFile.cpp
index db4a0d17778..5da4b5eeafd 100644
--- a/tools/llvm-mca/RegisterFile.cpp
+++ b/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 {