xref: /freebsd/contrib/llvm-project/llvm/tools/llvm-mca/Views/RetireControlUnitStatistics.h (revision 349cc55c9796c4596a5b9904cd3281af295f878f)
1 //===--------------------- RetireControlUnitStatistics.h --------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 /// \file
9 ///
10 /// This file defines class RetireControlUnitStatistics: a view that knows how
11 /// to print general statistics related to the retire control unit.
12 ///
13 /// Example:
14 /// ========
15 ///
16 /// Retire Control Unit - number of cycles where we saw N instructions retired:
17 /// [# retired], [# cycles]
18 ///  0,           109  (17.9%)
19 ///  1,           102  (16.7%)
20 ///  2,           399  (65.4%)
21 ///
22 /// Total ROB Entries:                64
23 /// Max Used ROB Entries:             35  ( 54.7% )
24 /// Average Used ROB Entries per cy:  32  ( 50.0% )
25 ///
26 //===----------------------------------------------------------------------===//
27 
28 #ifndef LLVM_TOOLS_LLVM_MCA_RETIRECONTROLUNITSTATISTICS_H
29 #define LLVM_TOOLS_LLVM_MCA_RETIRECONTROLUNITSTATISTICS_H
30 
31 #include "llvm/MC/MCSchedule.h"
32 #include "llvm/MCA/View.h"
33 #include <map>
34 
35 namespace llvm {
36 namespace mca {
37 
38 class RetireControlUnitStatistics : public View {
39   using Histogram = std::map<unsigned, unsigned>;
40   Histogram RetiredPerCycle;
41 
42   unsigned NumRetired;
43   unsigned NumCycles;
44   unsigned TotalROBEntries;
45   unsigned EntriesInUse;
46   unsigned MaxUsedEntries;
47   unsigned SumOfUsedEntries;
48 
49 public:
50   RetireControlUnitStatistics(const MCSchedModel &SM);
51 
52   void onEvent(const HWInstructionEvent &Event) override;
53   void onCycleEnd() override;
54   void printView(llvm::raw_ostream &OS) const override;
getNameAsString()55   StringRef getNameAsString() const override {
56     return "RetireControlUnitStatistics";
57   }
isSerializable()58   bool isSerializable() const override { return false; }
59 };
60 
61 } // namespace mca
62 } // namespace llvm
63 
64 #endif
65