diff options
author | Fangrui Song <i@maskray.me> | 2025-03-02 16:20:59 -0800 |
---|---|---|
committer | Fangrui Song <i@maskray.me> | 2025-03-02 16:20:59 -0800 |
commit | 8c7c791284877e36f73c41ffa56b52c13e613993 (patch) | |
tree | f703b46d9e702540caec47e6c0d0792759d11387 /llvm/lib | |
parent | 3c80d9b8dda38162016f72defe24baf79d4cf0ef (diff) | |
download | llvm-8c7c791284877e36f73c41ffa56b52c13e613993.zip llvm-8c7c791284877e36f73c41ffa56b52c13e613993.tar.gz llvm-8c7c791284877e36f73c41ffa56b52c13e613993.tar.bz2 |
[MCParser] Use getVariantKindForName and move PPC specific VariantKind to PowerPC/
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/MC/MCExpr.cpp | 64 | ||||
-rw-r--r-- | llvm/lib/MC/MCParser/AsmParser.cpp | 8 | ||||
-rw-r--r-- | llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp | 77 |
3 files changed, 83 insertions, 66 deletions
diff --git a/llvm/lib/MC/MCExpr.cpp b/llvm/lib/MC/MCExpr.cpp index ede7655..f2243ba 100644 --- a/llvm/lib/MC/MCExpr.cpp +++ b/llvm/lib/MC/MCExpr.cpp @@ -431,6 +431,8 @@ StringRef MCSymbolRefExpr::getVariantKindName(VariantKind Kind) { llvm_unreachable("Invalid variant kind"); } +// FIXME: All variant kinds are target-specific. Move them to +// *AsmParser::getVariantKindForName and remove this function. MCSymbolRefExpr::VariantKind MCSymbolRefExpr::getVariantKindForName(StringRef Name) { return StringSwitch<VariantKind>(Name.lower()) @@ -467,68 +469,6 @@ MCSymbolRefExpr::getVariantKindForName(StringRef Name) { .Case("size", VK_SIZE) .Case("abs8", VK_X86_ABS8) .Case("pltoff", VK_X86_PLTOFF) - .Case("l", VK_PPC_LO) - .Case("h", VK_PPC_HI) - .Case("ha", VK_PPC_HA) - .Case("high", VK_PPC_HIGH) - .Case("higha", VK_PPC_HIGHA) - .Case("higher", VK_PPC_HIGHER) - .Case("highera", VK_PPC_HIGHERA) - .Case("highest", VK_PPC_HIGHEST) - .Case("highesta", VK_PPC_HIGHESTA) - .Case("got@l", VK_PPC_GOT_LO) - .Case("got@h", VK_PPC_GOT_HI) - .Case("got@ha", VK_PPC_GOT_HA) - .Case("local", VK_PPC_LOCAL) - .Case("tocbase", VK_PPC_TOCBASE) - .Case("toc", VK_PPC_TOC) - .Case("toc@l", VK_PPC_TOC_LO) - .Case("toc@h", VK_PPC_TOC_HI) - .Case("toc@ha", VK_PPC_TOC_HA) - .Case("u", VK_PPC_U) - .Case("l", VK_PPC_L) - .Case("tls", VK_PPC_TLS) - .Case("dtpmod", VK_PPC_DTPMOD) - .Case("tprel@l", VK_PPC_TPREL_LO) - .Case("tprel@h", VK_PPC_TPREL_HI) - .Case("tprel@ha", VK_PPC_TPREL_HA) - .Case("tprel@high", VK_PPC_TPREL_HIGH) - .Case("tprel@higha", VK_PPC_TPREL_HIGHA) - .Case("tprel@higher", VK_PPC_TPREL_HIGHER) - .Case("tprel@highera", VK_PPC_TPREL_HIGHERA) - .Case("tprel@highest", VK_PPC_TPREL_HIGHEST) - .Case("tprel@highesta", VK_PPC_TPREL_HIGHESTA) - .Case("dtprel@l", VK_PPC_DTPREL_LO) - .Case("dtprel@h", VK_PPC_DTPREL_HI) - .Case("dtprel@ha", VK_PPC_DTPREL_HA) - .Case("dtprel@high", VK_PPC_DTPREL_HIGH) - .Case("dtprel@higha", VK_PPC_DTPREL_HIGHA) - .Case("dtprel@higher", VK_PPC_DTPREL_HIGHER) - .Case("dtprel@highera", VK_PPC_DTPREL_HIGHERA) - .Case("dtprel@highest", VK_PPC_DTPREL_HIGHEST) - .Case("dtprel@highesta", VK_PPC_DTPREL_HIGHESTA) - .Case("got@tprel", VK_PPC_GOT_TPREL) - .Case("got@tprel@l", VK_PPC_GOT_TPREL_LO) - .Case("got@tprel@h", VK_PPC_GOT_TPREL_HI) - .Case("got@tprel@ha", VK_PPC_GOT_TPREL_HA) - .Case("got@dtprel", VK_PPC_GOT_DTPREL) - .Case("got@dtprel@l", VK_PPC_GOT_DTPREL_LO) - .Case("got@dtprel@h", VK_PPC_GOT_DTPREL_HI) - .Case("got@dtprel@ha", VK_PPC_GOT_DTPREL_HA) - .Case("got@tlsgd", VK_PPC_GOT_TLSGD) - .Case("got@tlsgd@l", VK_PPC_GOT_TLSGD_LO) - .Case("got@tlsgd@h", VK_PPC_GOT_TLSGD_HI) - .Case("got@tlsgd@ha", VK_PPC_GOT_TLSGD_HA) - .Case("got@tlsld", VK_PPC_GOT_TLSLD) - .Case("got@tlsld@l", VK_PPC_GOT_TLSLD_LO) - .Case("got@tlsld@h", VK_PPC_GOT_TLSLD_HI) - .Case("got@tlsld@ha", VK_PPC_GOT_TLSLD_HA) - .Case("got@pcrel", VK_PPC_GOT_PCREL) - .Case("got@tlsgd@pcrel", VK_PPC_GOT_TLSGD_PCREL) - .Case("got@tlsld@pcrel", VK_PPC_GOT_TLSLD_PCREL) - .Case("got@tprel@pcrel", VK_PPC_GOT_TPREL_PCREL) - .Case("tls@pcrel", VK_PPC_TLS_PCREL) - .Case("notoc", VK_PPC_NOTOC) .Case("gdgot", VK_Hexagon_GD_GOT) .Case("gdplt", VK_Hexagon_GD_PLT) .Case("iegot", VK_Hexagon_IE_GOT) diff --git a/llvm/lib/MC/MCParser/AsmParser.cpp b/llvm/lib/MC/MCParser/AsmParser.cpp index be90ac3..fca6b378 100644 --- a/llvm/lib/MC/MCParser/AsmParser.cpp +++ b/llvm/lib/MC/MCParser/AsmParser.cpp @@ -1279,7 +1279,7 @@ bool AsmParser::parsePrimaryExpr(const MCExpr *&Res, SMLoc &EndLoc, std::pair<StringRef, StringRef> Split = IDVal.split('@'); MCSymbolRefExpr::VariantKind Variant = MCSymbolRefExpr::VK_None; if (Split.first.size() != IDVal.size()) { - Variant = MCSymbolRefExpr::getVariantKindForName(Split.second); + Variant = getTargetParser().getVariantKindForName(Split.second); if (Variant == MCSymbolRefExpr::VK_Invalid) return TokError("invalid variant '" + Split.second + "'"); IDVal = Split.first; @@ -1458,8 +1458,8 @@ static std::string angleBracketString(StringRef AltMacroStr) { bool AsmParser::parseExpression(const MCExpr *&Res, SMLoc &EndLoc) { // Parse the expression. Res = nullptr; - if (getTargetParser().parsePrimaryExpr(Res, EndLoc) || - parseBinOpRHS(1, Res, EndLoc)) + auto &TS = getTargetParser(); + if (TS.parsePrimaryExpr(Res, EndLoc) || parseBinOpRHS(1, Res, EndLoc)) return true; // 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) { return TokError("unexpected symbol modifier following '@'"); MCSymbolRefExpr::VariantKind Variant = - MCSymbolRefExpr::getVariantKindForName(getTok().getIdentifier()); + TS.getVariantKindForName(getTok().getIdentifier()); if (Variant == MCSymbolRefExpr::VK_Invalid) return TokError("invalid variant '" + getTok().getIdentifier() + "'"); diff --git a/llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp b/llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp index a364653..8f30fd5 100644 --- a/llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp +++ b/llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp @@ -156,6 +156,8 @@ public: unsigned validateTargetOperandClass(MCParsedAsmOperand &Op, unsigned Kind) override; + MCSymbolRefExpr::VariantKind + getVariantKindForName(StringRef Name) const override; const MCExpr *applyModifierToExpr(const MCExpr *E, MCSymbolRefExpr::VariantKind, MCContext &Ctx) override; @@ -1901,6 +1903,81 @@ unsigned PPCAsmParser::validateTargetOperandClass(MCParsedAsmOperand &AsmOp, return Match_InvalidOperand; } +MCSymbolRefExpr::VariantKind +PPCAsmParser::getVariantKindForName(StringRef Name) const { + return StringSwitch<MCSymbolRefExpr::VariantKind>(Name.lower()) + .Case("dtprel", MCSymbolRefExpr::VK_DTPREL) + .Case("got", MCSymbolRefExpr::VK_GOT) + .Case("pcrel", MCSymbolRefExpr::VK_PCREL) + .Case("plt", MCSymbolRefExpr::VK_PLT) + .Case("tlsgd", MCSymbolRefExpr::VK_TLSGD) + .Case("tlsld", MCSymbolRefExpr::VK_TLSLD) + .Case("tprel", MCSymbolRefExpr::VK_TPREL) + .Case("l", MCSymbolRefExpr::VK_PPC_LO) + .Case("h", MCSymbolRefExpr::VK_PPC_HI) + .Case("ha", MCSymbolRefExpr::VK_PPC_HA) + .Case("high", MCSymbolRefExpr::VK_PPC_HIGH) + .Case("higha", MCSymbolRefExpr::VK_PPC_HIGHA) + .Case("higher", MCSymbolRefExpr::VK_PPC_HIGHER) + .Case("highera", MCSymbolRefExpr::VK_PPC_HIGHERA) + .Case("highest", MCSymbolRefExpr::VK_PPC_HIGHEST) + .Case("highesta", MCSymbolRefExpr::VK_PPC_HIGHESTA) + .Case("got@l", MCSymbolRefExpr::VK_PPC_GOT_LO) + .Case("got@h", MCSymbolRefExpr::VK_PPC_GOT_HI) + .Case("got@ha", MCSymbolRefExpr::VK_PPC_GOT_HA) + .Case("local", MCSymbolRefExpr::VK_PPC_LOCAL) + .Case("tocbase", MCSymbolRefExpr::VK_PPC_TOCBASE) + .Case("toc", MCSymbolRefExpr::VK_PPC_TOC) + .Case("toc@l", MCSymbolRefExpr::VK_PPC_TOC_LO) + .Case("toc@h", MCSymbolRefExpr::VK_PPC_TOC_HI) + .Case("toc@ha", MCSymbolRefExpr::VK_PPC_TOC_HA) + .Case("u", MCSymbolRefExpr::VK_PPC_U) + // .Case("l", MCSymbolRefExpr::VK_PPC_L) VK_PPC_LO? + .Case("tls", MCSymbolRefExpr::VK_PPC_TLS) + .Case("dtpmod", MCSymbolRefExpr::VK_PPC_DTPMOD) + .Case("tprel@l", MCSymbolRefExpr::VK_PPC_TPREL_LO) + .Case("tprel@h", MCSymbolRefExpr::VK_PPC_TPREL_HI) + .Case("tprel@ha", MCSymbolRefExpr::VK_PPC_TPREL_HA) + .Case("tprel@high", MCSymbolRefExpr::VK_PPC_TPREL_HIGH) + .Case("tprel@higha", MCSymbolRefExpr::VK_PPC_TPREL_HIGHA) + .Case("tprel@higher", MCSymbolRefExpr::VK_PPC_TPREL_HIGHER) + .Case("tprel@highera", MCSymbolRefExpr::VK_PPC_TPREL_HIGHERA) + .Case("tprel@highest", MCSymbolRefExpr::VK_PPC_TPREL_HIGHEST) + .Case("tprel@highesta", MCSymbolRefExpr::VK_PPC_TPREL_HIGHESTA) + .Case("dtprel@l", MCSymbolRefExpr::VK_PPC_DTPREL_LO) + .Case("dtprel@h", MCSymbolRefExpr::VK_PPC_DTPREL_HI) + .Case("dtprel@ha", MCSymbolRefExpr::VK_PPC_DTPREL_HA) + .Case("dtprel@high", MCSymbolRefExpr::VK_PPC_DTPREL_HIGH) + .Case("dtprel@higha", MCSymbolRefExpr::VK_PPC_DTPREL_HIGHA) + .Case("dtprel@higher", MCSymbolRefExpr::VK_PPC_DTPREL_HIGHER) + .Case("dtprel@highera", MCSymbolRefExpr::VK_PPC_DTPREL_HIGHERA) + .Case("dtprel@highest", MCSymbolRefExpr::VK_PPC_DTPREL_HIGHEST) + .Case("dtprel@highesta", MCSymbolRefExpr::VK_PPC_DTPREL_HIGHESTA) + .Case("got@tprel", MCSymbolRefExpr::VK_PPC_GOT_TPREL) + .Case("got@tprel@l", MCSymbolRefExpr::VK_PPC_GOT_TPREL_LO) + .Case("got@tprel@h", MCSymbolRefExpr::VK_PPC_GOT_TPREL_HI) + .Case("got@tprel@ha", MCSymbolRefExpr::VK_PPC_GOT_TPREL_HA) + .Case("got@dtprel", MCSymbolRefExpr::VK_PPC_GOT_DTPREL) + .Case("got@dtprel@l", MCSymbolRefExpr::VK_PPC_GOT_DTPREL_LO) + .Case("got@dtprel@h", MCSymbolRefExpr::VK_PPC_GOT_DTPREL_HI) + .Case("got@dtprel@ha", MCSymbolRefExpr::VK_PPC_GOT_DTPREL_HA) + .Case("got@tlsgd", MCSymbolRefExpr::VK_PPC_GOT_TLSGD) + .Case("got@tlsgd@l", MCSymbolRefExpr::VK_PPC_GOT_TLSGD_LO) + .Case("got@tlsgd@h", MCSymbolRefExpr::VK_PPC_GOT_TLSGD_HI) + .Case("got@tlsgd@ha", MCSymbolRefExpr::VK_PPC_GOT_TLSGD_HA) + .Case("got@tlsld", MCSymbolRefExpr::VK_PPC_GOT_TLSLD) + .Case("got@tlsld@l", MCSymbolRefExpr::VK_PPC_GOT_TLSLD_LO) + .Case("got@tlsld@h", MCSymbolRefExpr::VK_PPC_GOT_TLSLD_HI) + .Case("got@tlsld@ha", MCSymbolRefExpr::VK_PPC_GOT_TLSLD_HA) + .Case("got@pcrel", MCSymbolRefExpr::VK_PPC_GOT_PCREL) + .Case("got@tlsgd@pcrel", MCSymbolRefExpr::VK_PPC_GOT_TLSGD_PCREL) + .Case("got@tlsld@pcrel", MCSymbolRefExpr::VK_PPC_GOT_TLSLD_PCREL) + .Case("got@tprel@pcrel", MCSymbolRefExpr::VK_PPC_GOT_TPREL_PCREL) + .Case("tls@pcrel", MCSymbolRefExpr::VK_PPC_TLS_PCREL) + .Case("notoc", MCSymbolRefExpr::VK_PPC_NOTOC) + .Default(MCSymbolRefExpr::VK_Invalid); +} + const MCExpr * PPCAsmParser::applyModifierToExpr(const MCExpr *E, MCSymbolRefExpr::VariantKind Variant, |