@@ -91,58 +91,6 @@ MCSymbol *MCResourceInfo::getMaxSGPRSymbol(MCContext &OutContext) {
9191 return OutContext.getOrCreateSymbol (" amdgpu.max_num_sgpr" );
9292}
9393
94- // The expression should have no recursion in it. Test a (sub-)expression to see
95- // if it needs to be further visited, or if a recursion has been found. Returns
96- // true if Sym is found within Expr (i.e., has a recurrance of Sym found), false
97- // otherwise.
98- static bool findSymbolInExpr (MCSymbol *Sym, const MCExpr *Expr,
99- SmallPtrSetImpl<const MCExpr *> &Visited) {
100-
101- if (Expr->getKind () == MCExpr::ExprKind::SymbolRef) {
102- const MCSymbolRefExpr *SymRefExpr = cast<MCSymbolRefExpr>(Expr);
103- const MCSymbol &SymRef = SymRefExpr->getSymbol ();
104- if (Sym == &SymRef)
105- return true ;
106- }
107-
108- if (!Visited.insert (Expr).second )
109- return false ;
110-
111- switch (Expr->getKind ()) {
112- default :
113- return false ;
114- case MCExpr::ExprKind::SymbolRef: {
115- const MCSymbolRefExpr *SymRefExpr = cast<MCSymbolRefExpr>(Expr);
116- const MCSymbol &SymRef = SymRefExpr->getSymbol ();
117- if (SymRef.isVariable ()) {
118- return findSymbolInExpr (Sym, SymRef.getVariableValue (/* isUsed=*/ false ),
119- Visited);
120- }
121- return false ;
122- }
123- case MCExpr::ExprKind::Binary: {
124- const MCBinaryExpr *BExpr = cast<MCBinaryExpr>(Expr);
125- if (findSymbolInExpr (Sym, BExpr->getLHS (), Visited) ||
126- findSymbolInExpr (Sym, BExpr->getRHS (), Visited)) {
127- return true ;
128- }
129- return false ;
130- }
131- case MCExpr::ExprKind::Unary: {
132- const MCUnaryExpr *UExpr = cast<MCUnaryExpr>(Expr);
133- return findSymbolInExpr (Sym, UExpr->getSubExpr (), Visited);
134- }
135- case MCExpr::ExprKind::Target: {
136- const AMDGPUMCExpr *AGVK = cast<AMDGPUMCExpr>(Expr);
137- for (const MCExpr *E : AGVK->getArgs ()) {
138- if (findSymbolInExpr (Sym, E, Visited))
139- return true ;
140- }
141- return false ;
142- }
143- }
144- }
145-
14694void MCResourceInfo::assignResourceInfoExpr (
14795 int64_t LocalValue, ResourceInfoKind RIK, AMDGPUMCExpr::VariantKind Kind,
14896 const MachineFunction &MF, const SmallVectorImpl<const Function *> &Callees,
@@ -160,12 +108,10 @@ void MCResourceInfo::assignResourceInfoExpr(
160108 if (!Seen.insert (Callee).second )
161109 continue ;
162110
163- SmallPtrSet<const MCExpr *, 8 > Visited;
164111 MCSymbol *CalleeValSym = getSymbol (Callee->getName (), RIK, OutContext);
165-
166112 if (!CalleeValSym->isVariable () ||
167- !findSymbolInExpr (
168- Sym, CalleeValSym-> getVariableValue ( /* IsUsed= */ false ), Visited )) {
113+ !CalleeValSym-> getVariableValue ( /* isUsed= */ false )
114+ -> isSymbolUsedInExpression (Sym )) {
169115 ArgExprs.push_back (MCSymbolRefExpr::create (CalleeValSym, OutContext));
170116 }
171117 }
@@ -223,14 +169,12 @@ void MCResourceInfo::gatherResourceInfo(
223169 if (!Seen.insert (Callee).second )
224170 continue ;
225171 if (!Callee->isDeclaration ()) {
226- SmallPtrSet<const MCExpr *, 8 > Visited;
227172 MCSymbol *CalleeValSym =
228173 getSymbol (Callee->getName (), RIK_PrivateSegSize, OutContext);
229174
230175 if (!CalleeValSym->isVariable () ||
231- !findSymbolInExpr (Sym,
232- CalleeValSym->getVariableValue (/* IsUsed=*/ false ),
233- Visited)) {
176+ !CalleeValSym->getVariableValue (/* isUsed=*/ false )
177+ ->isSymbolUsedInExpression (Sym)) {
234178 ArgExprs.push_back (MCSymbolRefExpr::create (CalleeValSym, OutContext));
235179 }
236180 }
0 commit comments