diff options
-rw-r--r-- | llvm/include/llvm/MC/MCAsmInfo.h | 2 | ||||
-rw-r--r-- | llvm/include/llvm/MC/MCExpr.h | 1 | ||||
-rw-r--r-- | llvm/lib/MC/MCAsmInfo.cpp | 4 | ||||
-rw-r--r-- | llvm/lib/MC/MCParser/AsmParser.cpp | 20 | ||||
-rw-r--r-- | llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp | 4 |
5 files changed, 15 insertions, 16 deletions
diff --git a/llvm/include/llvm/MC/MCAsmInfo.h b/llvm/include/llvm/MC/MCAsmInfo.h index aba8eae..7f03097 100644 --- a/llvm/include/llvm/MC/MCAsmInfo.h +++ b/llvm/include/llvm/MC/MCAsmInfo.h @@ -709,7 +709,7 @@ public: bool shouldUseMotorolaIntegers() const { return UseMotorolaIntegers; } StringRef getVariantKindName(uint32_t Kind) const; - uint32_t getVariantKindForName(StringRef Name) const; + std::optional<uint32_t> getVariantKindForName(StringRef Name) const; }; } // end namespace llvm diff --git a/llvm/include/llvm/MC/MCExpr.h b/llvm/include/llvm/MC/MCExpr.h index ab96b39..a302a81 100644 --- a/llvm/include/llvm/MC/MCExpr.h +++ b/llvm/include/llvm/MC/MCExpr.h @@ -198,7 +198,6 @@ public: // cleaner approach. enum VariantKind : uint16_t { VK_None, - VK_Invalid, VK_GOT, VK_GOTENT, diff --git a/llvm/lib/MC/MCAsmInfo.cpp b/llvm/lib/MC/MCAsmInfo.cpp index 9821bb2..69374f6 100644 --- a/llvm/lib/MC/MCAsmInfo.cpp +++ b/llvm/lib/MC/MCAsmInfo.cpp @@ -145,9 +145,9 @@ StringRef MCAsmInfo::getVariantKindName(uint32_t Kind) const { return It->second; } -uint32_t MCAsmInfo::getVariantKindForName(StringRef Name) const { +std::optional<uint32_t> MCAsmInfo::getVariantKindForName(StringRef Name) const { auto It = NameToVariantKind.find(Name.lower()); if (It != NameToVariantKind.end()) return It->second; - return MCSymbolRefExpr::VK_Invalid; + return {}; } diff --git a/llvm/lib/MC/MCParser/AsmParser.cpp b/llvm/lib/MC/MCParser/AsmParser.cpp index 1e1b637..0cd691e 100644 --- a/llvm/lib/MC/MCParser/AsmParser.cpp +++ b/llvm/lib/MC/MCParser/AsmParser.cpp @@ -1228,10 +1228,10 @@ bool AsmParser::parsePrimaryExpr(const MCExpr *&Res, SMLoc &EndLoc, // Lookup the symbol variant if used. if (!Split.second.empty()) { - Variant = - MCSymbolRefExpr::VariantKind(MAI.getVariantKindForName(Split.second)); - if (Variant != MCSymbolRefExpr::VK_Invalid) { + auto MaybeVariant = MAI.getVariantKindForName(Split.second); + if (MaybeVariant) { SymbolName = Split.first; + Variant = MCSymbolRefExpr::VariantKind(*MaybeVariant); } else if (MAI.doesAllowAtInName() && !MAI.useParensForSymbolVariant()) { Variant = MCSymbolRefExpr::VK_None; } else { @@ -1279,11 +1279,11 @@ 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::VariantKind( - MAI.getVariantKindForName(Split.second)); - if (Variant == MCSymbolRefExpr::VK_Invalid) + auto MaybeVariant = MAI.getVariantKindForName(Split.second); + if (!MaybeVariant) return TokError("invalid variant '" + Split.second + "'"); IDVal = Split.first; + Variant = MCSymbolRefExpr::VariantKind(*MaybeVariant); } if (IDVal == "f" || IDVal == "b") { MCSymbol *Sym = @@ -1470,12 +1470,12 @@ bool AsmParser::parseExpression(const MCExpr *&Res, SMLoc &EndLoc) { if (Lexer.isNot(AsmToken::Identifier)) return TokError("unexpected symbol modifier following '@'"); - auto Variant = MCSymbolRefExpr::VariantKind( - MAI.getVariantKindForName(getTok().getIdentifier())); - if (Variant == MCSymbolRefExpr::VK_Invalid) + auto Variant = MAI.getVariantKindForName(getTok().getIdentifier()); + if (!Variant) return TokError("invalid variant '" + getTok().getIdentifier() + "'"); - const MCExpr *ModifiedRes = applyModifierToExpr(Res, Variant); + const MCExpr *ModifiedRes = + applyModifierToExpr(Res, MCSymbolRefExpr::VariantKind(*Variant)); if (!ModifiedRes) { return TokError("invalid modifier '" + getTok().getIdentifier() + "' (no symbols present)"); diff --git a/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp b/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp index cd0704c..be0df76 100644 --- a/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp +++ b/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp @@ -109,10 +109,10 @@ struct DenseMapInfo<std::pair<const MCSymbol *, MCSymbolRefExpr::VariantKind>> { using TOCKey = std::pair<const MCSymbol *, MCSymbolRefExpr::VariantKind>; static inline TOCKey getEmptyKey() { - return {nullptr, MCSymbolRefExpr::VariantKind::VK_None}; + return {nullptr, MCSymbolRefExpr::VK_None}; } static inline TOCKey getTombstoneKey() { - return {nullptr, MCSymbolRefExpr::VariantKind::VK_Invalid}; + return {(const MCSymbol *)1, MCSymbolRefExpr::VK_None}; } static unsigned getHashValue(const TOCKey &PairVal) { return detail::combineHashValue( |