Skip to content

Commit 0a93bc7

Browse files
authored
[AMDGPU] Debug dump for AMDGPU resource usage (#122952)
1 parent 6e28700 commit 0a93bc7

File tree

1 file changed

+37
-1
lines changed

1 file changed

+37
-1
lines changed

llvm/lib/Target/AMDGPU/AMDGPUMCResourceInfo.cpp

+37-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
#include "llvm/MC/MCSymbol.h"
2121
#include "llvm/Target/TargetMachine.h"
2222

23+
#define DEBUG_TYPE "amdgpu-mc-resource-usage"
24+
2325
using namespace llvm;
2426

2527
MCSymbol *MCResourceInfo::getSymbol(StringRef FuncName, ResourceInfoKind RIK,
@@ -106,6 +108,8 @@ void MCResourceInfo::assignResourceInfoExpr(
106108
MCConstantExpr::create(LocalValue, OutContext);
107109
const MCExpr *SymVal = LocalConstExpr;
108110
MCSymbol *Sym = getSymbol(FnSym->getName(), RIK, OutContext, IsLocal);
111+
LLVM_DEBUG(dbgs() << "MCResUse: " << Sym->getName() << ": Adding "
112+
<< LocalValue << " as function local usage\n");
109113
if (!Callees.empty()) {
110114
SmallVector<const MCExpr *, 8> ArgExprs;
111115
SmallPtrSet<const Function *, 8> Seen;
@@ -125,8 +129,13 @@ void MCResourceInfo::assignResourceInfoExpr(
125129
if (!CalleeValSym->isVariable() ||
126130
!CalleeValSym->getVariableValue(/*isUsed=*/false)
127131
->isSymbolUsedInExpression(Sym)) {
132+
LLVM_DEBUG(dbgs() << "MCResUse: " << Sym->getName() << ": Adding "
133+
<< CalleeValSym->getName() << " as callee\n");
128134
ArgExprs.push_back(MCSymbolRefExpr::create(CalleeValSym, OutContext));
129135
} else {
136+
LLVM_DEBUG(
137+
dbgs() << "MCResUse: " << Sym->getName()
138+
<< ": Recursion found, falling back to module maximum\n");
130139
// In case of recursion: make sure to use conservative register counts
131140
// (i.e., specifically for VGPR/SGPR/AGPR).
132141
switch (RIK) {
@@ -172,6 +181,18 @@ void MCResourceInfo::gatherResourceInfo(
172181
const TargetMachine &TM = MF.getTarget();
173182
MCSymbol *FnSym = TM.getSymbol(&MF.getFunction());
174183

184+
LLVM_DEBUG(dbgs() << "MCResUse: Gathering resource information for "
185+
<< FnSym->getName() << '\n');
186+
LLVM_DEBUG({
187+
if (!FRI.Callees.empty()) {
188+
dbgs() << "MCResUse: Callees:\n";
189+
for (const Function *Callee : FRI.Callees) {
190+
MCSymbol *CalleeFnSym = TM.getSymbol(&Callee->getFunction());
191+
dbgs() << "MCResUse: " << CalleeFnSym->getName() << '\n';
192+
}
193+
}
194+
});
195+
175196
auto SetMaxReg = [&](MCSymbol *MaxSym, int32_t numRegs,
176197
ResourceInfoKind RIK) {
177198
if (!FRI.HasIndirectCall) {
@@ -184,9 +205,12 @@ void MCResourceInfo::gatherResourceInfo(
184205
const MCExpr *MaxWithLocal = AMDGPUMCExpr::createMax(
185206
{MCConstantExpr::create(numRegs, OutContext), SymRef}, OutContext);
186207
LocalNumSym->setVariableValue(MaxWithLocal);
208+
LLVM_DEBUG(dbgs() << "MCResUse: " << LocalNumSym->getName()
209+
<< ": Indirect callee within, using module maximum\n");
187210
}
188211
};
189212

213+
LLVM_DEBUG(dbgs() << "MCResUse: " << FnSym->getName() << '\n');
190214
SetMaxReg(MaxVGPRSym, FRI.NumVGPR, RIK_NumVGPR);
191215
SetMaxReg(MaxAGPRSym, FRI.NumAGPR, RIK_NumAGPR);
192216
SetMaxReg(MaxSGPRSym, FRI.NumExplicitSGPR, RIK_NumSGPR);
@@ -197,9 +221,13 @@ void MCResourceInfo::gatherResourceInfo(
197221
SmallVector<const MCExpr *, 8> ArgExprs;
198222
MCSymbol *Sym =
199223
getSymbol(FnSym->getName(), RIK_PrivateSegSize, OutContext, IsLocal);
200-
if (FRI.CalleeSegmentSize)
224+
if (FRI.CalleeSegmentSize) {
225+
LLVM_DEBUG(dbgs() << "MCResUse: " << Sym->getName() << ": Adding "
226+
<< FRI.CalleeSegmentSize
227+
<< " for indirect/recursive callees within\n");
201228
ArgExprs.push_back(
202229
MCConstantExpr::create(FRI.CalleeSegmentSize, OutContext));
230+
}
203231

204232
SmallPtrSet<const Function *, 8> Seen;
205233
Seen.insert(&MF.getFunction());
@@ -218,12 +246,17 @@ void MCResourceInfo::gatherResourceInfo(
218246
if (!CalleeValSym->isVariable() ||
219247
!CalleeValSym->getVariableValue(/*isUsed=*/false)
220248
->isSymbolUsedInExpression(Sym)) {
249+
LLVM_DEBUG(dbgs() << "MCResUse: " << Sym->getName() << ": Adding "
250+
<< CalleeValSym->getName() << " as callee\n");
221251
ArgExprs.push_back(MCSymbolRefExpr::create(CalleeValSym, OutContext));
222252
}
223253
}
224254
}
225255
const MCExpr *localConstExpr =
226256
MCConstantExpr::create(FRI.PrivateSegmentSize, OutContext);
257+
LLVM_DEBUG(dbgs() << "MCResUse: " << Sym->getName() << ": Adding "
258+
<< FRI.PrivateSegmentSize
259+
<< " as function local usage\n");
227260
if (!ArgExprs.empty()) {
228261
const AMDGPUMCExpr *transitiveExpr =
229262
AMDGPUMCExpr::createMax(ArgExprs, OutContext);
@@ -235,6 +268,9 @@ void MCResourceInfo::gatherResourceInfo(
235268

236269
auto SetToLocal = [&](int64_t LocalValue, ResourceInfoKind RIK) {
237270
MCSymbol *Sym = getSymbol(FnSym->getName(), RIK, OutContext, IsLocal);
271+
LLVM_DEBUG(
272+
dbgs() << "MCResUse: " << Sym->getName() << ": Adding " << LocalValue
273+
<< ", no further propagation as indirect callee found within\n");
238274
Sym->setVariableValue(MCConstantExpr::create(LocalValue, OutContext));
239275
};
240276

0 commit comments

Comments
 (0)