summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-mca/SummaryView.cpp
diff options
context:
space:
mode:
authorAndrea Di Biagio <Andrea_DiBiagio@sn.scee.net>2018-03-13 17:24:32 +0000
committerAndrea Di Biagio <Andrea_DiBiagio@sn.scee.net>2018-03-13 17:24:32 +0000
commitb52297508ef8c6801c194b90407479e093a00ed5 (patch)
tree4aa388b8f64a76f80ac0711025f5cda71b08eff9 /llvm/tools/llvm-mca/SummaryView.cpp
parent9855b3938093eb4a3663474a42a1a694327816c0 (diff)
downloadbcm5719-llvm-b52297508ef8c6801c194b90407479e093a00ed5.tar.gz
bcm5719-llvm-b52297508ef8c6801c194b90407479e093a00ed5.zip
[llvm-mca] Remove the logic that computes the reciprocal throughput, and make the SummaryView independent from the Backend. NFCI
Since r327420, the tool can query the MCSchedModel interface to obtain the reciprocal throughput information. As a consequence, method `ResourceManager::getRThroughput`, and method `Backend::getRThroughput` are no longer needed. This patch simplifies the code by removing the custom RThroughput computation. This patch also refactors class SummaryView by removing the dependency with the Backend object. No functional change intended. llvm-svn: 327425
Diffstat (limited to 'llvm/tools/llvm-mca/SummaryView.cpp')
-rw-r--r--llvm/tools/llvm-mca/SummaryView.cpp41
1 files changed, 26 insertions, 15 deletions
diff --git a/llvm/tools/llvm-mca/SummaryView.cpp b/llvm/tools/llvm-mca/SummaryView.cpp
index 7b1252ad057..ccc7e5de466 100644
--- a/llvm/tools/llvm-mca/SummaryView.cpp
+++ b/llvm/tools/llvm-mca/SummaryView.cpp
@@ -21,6 +21,8 @@ namespace mca {
using namespace llvm;
void SummaryView::printSummary(raw_ostream &OS) const {
+ unsigned Iterations = Source.getNumIterations();
+ unsigned Instructions = Source.size();
unsigned TotalInstructions = Instructions * Iterations;
double IPC = (double)TotalInstructions / TotalCycles;
@@ -38,6 +40,8 @@ void SummaryView::printSummary(raw_ostream &OS) const {
void SummaryView::printInstructionInfo(raw_ostream &OS) const {
std::string Buffer;
raw_string_ostream TempStream(Buffer);
+ const MCSchedModel &SM = STI.getSchedModel();
+ unsigned Instructions = Source.size();
TempStream << "\n\nInstruction Info:\n";
TempStream << "[1]: #uOps\n[2]: Latency\n[3]: RThroughput\n"
@@ -45,34 +49,41 @@ void SummaryView::printInstructionInfo(raw_ostream &OS) const {
TempStream << "[1] [2] [3] [4] [5] [6]\tInstructions:\n";
for (unsigned I = 0, E = Instructions; I < E; ++I) {
- const MCInst &Inst = B.getMCInstFromIndex(I);
- const InstrDesc &ID = B.getInstrDesc(Inst);
- unsigned NumMicroOpcodes = ID.NumMicroOps;
- unsigned Latency = ID.MaxLatency;
- double RThroughput = B.getRThroughput(ID);
+ const MCInst &Inst = Source.getMCInstFromIndex(I);
+ const MCInstrDesc &MCDesc = MCII.get(Inst.getOpcode());
+ const MCSchedClassDesc &SCDesc =
+ *SM.getSchedClassDesc(MCDesc.getSchedClass());
+
+ unsigned NumMicroOpcodes = SCDesc.NumMicroOps;
+ unsigned Latency = MCSchedModel::computeInstrLatency(STI, SCDesc);
+ Optional<double> RThroughput =
+ MCSchedModel::getReciprocalThroughput(STI, SCDesc);
+
TempStream << ' ' << NumMicroOpcodes << " ";
if (NumMicroOpcodes < 10)
TempStream << " ";
else if (NumMicroOpcodes < 100)
TempStream << ' ';
TempStream << Latency << " ";
- if (Latency < 10.0)
+ if (Latency < 10)
TempStream << " ";
- else if (Latency < 100.0)
+ else if (Latency < 100)
TempStream << ' ';
- if (RThroughput) {
- TempStream << format("%.2f", RThroughput) << ' ';
- if (RThroughput < 10.0)
+
+ if (RThroughput.hasValue()) {
+ double RT = RThroughput.getValue();
+ TempStream << format("%.2f", RT) << ' ';
+ if (RT < 10.0)
TempStream << " ";
- else if (RThroughput < 100.0)
+ else if (RT < 100.0)
TempStream << ' ';
} else {
TempStream << " - ";
}
- TempStream << (ID.MayLoad ? " * " : " ");
- TempStream << (ID.MayStore ? " * " : " ");
- TempStream << (ID.HasSideEffects ? " * " : " ");
- MCIP.printInst(&Inst, TempStream, "", B.getSTI());
+ TempStream << (MCDesc.mayLoad() ? " * " : " ");
+ TempStream << (MCDesc.mayStore() ? " * " : " ");
+ TempStream << (MCDesc.hasUnmodeledSideEffects() ? " * " : " ");
+ MCIP.printInst(&Inst, TempStream, "", STI);
TempStream << '\n';
}
OpenPOWER on IntegriCloud