summaryrefslogtreecommitdiffstats
path: root/llvm/tools
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
commit35abd3e39e09ec4e094fbdf0e4e48cf18d10252c (patch)
treed08c7d550ab4b5508220256adb140715cf03ce16 /llvm/tools
parentba7b824939e6c0f4fac7d0d7ba816e09052fd480 (diff)
downloadbcm5719-llvm-35abd3e39e09ec4e094fbdf0e4e48cf18d10252c.tar.gz
bcm5719-llvm-35abd3e39e09ec4e094fbdf0e4e48cf18d10252c.zip
[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
Diffstat (limited to 'llvm/tools')
-rw-r--r--llvm/tools/llvm-mca/RegisterFile.cpp20
1 files changed, 13 insertions, 7 deletions
diff --git a/llvm/tools/llvm-mca/RegisterFile.cpp b/llvm/tools/llvm-mca/RegisterFile.cpp
index db4a0d17778..5da4b5eeafd 100644
--- a/llvm/tools/llvm-mca/RegisterFile.cpp
+++ b/llvm/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 {
OpenPOWER on IntegriCloud