[llvm] r355628 - [llvm-mca] Emit a message when no bottlenecks are identified.
Matt Davis via llvm-commits
llvm-commits at lists.llvm.org
Thu Mar 7 11:34:44 PST 2019
Author: mattd
Date: Thu Mar 7 11:34:44 2019
New Revision: 355628
URL: http://llvm.org/viewvc/llvm-project?rev=355628&view=rev
Log:
[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
Added:
llvm/trunk/test/tools/llvm-mca/X86/BtVer2/bottleneck-hints-none.s
Modified:
llvm/trunk/tools/llvm-mca/Views/SummaryView.cpp
llvm/trunk/tools/llvm-mca/Views/SummaryView.h
llvm/trunk/tools/llvm-mca/llvm-mca.cpp
Added: llvm/trunk/test/tools/llvm-mca/X86/BtVer2/bottleneck-hints-none.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-mca/X86/BtVer2/bottleneck-hints-none.s?rev=355628&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-mca/X86/BtVer2/bottleneck-hints-none.s (added)
+++ llvm/trunk/test/tools/llvm-mca/X86/BtVer2/bottleneck-hints-none.s Thu Mar 7 11:34:44 2019
@@ -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.
Modified: llvm/trunk/tools/llvm-mca/Views/SummaryView.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-mca/Views/SummaryView.cpp?rev=355628&r1=355627&r2=355628&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-mca/Views/SummaryView.cpp (original)
+++ llvm/trunk/tools/llvm-mca/Views/SummaryView.cpp Thu Mar 7 11:34:44 2019
@@ -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 MCSchedMo
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 HWPressu
}
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
TempStream << "\nBlock RThroughput: "
<< format("%.1f", floor((BlockRThroughput * 10) + 0.5) / 10)
<< '\n';
-
- printBottleneckHints(TempStream);
+ if (ShouldEmitBottleneckAnalysis)
+ printBottleneckHints(TempStream);
TempStream.flush();
OS << Buffer;
}
Modified: llvm/trunk/tools/llvm-mca/Views/SummaryView.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-mca/Views/SummaryView.h?rev=355628&r1=355627&r2=355628&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-mca/Views/SummaryView.h (original)
+++ llvm/trunk/tools/llvm-mca/Views/SummaryView.h Thu Mar 7 11:34:44 2019
@@ -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;
Modified: llvm/trunk/tools/llvm-mca/llvm-mca.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-mca/llvm-mca.cpp?rev=355628&r1=355627&r2=355628&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-mca/llvm-mca.cpp (original)
+++ llvm/trunk/tools/llvm-mca/llvm-mca.cpp Thu Mar 7 11:34:44 2019
@@ -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(
More information about the llvm-commits
mailing list