xref: /llvm-project/llvm/tools/llvm-mca/Views/RetireControlUnitStatistics.h (revision fe01014faa336d25543561fc65201dea7f424347)
110aa09f0SMatt Davis //===--------------------- RetireControlUnitStatistics.h --------*- C++ -*-===//
210aa09f0SMatt Davis //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
610aa09f0SMatt Davis //
710aa09f0SMatt Davis //===----------------------------------------------------------------------===//
810aa09f0SMatt Davis /// \file
910aa09f0SMatt Davis ///
1010aa09f0SMatt Davis /// This file defines class RetireControlUnitStatistics: a view that knows how
1110aa09f0SMatt Davis /// to print general statistics related to the retire control unit.
1210aa09f0SMatt Davis ///
1310aa09f0SMatt Davis /// Example:
1410aa09f0SMatt Davis /// ========
1510aa09f0SMatt Davis ///
1610aa09f0SMatt Davis /// Retire Control Unit - number of cycles where we saw N instructions retired:
1710aa09f0SMatt Davis /// [# retired], [# cycles]
1807a8255aSAndrea Di Biagio ///  0,           109  (17.9%)
1907a8255aSAndrea Di Biagio ///  1,           102  (16.7%)
2007a8255aSAndrea Di Biagio ///  2,           399  (65.4%)
2107a8255aSAndrea Di Biagio ///
2207a8255aSAndrea Di Biagio /// Total ROB Entries:                64
2307a8255aSAndrea Di Biagio /// Max Used ROB Entries:             35  ( 54.7% )
2407a8255aSAndrea Di Biagio /// Average Used ROB Entries per cy:  32  ( 50.0% )
2510aa09f0SMatt Davis ///
2610aa09f0SMatt Davis //===----------------------------------------------------------------------===//
2710aa09f0SMatt Davis 
2810aa09f0SMatt Davis #ifndef LLVM_TOOLS_LLVM_MCA_RETIRECONTROLUNITSTATISTICS_H
2910aa09f0SMatt Davis #define LLVM_TOOLS_LLVM_MCA_RETIRECONTROLUNITSTATISTICS_H
3010aa09f0SMatt Davis 
3107a8255aSAndrea Di Biagio #include "llvm/MC/MCSchedule.h"
32*fe01014fSPatrick Holland #include "llvm/MCA/View.h"
3310aa09f0SMatt Davis #include <map>
3410aa09f0SMatt Davis 
355a8fd657SFangrui Song namespace llvm {
3610aa09f0SMatt Davis namespace mca {
3710aa09f0SMatt Davis 
3810aa09f0SMatt Davis class RetireControlUnitStatistics : public View {
3910aa09f0SMatt Davis   using Histogram = std::map<unsigned, unsigned>;
4010aa09f0SMatt Davis   Histogram RetiredPerCycle;
4110aa09f0SMatt Davis 
4210aa09f0SMatt Davis   unsigned NumRetired;
4310aa09f0SMatt Davis   unsigned NumCycles;
4407a8255aSAndrea Di Biagio   unsigned TotalROBEntries;
4507a8255aSAndrea Di Biagio   unsigned EntriesInUse;
4607a8255aSAndrea Di Biagio   unsigned MaxUsedEntries;
4707a8255aSAndrea Di Biagio   unsigned SumOfUsedEntries;
4810aa09f0SMatt Davis 
4910aa09f0SMatt Davis public:
5007a8255aSAndrea Di Biagio   RetireControlUnitStatistics(const MCSchedModel &SM);
5110aa09f0SMatt Davis 
5210aa09f0SMatt Davis   void onEvent(const HWInstructionEvent &Event) override;
5307a8255aSAndrea Di Biagio   void onCycleEnd() override;
5410aa09f0SMatt Davis   void printView(llvm::raw_ostream &OS) const override;
getNameAsString()55d38be2baSWolfgang Pieb   StringRef getNameAsString() const override {
56d38be2baSWolfgang Pieb     return "RetireControlUnitStatistics";
57d38be2baSWolfgang Pieb   }
isSerializable()58aa13e4feSMarcos Horro   bool isSerializable() const override { return false; }
5910aa09f0SMatt Davis };
6007a8255aSAndrea Di Biagio 
6110aa09f0SMatt Davis } // namespace mca
625a8fd657SFangrui Song } // namespace llvm
6310aa09f0SMatt Davis 
6410aa09f0SMatt Davis #endif
65