2018-04-03 18:46:23 +02:00
|
|
|
//===--------------------- RegisterFileStatistics.h -------------*- C++ -*-===//
|
|
|
|
//
|
2019-01-19 09:50:56 +01:00
|
|
|
// 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
|
2018-04-03 18:46:23 +02:00
|
|
|
//
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
/// \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
|
2018-11-01 19:04:39 +01:00
|
|
|
/// Number of optimizable moves: 200
|
|
|
|
/// Number of moves eliminated: 200 (100.0%)
|
|
|
|
/// Number of zero moves: 200 (100.0%)
|
|
|
|
/// Max moves eliminated per cycle: 2
|
2018-04-03 18:46:23 +02:00
|
|
|
///
|
|
|
|
/// * 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
|
|
|
|
|
2018-08-24 22:24:53 +02:00
|
|
|
#include "Views/View.h"
|
2018-04-03 18:46:23 +02:00
|
|
|
#include "llvm/ADT/SmallVector.h"
|
|
|
|
#include "llvm/MC/MCSubtargetInfo.h"
|
|
|
|
|
2018-10-30 16:56:08 +01:00
|
|
|
namespace llvm {
|
2018-04-03 18:46:23 +02:00
|
|
|
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;
|
|
|
|
};
|
|
|
|
|
2018-11-01 19:04:39 +01:00
|
|
|
struct MoveEliminationInfo {
|
|
|
|
unsigned TotalMoveEliminationCandidates;
|
|
|
|
unsigned TotalMovesEliminated;
|
|
|
|
unsigned TotalMovesThatPropagateZero;
|
|
|
|
unsigned MaxMovesEliminatedPerCycle;
|
|
|
|
unsigned CurrentMovesEliminated;
|
|
|
|
};
|
|
|
|
|
2018-04-03 18:46:23 +02:00
|
|
|
// There is one entry for each register file implemented by the processor.
|
2018-11-01 19:04:39 +01:00
|
|
|
llvm::SmallVector<RegisterFileUsage, 4> PRFUsage;
|
|
|
|
llvm::SmallVector<MoveEliminationInfo, 4> MoveElimInfo;
|
|
|
|
|
|
|
|
void updateRegisterFileUsage(ArrayRef<unsigned> UsedPhysRegs);
|
|
|
|
void updateMoveElimInfo(const Instruction &Inst);
|
2018-04-03 18:46:23 +02:00
|
|
|
|
|
|
|
public:
|
2018-10-12 14:38:27 +02:00
|
|
|
RegisterFileStatistics(const llvm::MCSubtargetInfo &sti);
|
2018-04-03 18:46:23 +02:00
|
|
|
|
2018-11-01 19:04:39 +01:00
|
|
|
void onCycleEnd() override;
|
2018-07-12 18:56:17 +02:00
|
|
|
void onEvent(const HWInstructionEvent &Event) override;
|
2018-04-03 18:46:23 +02:00
|
|
|
void printView(llvm::raw_ostream &OS) const override;
|
|
|
|
};
|
|
|
|
} // namespace mca
|
2018-10-30 16:56:08 +01:00
|
|
|
} // namespace llvm
|
2018-04-03 18:46:23 +02:00
|
|
|
|
|
|
|
#endif
|