blob: e10c6626ee9840b959e6229d78d9d159a1e44178 [file] [log] [blame]
Matt Davis248acf62018-06-14 20:58:54 +00001//===--------------------- RetireControlUnitStatistics.h --------*- C++ -*-===//
Andrea Di Biagio3a6b0922018-03-08 13:05:02 +00002//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9/// \file
10///
Andrea Di Biagiof41ad5c2018-04-11 12:12:53 +000011/// This file defines class RetireControlUnitStatistics: a view that knows how
12/// to print general statistics related to the retire control unit.
Andrea Di Biagio3a6b0922018-03-08 13:05:02 +000013///
14/// Example:
15/// ========
16///
Andrea Di Biagio3a6b0922018-03-08 13:05:02 +000017/// Retire Control Unit - number of cycles where we saw N instructions retired:
18/// [# retired], [# cycles]
19/// 0, 9 (6.9%)
20/// 1, 6 (4.6%)
21/// 2, 1 (0.8%)
22/// 4, 3 (2.3%)
23///
24//===----------------------------------------------------------------------===//
25
Andrea Di Biagiof41ad5c2018-04-11 12:12:53 +000026#ifndef LLVM_TOOLS_LLVM_MCA_RETIRECONTROLUNITSTATISTICS_H
27#define LLVM_TOOLS_LLVM_MCA_RETIRECONTROLUNITSTATISTICS_H
Andrea Di Biagio3a6b0922018-03-08 13:05:02 +000028
Andrea Di Biagio8af3fe82018-03-08 16:08:43 +000029#include "View.h"
Andrea Di Biagiofbf37cc2018-04-03 15:36:15 +000030#include "llvm/ADT/DenseMap.h"
Andrea Di Biagio09771ad2018-03-16 22:21:52 +000031#include "llvm/MC/MCSubtargetInfo.h"
Andrea Di Biagio3a6b0922018-03-08 13:05:02 +000032
33namespace mca {
34
Andrea Di Biagiof41ad5c2018-04-11 12:12:53 +000035class RetireControlUnitStatistics : public View {
Andrea Di Biagiofbf37cc2018-04-03 15:36:15 +000036 using Histogram = llvm::DenseMap<unsigned, unsigned>;
Andrea Di Biagio3a6b0922018-03-08 13:05:02 +000037 Histogram RetiredPerCycle;
Andrea Di Biagio3a6b0922018-03-08 13:05:02 +000038
Andrea Di Biagio3a6b0922018-03-08 13:05:02 +000039 unsigned NumRetired;
40 unsigned NumCycles;
41
42 void updateHistograms() {
Andrea Di Biagio3a6b0922018-03-08 13:05:02 +000043 RetiredPerCycle[NumRetired]++;
Andrea Di Biagio3a6b0922018-03-08 13:05:02 +000044 NumRetired = 0;
45 }
46
Andrea Di Biagio3a6b0922018-03-08 13:05:02 +000047public:
Andrea Di Biagiof41ad5c2018-04-11 12:12:53 +000048 RetireControlUnitStatistics() : NumRetired(0), NumCycles(0) {}
Andrea Di Biagio3a6b0922018-03-08 13:05:02 +000049
Clement Courbet844f22d2018-03-13 13:11:01 +000050 void onInstructionEvent(const HWInstructionEvent &Event) override;
Andrea Di Biagio3a6b0922018-03-08 13:05:02 +000051
Andrea Di Biagio3e646442018-04-12 10:49:40 +000052 void onCycleBegin() override { NumCycles++; }
Andrea Di Biagio3a6b0922018-03-08 13:05:02 +000053
Andrea Di Biagio3e646442018-04-12 10:49:40 +000054 void onCycleEnd() override { updateHistograms(); }
Andrea Di Biagio3a6b0922018-03-08 13:05:02 +000055
Andrea Di Biagio1cc29c02018-04-11 11:37:46 +000056 void printView(llvm::raw_ostream &OS) const override;
Andrea Di Biagio3a6b0922018-03-08 13:05:02 +000057};
Andrea Di Biagio3a6b0922018-03-08 13:05:02 +000058} // namespace mca
59
60#endif