Skip to content

Commit 125553a

Browse files
authored
[RISCV] Add statistics for total LMUL spilled/reloaded (#131747)
The cost of a vector spill/reload may vary highly depending on the size of the vector register being spilled, i.e. LMUL, so the usual regalloc.NumSpills/regalloc.NumReloads statistics may not be an accurate reflection of the total cost. This adds two new statistics for RISCVInstrInfo that collects the total number of vector registers spilled/reloaded within groups. It can be used to get a better idea of regalloc changes in e.g. #131176 #113675
1 parent 575fde0 commit 125553a

File tree

1 file changed

+9
-0
lines changed

1 file changed

+9
-0
lines changed

llvm/lib/Target/RISCV/RISCVInstrInfo.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include "RISCVSubtarget.h"
1919
#include "llvm/ADT/STLExtras.h"
2020
#include "llvm/ADT/SmallVector.h"
21+
#include "llvm/ADT/Statistic.h"
2122
#include "llvm/Analysis/MemoryLocation.h"
2223
#include "llvm/Analysis/ValueTracking.h"
2324
#include "llvm/CodeGen/LiveIntervals.h"
@@ -43,6 +44,12 @@ using namespace llvm;
4344
#define GET_INSTRINFO_NAMED_OPS
4445
#include "RISCVGenInstrInfo.inc"
4546

47+
#define DEBUG_TYPE "riscv-instr-info"
48+
STATISTIC(NumVRegSpilled,
49+
"Number of registers within vector register groups spilled");
50+
STATISTIC(NumVRegReloaded,
51+
"Number of registers within vector register groups reloaded");
52+
4653
static cl::opt<bool> PreferWholeRegisterMove(
4754
"riscv-prefer-whole-register-move", cl::init(false), cl::Hidden,
4855
cl::desc("Prefer whole register move for vector registers."));
@@ -657,6 +664,7 @@ void RISCVInstrInfo::storeRegToStackSlot(MachineBasicBlock &MBB,
657664
.addFrameIndex(FI)
658665
.addMemOperand(MMO)
659666
.setMIFlag(Flags);
667+
NumVRegSpilled += TRI->getRegSizeInBits(*RC) / RISCV::RVVBitsPerBlock;
660668
} else {
661669
MachineMemOperand *MMO = MF->getMachineMemOperand(
662670
MachinePointerInfo::getFixedStack(*MF, FI), MachineMemOperand::MOStore,
@@ -747,6 +755,7 @@ void RISCVInstrInfo::loadRegFromStackSlot(
747755
.addFrameIndex(FI)
748756
.addMemOperand(MMO)
749757
.setMIFlag(Flags);
758+
NumVRegReloaded += TRI->getRegSizeInBits(*RC) / RISCV::RVVBitsPerBlock;
750759
} else {
751760
MachineMemOperand *MMO = MF->getMachineMemOperand(
752761
MachinePointerInfo::getFixedStack(*MF, FI), MachineMemOperand::MOLoad,

0 commit comments

Comments
 (0)