//===--------------------- RegisterFileStatistics.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 view collects and prints register file usage statistics.
///
/// Example  (-mcpu=btver2):
/// ========================
///
/// Register File statistics:
/// Total number of mappings created:    6
/// Max number of mappings used:         3
///
/// *  Register File #1 -- FpuPRF:
///    Number of physical registers:     72
///    Total number of mappings created: 0
///    Max number of mappings used:      0
///
/// *  Register File #2 -- IntegerPRF:
///    Number of physical registers:     64
///    Total number of mappings created: 6
///    Max number of mappings used:      3
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_TOOLS_LLVM_MCA_REGISTERFILESTATISTICS_H
#define LLVM_TOOLS_LLVM_MCA_REGISTERFILESTATISTICS_H

#include "View.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/MC/MCSubtargetInfo.h"

namespace mca {

class RegisterFileStatistics : public View {
  const llvm::MCSubtargetInfo &STI;

  // Used to track the number of physical registers used in a register file.
  struct RegisterFileUsage {
    unsigned TotalMappings;
    unsigned MaxUsedMappings;
    unsigned CurrentlyUsedMappings;
  };

  // There is one entry for each register file implemented by the processor.
  llvm::SmallVector<RegisterFileUsage, 4> RegisterFiles;

  void initializeRegisterFileInfo();

public:
  RegisterFileStatistics(const llvm::MCSubtargetInfo &sti) : STI(sti) {
    initializeRegisterFileInfo();
  }

  void onEvent(const HWInstructionEvent &Event) override;

  void printView(llvm::raw_ostream &OS) const override;
};
} // namespace mca

#endif
