1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-19 11:02:59 +02:00
llvm-mirror/tools/llvm-mca/RegisterFileStatistics.h
Andrea Di Biagio e2bef9a902 [llvm-mca] Move the logic that prints register file statistics to its own view. NFCI
Before this patch, the "BackendStatistics" view was responsible for printing the
register file usage (as well as many other statistics).

Now users can enable register file usage statistics using the command line flag
`-register-file-stats`. By default, the tool doesn't print register file
statistics.

llvm-svn: 329083
2018-04-03 16:46:23 +00:00

68 lines
1.9 KiB
C++

//===--------------------- 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 onInstructionEvent(const HWInstructionEvent &Event) override;
void printView(llvm::raw_ostream &OS) const override;
};
} // namespace mca
#endif