@@ -37,6 +37,9 @@ STATISTIC(MCExprEvaluate, "Number of MCExpr evaluations");
3737} // end namespace stats
3838} // end anonymous namespace
3939
40+ // VariantKind printing and formatting utilize MAI. operator<< (dump and some
41+ // target code) specifies MAI as nullptr and should be avoided when MAI is
42+ // needed.
4043void MCExpr::print (raw_ostream &OS , const MCAsmInfo *MAI , bool InParens) const {
4144 switch (getKind ()) {
4245 case MCExpr::Target:
@@ -86,12 +89,12 @@ void MCExpr::print(raw_ostream &OS, const MCAsmInfo *MAI, bool InParens) const {
8689
8790 const MCSymbolRefExpr::VariantKind Kind = SRE .getKind ();
8891 if (Kind != MCSymbolRefExpr::VK_None) {
89- if (MAI && MAI ->useParensForSymbolVariant ()) // ARM
92+ if (!MAI ) // should only be used by dump()
93+ OS << " @<variant " << Kind << ' >' ;
94+ else if (MAI ->useParensForSymbolVariant ()) // ARM
9095 OS << ' (' << MAI ->getVariantKindName (Kind) << ' )' ;
91- else if (MAI )
92- OS << ' @' << MAI ->getVariantKindName (Kind);
9396 else
94- OS << ' @' << MCSymbolRefExpr:: getVariantKindName (Kind);
97+ OS << ' @' << MAI -> getVariantKindName (Kind);
9598 }
9699
97100 return ;
@@ -248,84 +251,6 @@ const MCSymbolRefExpr *MCSymbolRefExpr::create(StringRef Name, VariantKind Kind,
248251 return create (Ctx.getOrCreateSymbol (Name), Kind, Ctx);
249252}
250253
251- // TODO: Move target-specific Kinds to lib/Target/*/MCTargetDesc/*AsmInfo.cpp.
252- StringRef MCSymbolRefExpr::getVariantKindName (VariantKind Kind) {
253- switch (Kind) {
254- // clang-format off
255- case VK_Invalid: default : return " <<invalid>>" ;
256- case VK_None: return " <<none>>" ;
257-
258- case VK_DTPOFF : return " DTPOFF" ;
259- case VK_DTPREL : return " DTPREL" ;
260- case VK_GOT : return " GOT" ;
261- case VK_GOTENT : return " GOTENT" ;
262- case VK_GOTOFF : return " GOTOFF" ;
263- case VK_GOTREL : return " GOTREL" ;
264- case VK_PCREL : return " PCREL" ;
265- case VK_GOTPCREL : return " GOTPCREL" ;
266- case VK_GOTTPOFF : return " GOTTPOFF" ;
267- case VK_INDNTPOFF : return " INDNTPOFF" ;
268- case VK_NTPOFF : return " NTPOFF" ;
269- case VK_GOTNTPOFF : return " GOTNTPOFF" ;
270- case VK_PLT : return " PLT" ;
271- case VK_TLSGD : return " TLSGD" ;
272- case VK_TLSLD : return " TLSLD" ;
273- case VK_TLSLDM : return " TLSLDM" ;
274- case VK_TPOFF : return " TPOFF" ;
275- case VK_TPREL : return " TPREL" ;
276- case VK_TLSCALL : return " tlscall" ;
277- case VK_TLSDESC : return " tlsdesc" ;
278- case VK_TLVP : return " TLVP" ;
279- case VK_TLVPPAGE : return " TLVPPAGE" ;
280- case VK_TLVPPAGEOFF : return " TLVPPAGEOFF" ;
281- case VK_PAGE : return " PAGE" ;
282- case VK_PAGEOFF : return " PAGEOFF" ;
283- case VK_GOTPAGE : return " GOTPAGE" ;
284- case VK_GOTPAGEOFF : return " GOTPAGEOFF" ;
285- case VK_SECREL : return " SECREL32" ;
286- case VK_WEAKREF : return " WEAKREF" ;
287- case VK_COFF_IMGREL32 : return " IMGREL" ;
288- // clang-format on
289- }
290- llvm_unreachable (" Invalid variant kind" );
291- }
292-
293- // FIXME: All variant kinds are target-specific. Move them to
294- // *AsmParser::getVariantKindForName and remove this function.
295- MCSymbolRefExpr::VariantKind
296- MCSymbolRefExpr::getVariantKindForName (StringRef Name) {
297- return StringSwitch<VariantKind>(Name.lower ())
298- .Case (" dtprel" , VK_DTPREL )
299- .Case (" dtpoff" , VK_DTPOFF )
300- .Case (" got" , VK_GOT )
301- .Case (" gotent" , VK_GOTENT )
302- .Case (" gotoff" , VK_GOTOFF )
303- .Case (" gotrel" , VK_GOTREL )
304- .Case (" pcrel" , VK_PCREL )
305- .Case (" gotpcrel" , VK_GOTPCREL )
306- .Case (" gottpoff" , VK_GOTTPOFF )
307- .Case (" indntpoff" , VK_INDNTPOFF )
308- .Case (" ntpoff" , VK_NTPOFF )
309- .Case (" plt" , VK_PLT )
310- .Case (" tlscall" , VK_TLSCALL )
311- .Case (" tlsdesc" , VK_TLSDESC )
312- .Case (" tlsgd" , VK_TLSGD )
313- .Case (" tlsld" , VK_TLSLD )
314- .Case (" tlsldm" , VK_TLSLDM )
315- .Case (" tpoff" , VK_TPOFF )
316- .Case (" tprel" , VK_TPREL )
317- .Case (" tlvp" , VK_TLVP )
318- .Case (" tlvppage" , VK_TLVPPAGE )
319- .Case (" tlvppageoff" , VK_TLVPPAGEOFF )
320- .Case (" page" , VK_PAGE )
321- .Case (" pageoff" , VK_PAGEOFF )
322- .Case (" gotpage" , VK_GOTPAGE )
323- .Case (" gotpageoff" , VK_GOTPAGEOFF )
324- .Case (" imgrel" , VK_COFF_IMGREL32 )
325- .Case (" secrel32" , VK_SECREL )
326- .Default (VK_Invalid);
327- }
328-
329254/* *** */
330255
331256void MCTargetExpr::anchor () {}
0 commit comments