blob: 5b1a1ded1706169cece358434667b3c9f349d28f [file] [log] [blame]
Andrea Di Biagiof41ad5c2018-04-11 12:12:53 +00001//===--------------------- RetireControlUnitStatistics.cpp ---------------*- C++
2//-*-===//
Andrea Di Biagio3a6b0922018-03-08 13:05:02 +00003//
4// The LLVM Compiler Infrastructure
5//
6// This file is distributed under the University of Illinois Open Source
7// License. See LICENSE.TXT for details.
8//
9//===----------------------------------------------------------------------===//
10/// \file
Andrea Di Biagio53e6ade2018-03-09 12:50:42 +000011///
Andrea Di Biagiof41ad5c2018-04-11 12:12:53 +000012/// This file implements the RetireControlUnitStatistics interface.
Andrea Di Biagio3a6b0922018-03-08 13:05:02 +000013///
14//===----------------------------------------------------------------------===//
15
Andrea Di Biagiof41ad5c2018-04-11 12:12:53 +000016#include "RetireControlUnitStatistics.h"
Andrea Di Biagio3a6b0922018-03-08 13:05:02 +000017#include "llvm/Support/Format.h"
18
19using namespace llvm;
20
21namespace mca {
22
Andrea Di Biagiof41ad5c2018-04-11 12:12:53 +000023void RetireControlUnitStatistics::onInstructionEvent(
24 const HWInstructionEvent &Event) {
Andrea Di Biagio1cc29c02018-04-11 11:37:46 +000025 if (Event.Type == HWInstructionEvent::Retired)
Clement Courbet844f22d2018-03-13 13:11:01 +000026 ++NumRetired;
Clement Courbet844f22d2018-03-13 13:11:01 +000027}
28
Andrea Di Biagiof41ad5c2018-04-11 12:12:53 +000029void RetireControlUnitStatistics::printView(llvm::raw_ostream &OS) const {
Andrea Di Biagio3a6b0922018-03-08 13:05:02 +000030 std::string Buffer;
31 raw_string_ostream TempStream(Buffer);
32 TempStream << "\n\nRetire Control Unit - "
33 << "number of cycles where we saw N instructions retired:\n";
34 TempStream << "[# retired], [# cycles]\n";
35
36 for (const std::pair<unsigned, unsigned> &Entry : RetiredPerCycle) {
37 TempStream << " " << Entry.first;
38 if (Entry.first < 10)
39 TempStream << ", ";
40 else
41 TempStream << ", ";
42 TempStream << Entry.second << " ("
43 << format("%.1f", ((double)Entry.second / NumCycles) * 100.0)
44 << "%)\n";
45 }
46
47 TempStream.flush();
48 OS << Buffer;
49}
50
Andrea Di Biagio3a6b0922018-03-08 13:05:02 +000051} // namespace mca