Skip to content

Commit a067175

Browse files
committed
Reapply [MCExpr] Remove generic getVariantKindName and getVariantKindForName
They are error-prone as MCParser may parse a variant kind, which cannot be handled by the target. The replacement in MCAsmInfo should be used instead. Follow-up to f244b8e
1 parent 8f4ee42 commit a067175

File tree

3 files changed

+11
-96
lines changed

3 files changed

+11
-96
lines changed

llvm/include/llvm/MC/MCExpr.h

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -416,14 +416,6 @@ class MCSymbolRefExpr : public MCExpr {
416416
return (getSubclassData() & HasSubsectionsViaSymbolsBit) != 0;
417417
}
418418

419-
/// @}
420-
/// \name Static Utility Functions
421-
/// @{
422-
423-
static StringRef getVariantKindName(VariantKind Kind);
424-
425-
static VariantKind getVariantKindForName(StringRef Name);
426-
427419
/// @}
428420

429421
static bool classof(const MCExpr *E) {

llvm/lib/MC/MCAsmInfo.cpp

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -139,15 +139,13 @@ void MCAsmInfo::initializeVariantKinds(ArrayRef<VariantKindDesc> Descs) {
139139
}
140140

141141
StringRef MCAsmInfo::getVariantKindName(uint32_t Kind) const {
142-
if (!VariantKindToName.empty())
143-
return VariantKindToName.find(Kind)->second;
144-
return MCSymbolRefExpr::getVariantKindName(
145-
MCSymbolRefExpr::VariantKind(Kind));
142+
auto It = VariantKindToName.find(Kind);
143+
assert(It != VariantKindToName.end() &&
144+
"ensure the VariantKind is set in initializeVariantKinds");
145+
return It->second;
146146
}
147147

148148
uint32_t MCAsmInfo::getVariantKindForName(StringRef Name) const {
149-
if (NameToVariantKind.empty())
150-
return MCSymbolRefExpr::getVariantKindForName(Name);
151149
auto It = NameToVariantKind.find(Name.lower());
152150
if (It != NameToVariantKind.end())
153151
return It->second;

llvm/lib/MC/MCExpr.cpp

Lines changed: 7 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -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.
4043
void 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

331256
void MCTargetExpr::anchor() {}

0 commit comments

Comments
 (0)