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