Skip to content

Commit e385c22

Browse files
committed
[AMDGPU] Debug dump for resource usage
1 parent f1b1c7f commit e385c22

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
@@ -19,6 +19,8 @@
1919
#include "llvm/MC/MCSymbol.h"
2020
#include "llvm/Target/TargetMachine.h"
2121

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

2426
MCSymbol *MCResourceInfo::getSymbol(StringRef FuncName, ResourceInfoKind RIK,
@@ -101,6 +103,8 @@ void MCResourceInfo::assignResourceInfoExpr(
101103
MCConstantExpr::create(LocalValue, OutContext);
102104
const MCExpr *SymVal = LocalConstExpr;
103105
MCSymbol *Sym = getSymbol(FnSym->getName(), RIK, OutContext);
106+
LLVM_DEBUG(dbgs() << "MCResUse: " << Sym->getName() << ": Adding "
107+
<< LocalValue << " as function local usage\n");
104108
if (!Callees.empty()) {
105109
SmallVector<const MCExpr *, 8> ArgExprs;
106110
SmallPtrSet<const Function *, 8> Seen;
@@ -119,8 +123,13 @@ void MCResourceInfo::assignResourceInfoExpr(
119123
if (!CalleeValSym->isVariable() ||
120124
!CalleeValSym->getVariableValue(/*isUsed=*/false)
121125
->isSymbolUsedInExpression(Sym)) {
126+
LLVM_DEBUG(dbgs() << "MCResUse: " << Sym->getName() << ": Adding "
127+
<< CalleeValSym->getName() << " as callee\n");
122128
ArgExprs.push_back(MCSymbolRefExpr::create(CalleeValSym, OutContext));
123129
} else {
130+
LLVM_DEBUG(
131+
dbgs() << "MCResUse: " << Sym->getName()
132+
<< ": Recursion found, falling back to module maximum\n");
124133
// In case of recursion: make sure to use conservative register counts
125134
// (i.e., specifically for VGPR/SGPR/AGPR).
126135
switch (RIK) {
@@ -165,6 +174,20 @@ void MCResourceInfo::gatherResourceInfo(
165174
const TargetMachine &TM = MF.getTarget();
166175
MCSymbol *FnSym = TM.getSymbol(&MF.getFunction());
167176

177+
LLVM_DEBUG(dbgs() << "MCResUse: Gathering resource information for "
178+
<< FnSym->getName() << "\n");
179+
// clang-format off
180+
LLVM_DEBUG(
181+
if (!FRI.Callees.empty()) {
182+
dbgs() << "MCResUse: Callees:\n";
183+
for (const Function *Callee : FRI.Callees) {
184+
MCSymbol *CalleeFnSym = TM.getSymbol(&Callee->getFunction());
185+
dbgs() << "MCResUse: " << CalleeFnSym->getName() << "\n";
186+
}
187+
}
188+
);
189+
// clang-format on
190+
168191
auto SetMaxReg = [&](MCSymbol *MaxSym, int32_t numRegs,
169192
ResourceInfoKind RIK) {
170193
if (!FRI.HasIndirectCall) {
@@ -176,9 +199,12 @@ void MCResourceInfo::gatherResourceInfo(
176199
const MCExpr *MaxWithLocal = AMDGPUMCExpr::createMax(
177200
{MCConstantExpr::create(numRegs, OutContext), SymRef}, OutContext);
178201
LocalNumSym->setVariableValue(MaxWithLocal);
202+
LLVM_DEBUG(dbgs() << "MCResUse: " << LocalNumSym->getName()
203+
<< ": Indirect callee within, using module maximum\n");
179204
}
180205
};
181206

207+
LLVM_DEBUG(dbgs() << "MCResUse: " << FnSym->getName() << "\n");
182208
SetMaxReg(MaxVGPRSym, FRI.NumVGPR, RIK_NumVGPR);
183209
SetMaxReg(MaxAGPRSym, FRI.NumAGPR, RIK_NumAGPR);
184210
SetMaxReg(MaxSGPRSym, FRI.NumExplicitSGPR, RIK_NumSGPR);
@@ -188,9 +214,13 @@ void MCResourceInfo::gatherResourceInfo(
188214
// + max(FRI.Callees, FRI.CalleeSegmentSize)
189215
SmallVector<const MCExpr *, 8> ArgExprs;
190216
MCSymbol *Sym = getSymbol(FnSym->getName(), RIK_PrivateSegSize, OutContext);
191-
if (FRI.CalleeSegmentSize)
217+
if (FRI.CalleeSegmentSize) {
218+
LLVM_DEBUG(dbgs() << "MCResUse: " << Sym->getName() << ": Adding "
219+
<< FRI.CalleeSegmentSize
220+
<< " for indirect/recursive callees within\n");
192221
ArgExprs.push_back(
193222
MCConstantExpr::create(FRI.CalleeSegmentSize, OutContext));
223+
}
194224

195225
SmallPtrSet<const Function *, 8> Seen;
196226
Seen.insert(&MF.getFunction());
@@ -207,12 +237,17 @@ void MCResourceInfo::gatherResourceInfo(
207237
if (!CalleeValSym->isVariable() ||
208238
!CalleeValSym->getVariableValue(/*isUsed=*/false)
209239
->isSymbolUsedInExpression(Sym)) {
240+
LLVM_DEBUG(dbgs() << "MCResUse: " << Sym->getName() << ": Adding "
241+
<< CalleeValSym->getName() << " as callee\n");
210242
ArgExprs.push_back(MCSymbolRefExpr::create(CalleeValSym, OutContext));
211243
}
212244
}
213245
}
214246
const MCExpr *localConstExpr =
215247
MCConstantExpr::create(FRI.PrivateSegmentSize, OutContext);
248+
LLVM_DEBUG(dbgs() << "MCResUse: " << Sym->getName() << ": Adding "
249+
<< FRI.PrivateSegmentSize
250+
<< " as function local usage\n");
216251
if (!ArgExprs.empty()) {
217252
const AMDGPUMCExpr *transitiveExpr =
218253
AMDGPUMCExpr::createMax(ArgExprs, OutContext);
@@ -224,6 +259,9 @@ void MCResourceInfo::gatherResourceInfo(
224259

225260
auto SetToLocal = [&](int64_t LocalValue, ResourceInfoKind RIK) {
226261
MCSymbol *Sym = getSymbol(FnSym->getName(), RIK, OutContext);
262+
LLVM_DEBUG(
263+
dbgs() << "MCResUse: " << Sym->getName() << ": Adding " << LocalValue
264+
<< ", no further propagation as indirect callee found within\n");
227265
Sym->setVariableValue(MCConstantExpr::create(LocalValue, OutContext));
228266
};
229267

0 commit comments

Comments
 (0)