blob: 0d4d11f7ddc1d90b736c85cea1c92e4f1cf3f357 [file] [log] [blame]
Andrea Di Biagiof41ad5c2018-04-11 12:12:53 +00001//===--------------------- RetireControlUnitStatistics.h ------------------*-
2//C++ -*-===//
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
11///
Andrea Di Biagiof41ad5c2018-04-11 12:12:53 +000012/// This file defines class RetireControlUnitStatistics: a view that knows how
13/// to print general statistics related to the retire control unit.
Andrea Di Biagio3a6b0922018-03-08 13:05:02 +000014///
15/// Example:
16/// ========
17///
Andrea Di Biagio3a6b0922018-03-08 13:05:02 +000018/// Retire Control Unit - number of cycles where we saw N instructions retired:
19/// [# retired], [# cycles]
20/// 0, 9 (6.9%)
21/// 1, 6 (4.6%)
22/// 2, 1 (0.8%)
23/// 4, 3 (2.3%)
24///
25//===----------------------------------------------------------------------===//
26
Andrea Di Biagiof41ad5c2018-04-11 12:12:53 +000027#ifndef LLVM_TOOLS_LLVM_MCA_RETIRECONTROLUNITSTATISTICS_H
28#define LLVM_TOOLS_LLVM_MCA_RETIRECONTROLUNITSTATISTICS_H
Andrea Di Biagio3a6b0922018-03-08 13:05:02 +000029
Andrea Di Biagio8af3fe82018-03-08 16:08:43 +000030#include "View.h"
Andrea Di Biagiofbf37cc2018-04-03 15:36:15 +000031#include "llvm/ADT/DenseMap.h"
Andrea Di Biagio09771ad2018-03-16 22:21:52 +000032#include "llvm/MC/MCSubtargetInfo.h"
Andrea Di Biagio3a6b0922018-03-08 13:05:02 +000033
34namespace mca {
35
Andrea Di Biagiof41ad5c2018-04-11 12:12:53 +000036class RetireControlUnitStatistics : public View {
Andrea Di Biagiofbf37cc2018-04-03 15:36:15 +000037 using Histogram = llvm::DenseMap<unsigned, unsigned>;
Andrea Di Biagio3a6b0922018-03-08 13:05:02 +000038 Histogram RetiredPerCycle;
Andrea Di Biagio3a6b0922018-03-08 13:05:02 +000039
Andrea Di Biagio3a6b0922018-03-08 13:05:02 +000040 unsigned NumRetired;
41 unsigned NumCycles;
42
43 void updateHistograms() {
Andrea Di Biagio3a6b0922018-03-08 13:05:02 +000044 RetiredPerCycle[NumRetired]++;
Andrea Di Biagio3a6b0922018-03-08 13:05:02 +000045 NumRetired = 0;
46 }
47
Andrea Di Biagio3a6b0922018-03-08 13:05:02 +000048public:
Andrea Di Biagiof41ad5c2018-04-11 12:12:53 +000049 RetireControlUnitStatistics() : NumRetired(0), NumCycles(0) {}
Andrea Di Biagio3a6b0922018-03-08 13:05:02 +000050
Clement Courbet844f22d2018-03-13 13:11:01 +000051 void onInstructionEvent(const HWInstructionEvent &Event) override;
Andrea Di Biagio3a6b0922018-03-08 13:05:02 +000052
Andrea Di Biagio3e646442018-04-12 10:49:40 +000053 void onCycleBegin() override { NumCycles++; }
Andrea Di Biagio3a6b0922018-03-08 13:05:02 +000054
Andrea Di Biagio3e646442018-04-12 10:49:40 +000055 void onCycleEnd() override { updateHistograms(); }
Andrea Di Biagio3a6b0922018-03-08 13:05:02 +000056
Andrea Di Biagio1cc29c02018-04-11 11:37:46 +000057 void printView(llvm::raw_ostream &OS) const override;
Andrea Di Biagio3a6b0922018-03-08 13:05:02 +000058};
Andrea Di Biagio3a6b0922018-03-08 13:05:02 +000059} // namespace mca
60
61#endif