Skip to content

Commit e545a3d

Browse files
committed
[RISCV] Add statistics for total LMUL spilled/reloaded
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 LMUL for vector register spills and reloads. It can be used to get a better idea of regalloc changes in e.g. llvm#131176 llvm#113675
1 parent f6ad65a commit e545a3d

File tree

1 file changed

+7
-0
lines changed

1 file changed

+7
-0
lines changed

llvm/lib/Target/RISCV/RISCVInstrInfo.cpp

Lines changed: 7 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,10 @@ using namespace llvm;
4344
#define GET_INSTRINFO_NAMED_OPS
4445
#include "RISCVGenInstrInfo.inc"
4546

47+
#define DEBUG_TYPE "riscv-instr-info"
48+
STATISTIC(TotalLMULSpilled, "Total LMUL spilled from vector registers");
49+
STATISTIC(TotalLMULReloaded, "Total LMUL reloaded into vector registers");
50+
4651
static cl::opt<bool> PreferWholeRegisterMove(
4752
"riscv-prefer-whole-register-move", cl::init(false), cl::Hidden,
4853
cl::desc("Prefer whole register move for vector registers."));
@@ -657,6 +662,7 @@ void RISCVInstrInfo::storeRegToStackSlot(MachineBasicBlock &MBB,
657662
.addFrameIndex(FI)
658663
.addMemOperand(MMO)
659664
.setMIFlag(Flags);
665+
TotalLMULSpilled += TRI->getRegSizeInBits(*RC) / RISCV::RVVBitsPerBlock;
660666
} else {
661667
MachineMemOperand *MMO = MF->getMachineMemOperand(
662668
MachinePointerInfo::getFixedStack(*MF, FI), MachineMemOperand::MOStore,
@@ -747,6 +753,7 @@ void RISCVInstrInfo::loadRegFromStackSlot(
747753
.addFrameIndex(FI)
748754
.addMemOperand(MMO)
749755
.setMIFlag(Flags);
756+
TotalLMULReloaded += TRI->getRegSizeInBits(*RC) / RISCV::RVVBitsPerBlock;
750757
} else {
751758
MachineMemOperand *MMO = MF->getMachineMemOperand(
752759
MachinePointerInfo::getFixedStack(*MF, FI), MachineMemOperand::MOLoad,

0 commit comments

Comments
 (0)