Skip to content

Commit 55d4094

Browse files
committed
[AMDGPU] Debug dump for resource usage
1 parent 53d433e commit 55d4094

File tree

1 file changed

+39
-1
lines changed

1 file changed

+39
-1
lines changed

llvm/lib/Target/AMDGPU/AMDGPUMCResourceInfo.cpp

+39-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,20 @@ 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+
// clang-format off
187+
LLVM_DEBUG(
188+
if (!FRI.Callees.empty()) {
189+
dbgs() << "MCResUse: Callees:\n";
190+
for (const Function *Callee : FRI.Callees) {
191+
MCSymbol *CalleeFnSym = TM.getSymbol(&Callee->getFunction());
192+
dbgs() << "MCResUse: " << CalleeFnSym->getName() << "\n";
193+
}
194+
}
195+
);
196+
// clang-format on
197+
175198
auto SetMaxReg = [&](MCSymbol *MaxSym, int32_t numRegs,
176199
ResourceInfoKind RIK) {
177200
if (!FRI.HasIndirectCall) {
@@ -184,9 +207,12 @@ void MCResourceInfo::gatherResourceInfo(
184207
const MCExpr *MaxWithLocal = AMDGPUMCExpr::createMax(
185208
{MCConstantExpr::create(numRegs, OutContext), SymRef}, OutContext);
186209
LocalNumSym->setVariableValue(MaxWithLocal);
210+
LLVM_DEBUG(dbgs() << "MCResUse: " << LocalNumSym->getName()
211+
<< ": Indirect callee within, using module maximum\n");
187212
}
188213
};
189214

215+
LLVM_DEBUG(dbgs() << "MCResUse: " << FnSym->getName() << "\n");
190216
SetMaxReg(MaxVGPRSym, FRI.NumVGPR, RIK_NumVGPR);
191217
SetMaxReg(MaxAGPRSym, FRI.NumAGPR, RIK_NumAGPR);
192218
SetMaxReg(MaxSGPRSym, FRI.NumExplicitSGPR, RIK_NumSGPR);
@@ -197,9 +223,13 @@ void MCResourceInfo::gatherResourceInfo(
197223
SmallVector<const MCExpr *, 8> ArgExprs;
198224
MCSymbol *Sym =
199225
getSymbol(FnSym->getName(), RIK_PrivateSegSize, OutContext, IsLocal);
200-
if (FRI.CalleeSegmentSize)
226+
if (FRI.CalleeSegmentSize) {
227+
LLVM_DEBUG(dbgs() << "MCResUse: " << Sym->getName() << ": Adding "
228+
<< FRI.CalleeSegmentSize
229+
<< " for indirect/recursive callees within\n");
201230
ArgExprs.push_back(
202231
MCConstantExpr::create(FRI.CalleeSegmentSize, OutContext));
232+
}
203233

204234
SmallPtrSet<const Function *, 8> Seen;
205235
Seen.insert(&MF.getFunction());
@@ -218,12 +248,17 @@ void MCResourceInfo::gatherResourceInfo(
218248
if (!CalleeValSym->isVariable() ||
219249
!CalleeValSym->getVariableValue(/*isUsed=*/false)
220250
->isSymbolUsedInExpression(Sym)) {
251+
LLVM_DEBUG(dbgs() << "MCResUse: " << Sym->getName() << ": Adding "
252+
<< CalleeValSym->getName() << " as callee\n");
221253
ArgExprs.push_back(MCSymbolRefExpr::create(CalleeValSym, OutContext));
222254
}
223255
}
224256
}
225257
const MCExpr *localConstExpr =
226258
MCConstantExpr::create(FRI.PrivateSegmentSize, OutContext);
259+
LLVM_DEBUG(dbgs() << "MCResUse: " << Sym->getName() << ": Adding "
260+
<< FRI.PrivateSegmentSize
261+
<< " as function local usage\n");
227262
if (!ArgExprs.empty()) {
228263
const AMDGPUMCExpr *transitiveExpr =
229264
AMDGPUMCExpr::createMax(ArgExprs, OutContext);
@@ -235,6 +270,9 @@ void MCResourceInfo::gatherResourceInfo(
235270

236271
auto SetToLocal = [&](int64_t LocalValue, ResourceInfoKind RIK) {
237272
MCSymbol *Sym = getSymbol(FnSym->getName(), RIK, OutContext, IsLocal);
273+
LLVM_DEBUG(
274+
dbgs() << "MCResUse: " << Sym->getName() << ": Adding " << LocalValue
275+
<< ", no further propagation as indirect callee found within\n");
238276
Sym->setVariableValue(MCConstantExpr::create(LocalValue, OutContext));
239277
};
240278

0 commit comments

Comments
 (0)