summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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