Skip to content

Commit f120b0d

Browse files
committed
[MC] Remove MCSymbolRefExpr::VK_Invalid in favor of getVaraintKindForName returning std::optional
so that when the enum members are moved to XXXTargetExpr::VariantKind,, they do not need to implement an invalid value.
1 parent 23d5123 commit f120b0d

File tree

5 files changed

+15
-16
lines changed

5 files changed

+15
-16
lines changed

llvm/include/llvm/MC/MCAsmInfo.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -709,7 +709,7 @@ class MCAsmInfo {
709709
bool shouldUseMotorolaIntegers() const { return UseMotorolaIntegers; }
710710

711711
StringRef getVariantKindName(uint32_t Kind) const;
712-
uint32_t getVariantKindForName(StringRef Name) const;
712+
std::optional<uint32_t> getVariantKindForName(StringRef Name) const;
713713
};
714714

715715
} // end namespace llvm

llvm/include/llvm/MC/MCExpr.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,6 @@ class MCSymbolRefExpr : public MCExpr {
198198
// cleaner approach.
199199
enum VariantKind : uint16_t {
200200
VK_None,
201-
VK_Invalid,
202201

203202
VK_GOT,
204203
VK_GOTENT,

llvm/lib/MC/MCAsmInfo.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,9 +145,9 @@ StringRef MCAsmInfo::getVariantKindName(uint32_t Kind) const {
145145
return It->second;
146146
}
147147

148-
uint32_t MCAsmInfo::getVariantKindForName(StringRef Name) const {
148+
std::optional<uint32_t> MCAsmInfo::getVariantKindForName(StringRef Name) const {
149149
auto It = NameToVariantKind.find(Name.lower());
150150
if (It != NameToVariantKind.end())
151151
return It->second;
152-
return MCSymbolRefExpr::VK_Invalid;
152+
return {};
153153
}

llvm/lib/MC/MCParser/AsmParser.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1228,10 +1228,10 @@ bool AsmParser::parsePrimaryExpr(const MCExpr *&Res, SMLoc &EndLoc,
12281228

12291229
// Lookup the symbol variant if used.
12301230
if (!Split.second.empty()) {
1231-
Variant =
1232-
MCSymbolRefExpr::VariantKind(MAI.getVariantKindForName(Split.second));
1233-
if (Variant != MCSymbolRefExpr::VK_Invalid) {
1231+
auto MaybeVariant = MAI.getVariantKindForName(Split.second);
1232+
if (MaybeVariant) {
12341233
SymbolName = Split.first;
1234+
Variant = MCSymbolRefExpr::VariantKind(*MaybeVariant);
12351235
} else if (MAI.doesAllowAtInName() && !MAI.useParensForSymbolVariant()) {
12361236
Variant = MCSymbolRefExpr::VK_None;
12371237
} else {
@@ -1279,11 +1279,11 @@ 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::VariantKind(
1283-
MAI.getVariantKindForName(Split.second));
1284-
if (Variant == MCSymbolRefExpr::VK_Invalid)
1282+
auto MaybeVariant = MAI.getVariantKindForName(Split.second);
1283+
if (!MaybeVariant)
12851284
return TokError("invalid variant '" + Split.second + "'");
12861285
IDVal = Split.first;
1286+
Variant = MCSymbolRefExpr::VariantKind(*MaybeVariant);
12871287
}
12881288
if (IDVal == "f" || IDVal == "b") {
12891289
MCSymbol *Sym =
@@ -1470,12 +1470,12 @@ bool AsmParser::parseExpression(const MCExpr *&Res, SMLoc &EndLoc) {
14701470
if (Lexer.isNot(AsmToken::Identifier))
14711471
return TokError("unexpected symbol modifier following '@'");
14721472

1473-
auto Variant = MCSymbolRefExpr::VariantKind(
1474-
MAI.getVariantKindForName(getTok().getIdentifier()));
1475-
if (Variant == MCSymbolRefExpr::VK_Invalid)
1473+
auto Variant = MAI.getVariantKindForName(getTok().getIdentifier());
1474+
if (!Variant)
14761475
return TokError("invalid variant '" + getTok().getIdentifier() + "'");
14771476

1478-
const MCExpr *ModifiedRes = applyModifierToExpr(Res, Variant);
1477+
const MCExpr *ModifiedRes =
1478+
applyModifierToExpr(Res, MCSymbolRefExpr::VariantKind(*Variant));
14791479
if (!ModifiedRes) {
14801480
return TokError("invalid modifier '" + getTok().getIdentifier() +
14811481
"' (no symbols present)");

llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,10 +109,10 @@ struct DenseMapInfo<std::pair<const MCSymbol *, MCSymbolRefExpr::VariantKind>> {
109109
using TOCKey = std::pair<const MCSymbol *, MCSymbolRefExpr::VariantKind>;
110110

111111
static inline TOCKey getEmptyKey() {
112-
return {nullptr, MCSymbolRefExpr::VariantKind::VK_None};
112+
return {nullptr, MCSymbolRefExpr::VK_None};
113113
}
114114
static inline TOCKey getTombstoneKey() {
115-
return {nullptr, MCSymbolRefExpr::VariantKind::VK_Invalid};
115+
return {(const MCSymbol *)1, MCSymbolRefExpr::VK_None};
116116
}
117117
static unsigned getHashValue(const TOCKey &PairVal) {
118118
return detail::combineHashValue(

0 commit comments

Comments
 (0)