@@ -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