mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-12-14 19:49:36 +00:00
[llvm-mca] Emit a message when no bottlenecks are identified.
Summary: Since bottleneck hints are enabled via user request, it can be confusing if no bottleneck information is presented. Such is the case when no bottlenecks are identified. This patch emits a message in that case. Reviewers: andreadb Reviewed By: andreadb Subscribers: tschuett, gbedwell, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D59098 llvm-svn: 355628
This commit is contained in:
parent
2ead8e8993
commit
6c5a49ccb9
16
llvm/test/tools/llvm-mca/X86/BtVer2/bottleneck-hints-none.s
Normal file
16
llvm/test/tools/llvm-mca/X86/BtVer2/bottleneck-hints-none.s
Normal file
@ -0,0 +1,16 @@
|
||||
# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
|
||||
# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=btver2 -bottleneck-analysis -all-views=false -summary-view -iterations 1 < %s | FileCheck %s -implicit-check-not 'Cycles with backend pressure increase'
|
||||
|
||||
add %eax, %ebx
|
||||
|
||||
# CHECK: Iterations: 1
|
||||
# CHECK-NEXT: Instructions: 1
|
||||
# CHECK-NEXT: Total Cycles: 4
|
||||
# CHECK-NEXT: Total uOps: 1
|
||||
|
||||
# CHECK: Dispatch Width: 2
|
||||
# CHECK-NEXT: uOps Per Cycle: 0.25
|
||||
# CHECK-NEXT: IPC: 0.25
|
||||
# CHECK-NEXT: Block RThroughput: 0.5
|
||||
|
||||
# CHECK: No resource or data dependency bottlenecks discovered.
|
@ -23,7 +23,7 @@ namespace mca {
|
||||
#define DEBUG_TYPE "llvm-mca"
|
||||
|
||||
SummaryView::SummaryView(const MCSchedModel &Model, ArrayRef<MCInst> S,
|
||||
unsigned Width)
|
||||
unsigned Width, bool EmitBottleneckAnalysis)
|
||||
: SM(Model), Source(S), DispatchWidth(Width), LastInstructionIdx(0),
|
||||
TotalCycles(0), NumMicroOps(0), BPI({0, 0, 0, 0, 0}),
|
||||
ResourcePressureDistribution(Model.getNumProcResourceKinds(), 0),
|
||||
@ -32,7 +32,8 @@ SummaryView::SummaryView(const MCSchedModel &Model, ArrayRef<MCInst> S,
|
||||
ResIdx2ProcResID(Model.getNumProcResourceKinds(), 0),
|
||||
PressureIncreasedBecauseOfResources(false),
|
||||
PressureIncreasedBecauseOfDataDependencies(false),
|
||||
SeenStallCycles(false) {
|
||||
SeenStallCycles(false),
|
||||
ShouldEmitBottleneckAnalysis(EmitBottleneckAnalysis) {
|
||||
computeProcResourceMasks(SM, ProcResourceMasks);
|
||||
for (unsigned I = 1, E = SM.getNumProcResourceKinds(); I < E; ++I) {
|
||||
unsigned Index = getResourceStateIndex(ProcResourceMasks[I]);
|
||||
@ -111,8 +112,10 @@ void SummaryView::onEvent(const HWPressureEvent &Event) {
|
||||
}
|
||||
|
||||
void SummaryView::printBottleneckHints(raw_ostream &OS) const {
|
||||
if (!SeenStallCycles || !BPI.PressureIncreaseCycles)
|
||||
if (!SeenStallCycles || !BPI.PressureIncreaseCycles) {
|
||||
OS << "\nNo resource or data dependency bottlenecks discovered.\n";
|
||||
return;
|
||||
}
|
||||
|
||||
double PressurePerCycle =
|
||||
(double)BPI.PressureIncreaseCycles * 100 / TotalCycles;
|
||||
@ -181,8 +184,8 @@ void SummaryView::printView(raw_ostream &OS) const {
|
||||
TempStream << "\nBlock RThroughput: "
|
||||
<< format("%.1f", floor((BlockRThroughput * 10) + 0.5) / 10)
|
||||
<< '\n';
|
||||
|
||||
printBottleneckHints(TempStream);
|
||||
if (ShouldEmitBottleneckAnalysis)
|
||||
printBottleneckHints(TempStream);
|
||||
TempStream.flush();
|
||||
OS << Buffer;
|
||||
}
|
||||
|
@ -84,6 +84,9 @@ class SummaryView : public View {
|
||||
// True if throughput was affected by dispatch stalls.
|
||||
bool SeenStallCycles;
|
||||
|
||||
// True if the bottleneck analysis should be displayed.
|
||||
bool ShouldEmitBottleneckAnalysis;
|
||||
|
||||
// Compute the reciprocal throughput for the analyzed code block.
|
||||
// The reciprocal block throughput is computed as the MAX between:
|
||||
// - NumMicroOps / DispatchWidth
|
||||
@ -95,7 +98,7 @@ class SummaryView : public View {
|
||||
|
||||
public:
|
||||
SummaryView(const llvm::MCSchedModel &Model, llvm::ArrayRef<llvm::MCInst> S,
|
||||
unsigned Width);
|
||||
unsigned Width, bool EmitBottleneckAnalysis);
|
||||
|
||||
void onCycleEnd() override {
|
||||
++TotalCycles;
|
||||
|
@ -469,7 +469,8 @@ int main(int argc, char **argv) {
|
||||
mca::PipelinePrinter Printer(*P);
|
||||
|
||||
if (PrintSummaryView)
|
||||
Printer.addView(llvm::make_unique<mca::SummaryView>(SM, Insts, Width));
|
||||
Printer.addView(llvm::make_unique<mca::SummaryView>(
|
||||
SM, Insts, Width, EnableBottleneckAnalysis));
|
||||
|
||||
if (PrintInstructionInfoView)
|
||||
Printer.addView(
|
||||
|
Loading…
Reference in New Issue
Block a user