Skip to content
This repository was archived by the owner on Mar 28, 2020. It is now read-only.

Commit 939bd02

Browse files
committed
[llvm-mca] Pass an instruction reference when notifying event listeners about reserved/released buffer resources. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@340821 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent 2120ec1 commit 939bd02

File tree

5 files changed

+30
-32
lines changed

5 files changed

+30
-32
lines changed

tools/llvm-mca/Views/SchedulerStatistics.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,17 @@ void SchedulerStatistics::onEvent(const HWInstructionEvent &Event) {
2525
++NumIssued;
2626
}
2727

28-
void SchedulerStatistics::onReservedBuffers(ArrayRef<unsigned> Buffers) {
28+
void SchedulerStatistics::onReservedBuffers(const InstRef & /* unused */,
29+
ArrayRef<unsigned> Buffers) {
2930
for (const unsigned Buffer : Buffers) {
3031
BufferUsage &BU = Usage[Buffer];
3132
BU.SlotsInUse++;
3233
BU.MaxUsedSlots = std::max(BU.MaxUsedSlots, BU.SlotsInUse);
3334
}
3435
}
3536

36-
void SchedulerStatistics::onReleasedBuffers(ArrayRef<unsigned> Buffers) {
37+
void SchedulerStatistics::onReleasedBuffers(const InstRef & /* unused */,
38+
ArrayRef<unsigned> Buffers) {
3739
for (const unsigned Buffer : Buffers)
3840
Usage[Buffer].SlotsInUse--;
3941
}

tools/llvm-mca/Views/SchedulerStatistics.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,11 +77,13 @@ class SchedulerStatistics final : public View {
7777

7878
// Increases the number of used scheduler queue slots of every buffered
7979
// resource in the Buffers set.
80-
void onReservedBuffers(llvm::ArrayRef<unsigned> Buffers) override;
80+
void onReservedBuffers(const InstRef &IR,
81+
llvm::ArrayRef<unsigned> Buffers) override;
8182

8283
// Decreases by one the number of used scheduler queue slots of every
8384
// buffered resource in the Buffers set.
84-
void onReleasedBuffers(llvm::ArrayRef<unsigned> Buffers) override;
85+
void onReleasedBuffers(const InstRef &IR,
86+
llvm::ArrayRef<unsigned> Buffers) override;
8587

8688
void printView(llvm::raw_ostream &OS) const override;
8789
};

tools/llvm-mca/include/HWEventListener.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -127,9 +127,11 @@ class HWEventListener {
127127
virtual void onResourceAvailable(const ResourceRef &RRef) {}
128128

129129
// Events generated by the Scheduler when buffered resources are
130-
// consumed/freed.
131-
virtual void onReservedBuffers(llvm::ArrayRef<unsigned> Buffers) {}
132-
virtual void onReleasedBuffers(llvm::ArrayRef<unsigned> Buffers) {}
130+
// consumed/freed for an instruction.
131+
virtual void onReservedBuffers(const InstRef &Inst,
132+
llvm::ArrayRef<unsigned> Buffers) {}
133+
virtual void onReleasedBuffers(const InstRef &Inst,
134+
llvm::ArrayRef<unsigned> Buffers) {}
133135

134136
virtual ~HWEventListener() {}
135137

tools/llvm-mca/include/Stages/ExecuteStage.h

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,8 @@ class ExecuteStage final : public Stage {
6666
void notifyInstructionReady(const InstRef &IR);
6767
void notifyResourceAvailable(const ResourceRef &RR);
6868

69-
// Notify listeners that buffered resources were consumed.
70-
void notifyReservedBuffers(llvm::ArrayRef<uint64_t> Buffers);
71-
72-
// Notify listeners that buffered resources were freed.
73-
void notifyReleasedBuffers(llvm::ArrayRef<uint64_t> Buffers);
69+
// Notify listeners that buffered resources have been consumed or freed.
70+
void notifyReservedOrReleasedBuffers(const InstRef &IR, bool Reserved);
7471
};
7572

7673
} // namespace mca

tools/llvm-mca/lib/Stages/ExecuteStage.cpp

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -57,12 +57,11 @@ Error ExecuteStage::issueInstruction(InstRef &IR) {
5757
SmallVector<InstRef, 4> Ready;
5858
HWS.issueInstruction(IR, Used, Ready);
5959

60-
const InstrDesc &Desc = IR.getInstruction()->getDesc();
61-
notifyReleasedBuffers(Desc.Buffers);
60+
notifyReservedOrReleasedBuffers(IR, /* Reserved */false);
6261
notifyInstructionIssued(IR, Used);
6362
if (IR.getInstruction()->isExecuted()) {
6463
notifyInstructionExecuted(IR);
65-
//FIXME: add a buffer of executed instructions.
64+
// FIXME: add a buffer of executed instructions.
6665
if (Error S = moveToTheNextStage(IR))
6766
return S;
6867
}
@@ -97,7 +96,7 @@ Error ExecuteStage::cycleStart() {
9796

9897
for (InstRef &IR : Executed) {
9998
notifyInstructionExecuted(IR);
100-
//FIXME: add a buffer of executed instructions.
99+
// FIXME: add a buffer of executed instructions.
101100
if (Error S = moveToTheNextStage(IR))
102101
return S;
103102
}
@@ -120,9 +119,8 @@ Error ExecuteStage::execute(InstRef &IR) {
120119
// BufferSize=0 as reserved. Resources with a buffer size of zero will only
121120
// be released after MCIS is issued, and all the ResourceCycles for those
122121
// units have been consumed.
123-
const InstrDesc &Desc = IR.getInstruction()->getDesc();
124122
HWS.dispatch(IR);
125-
notifyReservedBuffers(Desc.Buffers);
123+
notifyReservedOrReleasedBuffers(IR, /* Reserved */true);
126124
if (!HWS.isReady(IR))
127125
return ErrorSuccess();
128126

@@ -170,26 +168,23 @@ void ExecuteStage::notifyInstructionIssued(
170168
notifyEvent<HWInstructionEvent>(HWInstructionIssuedEvent(IR, Used));
171169
}
172170

173-
void ExecuteStage::notifyReservedBuffers(ArrayRef<uint64_t> Buffers) {
174-
if (Buffers.empty())
171+
void ExecuteStage::notifyReservedOrReleasedBuffers(const InstRef &IR,
172+
bool Reserved) {
173+
const InstrDesc &Desc = IR.getInstruction()->getDesc();
174+
if (Desc.Buffers.empty())
175175
return;
176176

177-
SmallVector<unsigned, 4> BufferIDs(Buffers.begin(), Buffers.end());
178-
std::transform(Buffers.begin(), Buffers.end(), BufferIDs.begin(),
177+
SmallVector<unsigned, 4> BufferIDs(Desc.Buffers.begin(), Desc.Buffers.end());
178+
std::transform(Desc.Buffers.begin(), Desc.Buffers.end(), BufferIDs.begin(),
179179
[&](uint64_t Op) { return HWS.getResourceID(Op); });
180-
for (HWEventListener *Listener : getListeners())
181-
Listener->onReservedBuffers(BufferIDs);
182-
}
183-
184-
void ExecuteStage::notifyReleasedBuffers(ArrayRef<uint64_t> Buffers) {
185-
if (Buffers.empty())
180+
if (Reserved) {
181+
for (HWEventListener *Listener : getListeners())
182+
Listener->onReservedBuffers(IR, BufferIDs);
186183
return;
184+
}
187185

188-
SmallVector<unsigned, 4> BufferIDs(Buffers.begin(), Buffers.end());
189-
std::transform(Buffers.begin(), Buffers.end(), BufferIDs.begin(),
190-
[&](uint64_t Op) { return HWS.getResourceID(Op); });
191186
for (HWEventListener *Listener : getListeners())
192-
Listener->onReleasedBuffers(BufferIDs);
187+
Listener->onReleasedBuffers(IR, BufferIDs);
193188
}
194189

195190
} // namespace mca

0 commit comments

Comments
 (0)