//===--------------------- RetireControlUnitStatistics.h --------*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// /// \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, 9 (6.9%) /// 1, 6 (4.6%) /// 2, 1 (0.8%) /// 4, 3 (2.3%) /// //===----------------------------------------------------------------------===// #ifndef LLVM_TOOLS_LLVM_MCA_RETIRECONTROLUNITSTATISTICS_H #define LLVM_TOOLS_LLVM_MCA_RETIRECONTROLUNITSTATISTICS_H #include "View.h" #include "llvm/MC/MCSubtargetInfo.h" #include <map> namespace mca { class RetireControlUnitStatistics : public View { using Histogram = std::map<unsigned, unsigned>; Histogram RetiredPerCycle; unsigned NumRetired; unsigned NumCycles; void updateHistograms() { RetiredPerCycle[NumRetired]++; NumRetired = 0; } public: RetireControlUnitStatistics() : NumRetired(0), NumCycles(0) {} void onEvent(const HWInstructionEvent &Event) override; void onCycleBegin() override { NumCycles++; } void onCycleEnd() override { updateHistograms(); } void printView(llvm::raw_ostream &OS) const override; }; } // namespace mca #endif