//===--------------------- RetireControlUnitStatistics.h --------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// /// \file /// /// This file defines class RetireControlUnitStatistics: a view that knows how /// to print general statistics related to the retire control unit. /// /// Example: /// ======== /// /// Retire Control Unit - number of cycles where we saw N instructions retired: /// [# retired], [# cycles] /// 0, 109 (17.9%) /// 1, 102 (16.7%) /// 2, 399 (65.4%) /// /// Total ROB Entries: 64 /// Max Used ROB Entries: 35 ( 54.7% ) /// Average Used ROB Entries per cy: 32 ( 50.0% ) /// //===----------------------------------------------------------------------===// #ifndef LLVM_TOOLS_LLVM_MCA_RETIRECONTROLUNITSTATISTICS_H #define LLVM_TOOLS_LLVM_MCA_RETIRECONTROLUNITSTATISTICS_H #include "llvm/MC/MCSchedule.h" #include "llvm/MCA/View.h" #include namespace llvm { namespace mca { class RetireControlUnitStatistics : public View { using Histogram = std::map; Histogram RetiredPerCycle; unsigned NumRetired; unsigned NumCycles; unsigned TotalROBEntries; unsigned EntriesInUse; unsigned MaxUsedEntries; unsigned SumOfUsedEntries; public: RetireControlUnitStatistics(const MCSchedModel &SM); void onEvent(const HWInstructionEvent &Event) override; void onCycleEnd() override; void printView(llvm::raw_ostream &OS) const override; StringRef getNameAsString() const override { return "RetireControlUnitStatistics"; } bool isSerializable() const override { return false; } }; } // namespace mca } // namespace llvm #endif