@@ -39,6 +39,8 @@ MCSymbol *MCResourceInfo::getSymbol(StringRef FuncName, ResourceInfoKind RIK,
3939 return GOCS (" .num_agpr" );
4040 case RIK_NumSGPR:
4141 return GOCS (" .numbered_sgpr" );
42+ case RIK_NumNamedBarrier:
43+ return GOCS (" .num_named_barrier" );
4244 case RIK_PrivateSegSize:
4345 return GOCS (" .private_seg_size" );
4446 case RIK_UsesVCC:
@@ -66,6 +68,7 @@ void MCResourceInfo::assignMaxRegs(MCContext &OutContext) {
6668 MCSymbol *MaxVGPRSym = getMaxVGPRSymbol (OutContext);
6769 MCSymbol *MaxAGPRSym = getMaxAGPRSymbol (OutContext);
6870 MCSymbol *MaxSGPRSym = getMaxSGPRSymbol (OutContext);
71+ MCSymbol *MaxNamedBarrierSym = getMaxNamedBarrierSymbol (OutContext);
6972
7073 auto assignMaxRegSym = [&OutContext](MCSymbol *Sym, int32_t RegCount) {
7174 const MCExpr *MaxExpr = MCConstantExpr::create (RegCount, OutContext);
@@ -75,6 +78,7 @@ void MCResourceInfo::assignMaxRegs(MCContext &OutContext) {
7578 assignMaxRegSym (MaxVGPRSym, MaxVGPR);
7679 assignMaxRegSym (MaxAGPRSym, MaxAGPR);
7780 assignMaxRegSym (MaxSGPRSym, MaxSGPR);
81+ assignMaxRegSym (MaxNamedBarrierSym, MaxNamedBarrier);
7882}
7983
8084void MCResourceInfo::reset () { *this = MCResourceInfo (); }
@@ -97,6 +101,10 @@ MCSymbol *MCResourceInfo::getMaxSGPRSymbol(MCContext &OutContext) {
97101 return OutContext.getOrCreateSymbol (" amdgpu.max_num_sgpr" );
98102}
99103
104+ MCSymbol *MCResourceInfo::getMaxNamedBarrierSymbol (MCContext &OutContext) {
105+ return OutContext.getOrCreateSymbol (" amdgpu.max_num_named_barrier" );
106+ }
107+
100108// Tries to flatten recursive call register resource gathering. Simple cycle
101109// avoiding dfs to find the constants in the propagated symbols.
102110// Assumes:
@@ -227,6 +235,10 @@ void MCResourceInfo::assignResourceInfoExpr(
227235 case RIK_NumAGPR:
228236 ArgExprs.push_back (flattenedCycleMax (CalleeValSym, RIK, OutContext));
229237 break ;
238+ case RIK_NumNamedBarrier:
239+ ArgExprs.push_back (MCSymbolRefExpr::create (
240+ getMaxNamedBarrierSymbol (OutContext), OutContext));
241+ break ;
230242 }
231243 }
232244 }
@@ -245,11 +257,13 @@ void MCResourceInfo::gatherResourceInfo(
245257 MCSymbol *MaxAGPRSym = getMaxAGPRSymbol (OutContext);
246258 MCSymbol *MaxSGPRSym = getMaxSGPRSymbol (OutContext);
247259 bool IsLocal = MF.getFunction ().hasLocalLinkage ();
260+ MCSymbol *MaxNamedBarrierSym = getMaxNamedBarrierSymbol (OutContext);
248261
249262 if (!AMDGPU::isEntryFunctionCC (MF.getFunction ().getCallingConv ())) {
250263 addMaxVGPRCandidate (FRI.NumVGPR );
251264 addMaxAGPRCandidate (FRI.NumAGPR );
252265 addMaxSGPRCandidate (FRI.NumExplicitSGPR );
266+ addMaxNamedBarrierCandidate (FRI.NumNamedBarrier );
253267 }
254268
255269 const TargetMachine &TM = MF.getTarget ();
@@ -288,6 +302,7 @@ void MCResourceInfo::gatherResourceInfo(
288302 SetMaxReg (MaxVGPRSym, FRI.NumVGPR , RIK_NumVGPR);
289303 SetMaxReg (MaxAGPRSym, FRI.NumAGPR , RIK_NumAGPR);
290304 SetMaxReg (MaxSGPRSym, FRI.NumExplicitSGPR , RIK_NumSGPR);
305+ SetMaxReg (MaxNamedBarrierSym, FRI.NumNamedBarrier , RIK_NumNamedBarrier);
291306
292307 {
293308 // The expression for private segment size should be: FRI.PrivateSegmentSize
0 commit comments