| //===--------------------- 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 |