summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-mca
diff options
context:
space:
mode:
authorAndrea Di Biagio <Andrea_DiBiagio@sn.scee.net>2018-08-28 13:14:42 +0000
committerAndrea Di Biagio <Andrea_DiBiagio@sn.scee.net>2018-08-28 13:14:42 +0000
commit29c5d5aa365c51046c1d352853ad1804beee785b (patch)
treed2f3db5b524351bbf8c6fc074cb682ffd1b2d90b /llvm/tools/llvm-mca
parent4d652c4ce75f4de60054de79f9f3fdee4cc1806f (diff)
downloadbcm5719-llvm-29c5d5aa365c51046c1d352853ad1804beee785b.tar.gz
bcm5719-llvm-29c5d5aa365c51046c1d352853ad1804beee785b.zip
[llvm-mca] Pass an instruction reference when notifying event listeners about reserved/released buffer resources. NFC
llvm-svn: 340821
Diffstat (limited to 'llvm/tools/llvm-mca')
-rw-r--r--llvm/tools/llvm-mca/Views/SchedulerStatistics.cpp6
-rw-r--r--llvm/tools/llvm-mca/Views/SchedulerStatistics.h6
-rw-r--r--llvm/tools/llvm-mca/include/HWEventListener.h8
-rw-r--r--llvm/tools/llvm-mca/include/Stages/ExecuteStage.h7
-rw-r--r--llvm/tools/llvm-mca/lib/Stages/ExecuteStage.cpp35
5 files changed, 30 insertions, 32 deletions
diff --git a/llvm/tools/llvm-mca/Views/SchedulerStatistics.cpp b/llvm/tools/llvm-mca/Views/SchedulerStatistics.cpp
index 4c0051208de..bc91bf04a81 100644
--- a/llvm/tools/llvm-mca/Views/SchedulerStatistics.cpp
+++ b/llvm/tools/llvm-mca/Views/SchedulerStatistics.cpp
@@ -25,7 +25,8 @@ void SchedulerStatistics::onEvent(const HWInstructionEvent &Event) {
++NumIssued;
}
-void SchedulerStatistics::onReservedBuffers(ArrayRef<unsigned> Buffers) {
+void SchedulerStatistics::onReservedBuffers(const InstRef & /* unused */,
+ ArrayRef<unsigned> Buffers) {
for (const unsigned Buffer : Buffers) {
BufferUsage &BU = Usage[Buffer];
BU.SlotsInUse++;
@@ -33,7 +34,8 @@ void SchedulerStatistics::onReservedBuffers(ArrayRef<unsigned> Buffers) {
}
}
-void SchedulerStatistics::onReleasedBuffers(ArrayRef<unsigned> Buffers) {
+void SchedulerStatistics::onReleasedBuffers(const InstRef & /* unused */,
+ ArrayRef<unsigned> Buffers) {
for (const unsigned Buffer : Buffers)
Usage[Buffer].SlotsInUse--;
}
diff --git a/llvm/tools/llvm-mca/Views/SchedulerStatistics.h b/llvm/tools/llvm-mca/Views/SchedulerStatistics.h
index a3f45c24af9..de70db26ed4 100644
--- a/llvm/tools/llvm-mca/Views/SchedulerStatistics.h
+++ b/llvm/tools/llvm-mca/Views/SchedulerStatistics.h
@@ -77,11 +77,13 @@ public:
// Increases the number of used scheduler queue slots of every buffered
// resource in the Buffers set.
- void onReservedBuffers(llvm::ArrayRef<unsigned> Buffers) override;
+ void onReservedBuffers(const InstRef &IR,
+ llvm::ArrayRef<unsigned> Buffers) override;
// Decreases by one the number of used scheduler queue slots of every
// buffered resource in the Buffers set.
- void onReleasedBuffers(llvm::ArrayRef<unsigned> Buffers) override;
+ void onReleasedBuffers(const InstRef &IR,
+ llvm::ArrayRef<unsigned> Buffers) override;
void printView(llvm::raw_ostream &OS) const override;
};
diff --git a/llvm/tools/llvm-mca/include/HWEventListener.h b/llvm/tools/llvm-mca/include/HWEventListener.h
index aa3e6dcf19a..fa574c2d1e1 100644
--- a/llvm/tools/llvm-mca/include/HWEventListener.h
+++ b/llvm/tools/llvm-mca/include/HWEventListener.h
@@ -127,9 +127,11 @@ public:
virtual void onResourceAvailable(const ResourceRef &RRef) {}
// Events generated by the Scheduler when buffered resources are
- // consumed/freed.
- virtual void onReservedBuffers(llvm::ArrayRef<unsigned> Buffers) {}
- virtual void onReleasedBuffers(llvm::ArrayRef<unsigned> Buffers) {}
+ // consumed/freed for an instruction.
+ virtual void onReservedBuffers(const InstRef &Inst,
+ llvm::ArrayRef<unsigned> Buffers) {}
+ virtual void onReleasedBuffers(const InstRef &Inst,
+ llvm::ArrayRef<unsigned> Buffers) {}
virtual ~HWEventListener() {}
diff --git a/llvm/tools/llvm-mca/include/Stages/ExecuteStage.h b/llvm/tools/llvm-mca/include/Stages/ExecuteStage.h
index b6bcba98eab..a2753e5572f 100644
--- a/llvm/tools/llvm-mca/include/Stages/ExecuteStage.h
+++ b/llvm/tools/llvm-mca/include/Stages/ExecuteStage.h
@@ -66,11 +66,8 @@ public:
void notifyInstructionReady(const InstRef &IR);
void notifyResourceAvailable(const ResourceRef &RR);
- // Notify listeners that buffered resources were consumed.
- void notifyReservedBuffers(llvm::ArrayRef<uint64_t> Buffers);
-
- // Notify listeners that buffered resources were freed.
- void notifyReleasedBuffers(llvm::ArrayRef<uint64_t> Buffers);
+ // Notify listeners that buffered resources have been consumed or freed.
+ void notifyReservedOrReleasedBuffers(const InstRef &IR, bool Reserved);
};
} // namespace mca
diff --git a/llvm/tools/llvm-mca/lib/Stages/ExecuteStage.cpp b/llvm/tools/llvm-mca/lib/Stages/ExecuteStage.cpp
index 7fff4b8e5d6..3f040bc2064 100644
--- a/llvm/tools/llvm-mca/lib/Stages/ExecuteStage.cpp
+++ b/llvm/tools/llvm-mca/lib/Stages/ExecuteStage.cpp
@@ -57,12 +57,11 @@ Error ExecuteStage::issueInstruction(InstRef &IR) {
SmallVector<InstRef, 4> Ready;
HWS.issueInstruction(IR, Used, Ready);
- const InstrDesc &Desc = IR.getInstruction()->getDesc();
- notifyReleasedBuffers(Desc.Buffers);
+ notifyReservedOrReleasedBuffers(IR, /* Reserved */false);
notifyInstructionIssued(IR, Used);
if (IR.getInstruction()->isExecuted()) {
notifyInstructionExecuted(IR);
- //FIXME: add a buffer of executed instructions.
+ // FIXME: add a buffer of executed instructions.
if (Error S = moveToTheNextStage(IR))
return S;
}
@@ -97,7 +96,7 @@ Error ExecuteStage::cycleStart() {
for (InstRef &IR : Executed) {
notifyInstructionExecuted(IR);
- //FIXME: add a buffer of executed instructions.
+ // FIXME: add a buffer of executed instructions.
if (Error S = moveToTheNextStage(IR))
return S;
}
@@ -120,9 +119,8 @@ Error ExecuteStage::execute(InstRef &IR) {
// BufferSize=0 as reserved. Resources with a buffer size of zero will only
// be released after MCIS is issued, and all the ResourceCycles for those
// units have been consumed.
- const InstrDesc &Desc = IR.getInstruction()->getDesc();
HWS.dispatch(IR);
- notifyReservedBuffers(Desc.Buffers);
+ notifyReservedOrReleasedBuffers(IR, /* Reserved */true);
if (!HWS.isReady(IR))
return ErrorSuccess();
@@ -170,26 +168,23 @@ void ExecuteStage::notifyInstructionIssued(
notifyEvent<HWInstructionEvent>(HWInstructionIssuedEvent(IR, Used));
}
-void ExecuteStage::notifyReservedBuffers(ArrayRef<uint64_t> Buffers) {
- if (Buffers.empty())
+void ExecuteStage::notifyReservedOrReleasedBuffers(const InstRef &IR,
+ bool Reserved) {
+ const InstrDesc &Desc = IR.getInstruction()->getDesc();
+ if (Desc.Buffers.empty())
return;
- SmallVector<unsigned, 4> BufferIDs(Buffers.begin(), Buffers.end());
- std::transform(Buffers.begin(), Buffers.end(), BufferIDs.begin(),
+ SmallVector<unsigned, 4> BufferIDs(Desc.Buffers.begin(), Desc.Buffers.end());
+ std::transform(Desc.Buffers.begin(), Desc.Buffers.end(), BufferIDs.begin(),
[&](uint64_t Op) { return HWS.getResourceID(Op); });
- for (HWEventListener *Listener : getListeners())
- Listener->onReservedBuffers(BufferIDs);
-}
-
-void ExecuteStage::notifyReleasedBuffers(ArrayRef<uint64_t> Buffers) {
- if (Buffers.empty())
+ if (Reserved) {
+ for (HWEventListener *Listener : getListeners())
+ Listener->onReservedBuffers(IR, BufferIDs);
return;
+ }
- SmallVector<unsigned, 4> BufferIDs(Buffers.begin(), Buffers.end());
- std::transform(Buffers.begin(), Buffers.end(), BufferIDs.begin(),
- [&](uint64_t Op) { return HWS.getResourceID(Op); });
for (HWEventListener *Listener : getListeners())
- Listener->onReleasedBuffers(BufferIDs);
+ Listener->onReleasedBuffers(IR, BufferIDs);
}
} // namespace mca
OpenPOWER on IntegriCloud