Skip to content

Commit 8c7c791

Browse files
committed
[MCParser] Use getVariantKindForName and move PPC specific VariantKind to PowerPC/
1 parent 3c80d9b commit 8c7c791

File tree

3 files changed

+83
-66
lines changed

3 files changed

+83
-66
lines changed

llvm/lib/MC/MCExpr.cpp

Lines changed: 2 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -431,6 +431,8 @@ StringRef MCSymbolRefExpr::getVariantKindName(VariantKind Kind) {
431431
llvm_unreachable("Invalid variant kind");
432432
}
433433

434+
// FIXME: All variant kinds are target-specific. Move them to
435+
// *AsmParser::getVariantKindForName and remove this function.
434436
MCSymbolRefExpr::VariantKind
435437
MCSymbolRefExpr::getVariantKindForName(StringRef Name) {
436438
return StringSwitch<VariantKind>(Name.lower())
@@ -467,68 +469,6 @@ MCSymbolRefExpr::getVariantKindForName(StringRef Name) {
467469
.Case("size", VK_SIZE)
468470
.Case("abs8", VK_X86_ABS8)
469471
.Case("pltoff", VK_X86_PLTOFF)
470-
.Case("l", VK_PPC_LO)
471-
.Case("h", VK_PPC_HI)
472-
.Case("ha", VK_PPC_HA)
473-
.Case("high", VK_PPC_HIGH)
474-
.Case("higha", VK_PPC_HIGHA)
475-
.Case("higher", VK_PPC_HIGHER)
476-
.Case("highera", VK_PPC_HIGHERA)
477-
.Case("highest", VK_PPC_HIGHEST)
478-
.Case("highesta", VK_PPC_HIGHESTA)
479-
.Case("got@l", VK_PPC_GOT_LO)
480-
.Case("got@h", VK_PPC_GOT_HI)
481-
.Case("got@ha", VK_PPC_GOT_HA)
482-
.Case("local", VK_PPC_LOCAL)
483-
.Case("tocbase", VK_PPC_TOCBASE)
484-
.Case("toc", VK_PPC_TOC)
485-
.Case("toc@l", VK_PPC_TOC_LO)
486-
.Case("toc@h", VK_PPC_TOC_HI)
487-
.Case("toc@ha", VK_PPC_TOC_HA)
488-
.Case("u", VK_PPC_U)
489-
.Case("l", VK_PPC_L)
490-
.Case("tls", VK_PPC_TLS)
491-
.Case("dtpmod", VK_PPC_DTPMOD)
492-
.Case("tprel@l", VK_PPC_TPREL_LO)
493-
.Case("tprel@h", VK_PPC_TPREL_HI)
494-
.Case("tprel@ha", VK_PPC_TPREL_HA)
495-
.Case("tprel@high", VK_PPC_TPREL_HIGH)
496-
.Case("tprel@higha", VK_PPC_TPREL_HIGHA)
497-
.Case("tprel@higher", VK_PPC_TPREL_HIGHER)
498-
.Case("tprel@highera", VK_PPC_TPREL_HIGHERA)
499-
.Case("tprel@highest", VK_PPC_TPREL_HIGHEST)
500-
.Case("tprel@highesta", VK_PPC_TPREL_HIGHESTA)
501-
.Case("dtprel@l", VK_PPC_DTPREL_LO)
502-
.Case("dtprel@h", VK_PPC_DTPREL_HI)
503-
.Case("dtprel@ha", VK_PPC_DTPREL_HA)
504-
.Case("dtprel@high", VK_PPC_DTPREL_HIGH)
505-
.Case("dtprel@higha", VK_PPC_DTPREL_HIGHA)
506-
.Case("dtprel@higher", VK_PPC_DTPREL_HIGHER)
507-
.Case("dtprel@highera", VK_PPC_DTPREL_HIGHERA)
508-
.Case("dtprel@highest", VK_PPC_DTPREL_HIGHEST)
509-
.Case("dtprel@highesta", VK_PPC_DTPREL_HIGHESTA)
510-
.Case("got@tprel", VK_PPC_GOT_TPREL)
511-
.Case("got@tprel@l", VK_PPC_GOT_TPREL_LO)
512-
.Case("got@tprel@h", VK_PPC_GOT_TPREL_HI)
513-
.Case("got@tprel@ha", VK_PPC_GOT_TPREL_HA)
514-
.Case("got@dtprel", VK_PPC_GOT_DTPREL)
515-
.Case("got@dtprel@l", VK_PPC_GOT_DTPREL_LO)
516-
.Case("got@dtprel@h", VK_PPC_GOT_DTPREL_HI)
517-
.Case("got@dtprel@ha", VK_PPC_GOT_DTPREL_HA)
518-
.Case("got@tlsgd", VK_PPC_GOT_TLSGD)
519-
.Case("got@tlsgd@l", VK_PPC_GOT_TLSGD_LO)
520-
.Case("got@tlsgd@h", VK_PPC_GOT_TLSGD_HI)
521-
.Case("got@tlsgd@ha", VK_PPC_GOT_TLSGD_HA)
522-
.Case("got@tlsld", VK_PPC_GOT_TLSLD)
523-
.Case("got@tlsld@l", VK_PPC_GOT_TLSLD_LO)
524-
.Case("got@tlsld@h", VK_PPC_GOT_TLSLD_HI)
525-
.Case("got@tlsld@ha", VK_PPC_GOT_TLSLD_HA)
526-
.Case("got@pcrel", VK_PPC_GOT_PCREL)
527-
.Case("got@tlsgd@pcrel", VK_PPC_GOT_TLSGD_PCREL)
528-
.Case("got@tlsld@pcrel", VK_PPC_GOT_TLSLD_PCREL)
529-
.Case("got@tprel@pcrel", VK_PPC_GOT_TPREL_PCREL)
530-
.Case("tls@pcrel", VK_PPC_TLS_PCREL)
531-
.Case("notoc", VK_PPC_NOTOC)
532472
.Case("gdgot", VK_Hexagon_GD_GOT)
533473
.Case("gdplt", VK_Hexagon_GD_PLT)
534474
.Case("iegot", VK_Hexagon_IE_GOT)

llvm/lib/MC/MCParser/AsmParser.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1279,7 +1279,7 @@ bool AsmParser::parsePrimaryExpr(const MCExpr *&Res, SMLoc &EndLoc,
12791279
std::pair<StringRef, StringRef> Split = IDVal.split('@');
12801280
MCSymbolRefExpr::VariantKind Variant = MCSymbolRefExpr::VK_None;
12811281
if (Split.first.size() != IDVal.size()) {
1282-
Variant = MCSymbolRefExpr::getVariantKindForName(Split.second);
1282+
Variant = getTargetParser().getVariantKindForName(Split.second);
12831283
if (Variant == MCSymbolRefExpr::VK_Invalid)
12841284
return TokError("invalid variant '" + Split.second + "'");
12851285
IDVal = Split.first;
@@ -1458,8 +1458,8 @@ static std::string angleBracketString(StringRef AltMacroStr) {
14581458
bool AsmParser::parseExpression(const MCExpr *&Res, SMLoc &EndLoc) {
14591459
// Parse the expression.
14601460
Res = nullptr;
1461-
if (getTargetParser().parsePrimaryExpr(Res, EndLoc) ||
1462-
parseBinOpRHS(1, Res, EndLoc))
1461+
auto &TS = getTargetParser();
1462+
if (TS.parsePrimaryExpr(Res, EndLoc) || parseBinOpRHS(1, Res, EndLoc))
14631463
return true;
14641464

14651465
// As a special case, we support 'a op b @ modifier' by rewriting the
@@ -1470,7 +1470,7 @@ bool AsmParser::parseExpression(const MCExpr *&Res, SMLoc &EndLoc) {
14701470
return TokError("unexpected symbol modifier following '@'");
14711471

14721472
MCSymbolRefExpr::VariantKind Variant =
1473-
MCSymbolRefExpr::getVariantKindForName(getTok().getIdentifier());
1473+
TS.getVariantKindForName(getTok().getIdentifier());
14741474
if (Variant == MCSymbolRefExpr::VK_Invalid)
14751475
return TokError("invalid variant '" + getTok().getIdentifier() + "'");
14761476

llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,8 @@ class PPCAsmParser : public MCTargetAsmParser {
156156
unsigned validateTargetOperandClass(MCParsedAsmOperand &Op,
157157
unsigned Kind) override;
158158

159+
MCSymbolRefExpr::VariantKind
160+
getVariantKindForName(StringRef Name) const override;
159161
const MCExpr *applyModifierToExpr(const MCExpr *E,
160162
MCSymbolRefExpr::VariantKind,
161163
MCContext &Ctx) override;
@@ -1901,6 +1903,81 @@ unsigned PPCAsmParser::validateTargetOperandClass(MCParsedAsmOperand &AsmOp,
19011903
return Match_InvalidOperand;
19021904
}
19031905

1906+
MCSymbolRefExpr::VariantKind
1907+
PPCAsmParser::getVariantKindForName(StringRef Name) const {
1908+
return StringSwitch<MCSymbolRefExpr::VariantKind>(Name.lower())
1909+
.Case("dtprel", MCSymbolRefExpr::VK_DTPREL)
1910+
.Case("got", MCSymbolRefExpr::VK_GOT)
1911+
.Case("pcrel", MCSymbolRefExpr::VK_PCREL)
1912+
.Case("plt", MCSymbolRefExpr::VK_PLT)
1913+
.Case("tlsgd", MCSymbolRefExpr::VK_TLSGD)
1914+
.Case("tlsld", MCSymbolRefExpr::VK_TLSLD)
1915+
.Case("tprel", MCSymbolRefExpr::VK_TPREL)
1916+
.Case("l", MCSymbolRefExpr::VK_PPC_LO)
1917+
.Case("h", MCSymbolRefExpr::VK_PPC_HI)
1918+
.Case("ha", MCSymbolRefExpr::VK_PPC_HA)
1919+
.Case("high", MCSymbolRefExpr::VK_PPC_HIGH)
1920+
.Case("higha", MCSymbolRefExpr::VK_PPC_HIGHA)
1921+
.Case("higher", MCSymbolRefExpr::VK_PPC_HIGHER)
1922+
.Case("highera", MCSymbolRefExpr::VK_PPC_HIGHERA)
1923+
.Case("highest", MCSymbolRefExpr::VK_PPC_HIGHEST)
1924+
.Case("highesta", MCSymbolRefExpr::VK_PPC_HIGHESTA)
1925+
.Case("got@l", MCSymbolRefExpr::VK_PPC_GOT_LO)
1926+
.Case("got@h", MCSymbolRefExpr::VK_PPC_GOT_HI)
1927+
.Case("got@ha", MCSymbolRefExpr::VK_PPC_GOT_HA)
1928+
.Case("local", MCSymbolRefExpr::VK_PPC_LOCAL)
1929+
.Case("tocbase", MCSymbolRefExpr::VK_PPC_TOCBASE)
1930+
.Case("toc", MCSymbolRefExpr::VK_PPC_TOC)
1931+
.Case("toc@l", MCSymbolRefExpr::VK_PPC_TOC_LO)
1932+
.Case("toc@h", MCSymbolRefExpr::VK_PPC_TOC_HI)
1933+
.Case("toc@ha", MCSymbolRefExpr::VK_PPC_TOC_HA)
1934+
.Case("u", MCSymbolRefExpr::VK_PPC_U)
1935+
// .Case("l", MCSymbolRefExpr::VK_PPC_L) VK_PPC_LO?
1936+
.Case("tls", MCSymbolRefExpr::VK_PPC_TLS)
1937+
.Case("dtpmod", MCSymbolRefExpr::VK_PPC_DTPMOD)
1938+
.Case("tprel@l", MCSymbolRefExpr::VK_PPC_TPREL_LO)
1939+
.Case("tprel@h", MCSymbolRefExpr::VK_PPC_TPREL_HI)
1940+
.Case("tprel@ha", MCSymbolRefExpr::VK_PPC_TPREL_HA)
1941+
.Case("tprel@high", MCSymbolRefExpr::VK_PPC_TPREL_HIGH)
1942+
.Case("tprel@higha", MCSymbolRefExpr::VK_PPC_TPREL_HIGHA)
1943+
.Case("tprel@higher", MCSymbolRefExpr::VK_PPC_TPREL_HIGHER)
1944+
.Case("tprel@highera", MCSymbolRefExpr::VK_PPC_TPREL_HIGHERA)
1945+
.Case("tprel@highest", MCSymbolRefExpr::VK_PPC_TPREL_HIGHEST)
1946+
.Case("tprel@highesta", MCSymbolRefExpr::VK_PPC_TPREL_HIGHESTA)
1947+
.Case("dtprel@l", MCSymbolRefExpr::VK_PPC_DTPREL_LO)
1948+
.Case("dtprel@h", MCSymbolRefExpr::VK_PPC_DTPREL_HI)
1949+
.Case("dtprel@ha", MCSymbolRefExpr::VK_PPC_DTPREL_HA)
1950+
.Case("dtprel@high", MCSymbolRefExpr::VK_PPC_DTPREL_HIGH)
1951+
.Case("dtprel@higha", MCSymbolRefExpr::VK_PPC_DTPREL_HIGHA)
1952+
.Case("dtprel@higher", MCSymbolRefExpr::VK_PPC_DTPREL_HIGHER)
1953+
.Case("dtprel@highera", MCSymbolRefExpr::VK_PPC_DTPREL_HIGHERA)
1954+
.Case("dtprel@highest", MCSymbolRefExpr::VK_PPC_DTPREL_HIGHEST)
1955+
.Case("dtprel@highesta", MCSymbolRefExpr::VK_PPC_DTPREL_HIGHESTA)
1956+
.Case("got@tprel", MCSymbolRefExpr::VK_PPC_GOT_TPREL)
1957+
.Case("got@tprel@l", MCSymbolRefExpr::VK_PPC_GOT_TPREL_LO)
1958+
.Case("got@tprel@h", MCSymbolRefExpr::VK_PPC_GOT_TPREL_HI)
1959+
.Case("got@tprel@ha", MCSymbolRefExpr::VK_PPC_GOT_TPREL_HA)
1960+
.Case("got@dtprel", MCSymbolRefExpr::VK_PPC_GOT_DTPREL)
1961+
.Case("got@dtprel@l", MCSymbolRefExpr::VK_PPC_GOT_DTPREL_LO)
1962+
.Case("got@dtprel@h", MCSymbolRefExpr::VK_PPC_GOT_DTPREL_HI)
1963+
.Case("got@dtprel@ha", MCSymbolRefExpr::VK_PPC_GOT_DTPREL_HA)
1964+
.Case("got@tlsgd", MCSymbolRefExpr::VK_PPC_GOT_TLSGD)
1965+
.Case("got@tlsgd@l", MCSymbolRefExpr::VK_PPC_GOT_TLSGD_LO)
1966+
.Case("got@tlsgd@h", MCSymbolRefExpr::VK_PPC_GOT_TLSGD_HI)
1967+
.Case("got@tlsgd@ha", MCSymbolRefExpr::VK_PPC_GOT_TLSGD_HA)
1968+
.Case("got@tlsld", MCSymbolRefExpr::VK_PPC_GOT_TLSLD)
1969+
.Case("got@tlsld@l", MCSymbolRefExpr::VK_PPC_GOT_TLSLD_LO)
1970+
.Case("got@tlsld@h", MCSymbolRefExpr::VK_PPC_GOT_TLSLD_HI)
1971+
.Case("got@tlsld@ha", MCSymbolRefExpr::VK_PPC_GOT_TLSLD_HA)
1972+
.Case("got@pcrel", MCSymbolRefExpr::VK_PPC_GOT_PCREL)
1973+
.Case("got@tlsgd@pcrel", MCSymbolRefExpr::VK_PPC_GOT_TLSGD_PCREL)
1974+
.Case("got@tlsld@pcrel", MCSymbolRefExpr::VK_PPC_GOT_TLSLD_PCREL)
1975+
.Case("got@tprel@pcrel", MCSymbolRefExpr::VK_PPC_GOT_TPREL_PCREL)
1976+
.Case("tls@pcrel", MCSymbolRefExpr::VK_PPC_TLS_PCREL)
1977+
.Case("notoc", MCSymbolRefExpr::VK_PPC_NOTOC)
1978+
.Default(MCSymbolRefExpr::VK_Invalid);
1979+
}
1980+
19041981
const MCExpr *
19051982
PPCAsmParser::applyModifierToExpr(const MCExpr *E,
19061983
MCSymbolRefExpr::VariantKind Variant,

0 commit comments

Comments
 (0)