Skip to content

Commit 4d5a963

Browse files
committed
[VE] Rename VariantKind to Specifier and clean up code
1 parent 7d742f9 commit 4d5a963

File tree

6 files changed

+36
-124
lines changed

6 files changed

+36
-124
lines changed

llvm/lib/Target/VE/AsmParser/VEAsmParser.cpp

Lines changed: 15 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,7 @@ class VEAsmParser : public MCTargetAsmParser {
7373
ParseStatus parseVEAsmOperand(std::unique_ptr<VEOperand> &Operand);
7474

7575
// Helper function to parse expression with a symbol.
76-
const MCExpr *extractModifierFromExpr(const MCExpr *E,
77-
VEMCExpr::VariantKind &Variant);
78-
const MCExpr *fixupVariantKind(const MCExpr *E);
76+
const MCExpr *extractSpecifier(const MCExpr *E, VEMCExpr::Specifier &Variant);
7977
bool parseExpression(const MCExpr *&EVal);
8078

8179
// Split the mnemonic stripping conditional code and quantifiers
@@ -1035,15 +1033,14 @@ bool VEAsmParser::parseLiteralValues(unsigned Size, SMLoc L) {
10351033
return (parseMany(parseOne));
10361034
}
10371035

1038-
/// Extract \code @lo32/@hi32/etc \endcode modifier from expression.
1036+
/// Extract \code @lo32/@hi32/etc \endcode specifier from expression.
10391037
/// Recursively scan the expression and check for VK_HI32/LO32/etc
10401038
/// symbol variants. If all symbols with modifier use the same
1041-
/// variant, return the corresponding VEMCExpr::VariantKind,
1039+
/// variant, return the corresponding VEMCExpr::Specifier,
10421040
/// and a modified expression using the default symbol variant.
10431041
/// Otherwise, return NULL.
1044-
const MCExpr *
1045-
VEAsmParser::extractModifierFromExpr(const MCExpr *E,
1046-
VEMCExpr::VariantKind &Variant) {
1042+
const MCExpr *VEAsmParser::extractSpecifier(const MCExpr *E,
1043+
VEMCExpr::Specifier &Variant) {
10471044
MCContext &Context = getParser().getContext();
10481045
Variant = VEMCExpr::VK_None;
10491046

@@ -1055,7 +1052,7 @@ VEAsmParser::extractModifierFromExpr(const MCExpr *E,
10551052
case MCExpr::SymbolRef: {
10561053
const MCSymbolRefExpr *SRE = cast<MCSymbolRefExpr>(E);
10571054

1058-
switch (getVariantKind(SRE)) {
1055+
switch (getSpecifier(SRE)) {
10591056
case VEMCExpr::VK_None:
10601057
// Use VK_REFLONG to a symbol without modifiers.
10611058
Variant = VEMCExpr::VK_REFLONG;
@@ -1111,17 +1108,17 @@ VEAsmParser::extractModifierFromExpr(const MCExpr *E,
11111108

11121109
case MCExpr::Unary: {
11131110
const MCUnaryExpr *UE = cast<MCUnaryExpr>(E);
1114-
const MCExpr *Sub = extractModifierFromExpr(UE->getSubExpr(), Variant);
1111+
const MCExpr *Sub = extractSpecifier(UE->getSubExpr(), Variant);
11151112
if (!Sub)
11161113
return nullptr;
11171114
return MCUnaryExpr::create(UE->getOpcode(), Sub, Context);
11181115
}
11191116

11201117
case MCExpr::Binary: {
11211118
const MCBinaryExpr *BE = cast<MCBinaryExpr>(E);
1122-
VEMCExpr::VariantKind LHSVariant, RHSVariant;
1123-
const MCExpr *LHS = extractModifierFromExpr(BE->getLHS(), LHSVariant);
1124-
const MCExpr *RHS = extractModifierFromExpr(BE->getRHS(), RHSVariant);
1119+
VEMCExpr::Specifier LHSVariant, RHSVariant;
1120+
const MCExpr *LHS = extractSpecifier(BE->getLHS(), LHSVariant);
1121+
const MCExpr *RHS = extractSpecifier(BE->getRHS(), RHSVariant);
11251122

11261123
if (!LHS && !RHS)
11271124
return nullptr;
@@ -1147,49 +1144,18 @@ VEAsmParser::extractModifierFromExpr(const MCExpr *E,
11471144
llvm_unreachable("Invalid expression kind!");
11481145
}
11491146

1150-
const MCExpr *VEAsmParser::fixupVariantKind(const MCExpr *E) {
1151-
MCContext &Context = getParser().getContext();
1152-
1153-
switch (E->getKind()) {
1154-
case MCExpr::Target:
1155-
case MCExpr::Constant:
1156-
case MCExpr::SymbolRef:
1157-
return E;
1158-
1159-
case MCExpr::Unary: {
1160-
const MCUnaryExpr *UE = cast<MCUnaryExpr>(E);
1161-
const MCExpr *Sub = fixupVariantKind(UE->getSubExpr());
1162-
if (Sub == UE->getSubExpr())
1163-
return E;
1164-
return MCUnaryExpr::create(UE->getOpcode(), Sub, Context);
1165-
}
1166-
1167-
case MCExpr::Binary: {
1168-
const MCBinaryExpr *BE = cast<MCBinaryExpr>(E);
1169-
const MCExpr *LHS = fixupVariantKind(BE->getLHS());
1170-
const MCExpr *RHS = fixupVariantKind(BE->getRHS());
1171-
if (LHS == BE->getLHS() && RHS == BE->getRHS())
1172-
return E;
1173-
return MCBinaryExpr::create(BE->getOpcode(), LHS, RHS, Context);
1174-
}
1175-
}
1176-
1177-
llvm_unreachable("Invalid expression kind!");
1178-
}
1179-
1180-
/// ParseExpression. This differs from the default "parseExpression" in that
1181-
/// it handles modifiers.
1147+
/// This differs from the default "parseExpression" in that it handles
1148+
/// relocation specifiers.
11821149
bool VEAsmParser::parseExpression(const MCExpr *&EVal) {
11831150
// Handle \code symbol @lo32/@hi32/etc \endcode.
11841151
if (getParser().parseExpression(EVal))
11851152
return true;
11861153

11871154
// Convert MCSymbolRefExpr with VK_* to MCExpr with VK_*.
1188-
EVal = fixupVariantKind(EVal);
1189-
VEMCExpr::VariantKind Variant;
1190-
const MCExpr *E = extractModifierFromExpr(EVal, Variant);
1155+
VEMCExpr::Specifier Specifier;
1156+
const MCExpr *E = extractSpecifier(EVal, Specifier);
11911157
if (E)
1192-
EVal = VEMCExpr::create(Variant, E, getParser().getContext());
1158+
EVal = VEMCExpr::create(Specifier, E, getParser().getContext());
11931159

11941160
return false;
11951161
}

llvm/lib/Target/VE/MCTargetDesc/VEELFObjectWriter.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ unsigned VEELFObjectWriter::getRelocType(MCContext &Ctx, const MCValue &Target,
4040
const MCFixup &Fixup,
4141
bool IsPCRel) const {
4242
if (const VEMCExpr *SExpr = dyn_cast<VEMCExpr>(Fixup.getValue())) {
43-
if (SExpr->getKind() == VEMCExpr::VK_PC_LO32)
43+
if (SExpr->getSpecifier() == VEMCExpr::VK_PC_LO32)
4444
return ELF::R_VE_PC_LO32;
4545
}
4646

llvm/lib/Target/VE/MCTargetDesc/VEMCExpr.cpp

Lines changed: 7 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -25,73 +25,23 @@ using namespace llvm;
2525

2626
#define DEBUG_TYPE "vemcexpr"
2727

28-
const VEMCExpr *VEMCExpr::create(VariantKind Kind, const MCExpr *Expr,
28+
const VEMCExpr *VEMCExpr::create(Specifier Kind, const MCExpr *Expr,
2929
MCContext &Ctx) {
3030
return new (Ctx) VEMCExpr(Kind, Expr);
3131
}
3232

3333
void VEMCExpr::printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const {
3434

35-
bool closeParen = printVariantKind(OS, Kind);
36-
3735
const MCExpr *Expr = getSubExpr();
3836
Expr->print(OS, MAI);
39-
40-
if (closeParen)
41-
OS << ')';
4237
if (Kind != VK_None && Kind != VK_REFLONG)
4338
OS << '@' << MAI->getVariantKindName(Kind);
4439
}
4540

46-
bool VEMCExpr::printVariantKind(raw_ostream &OS, VariantKind Kind) {
47-
switch (Kind) {
48-
case VK_None:
49-
case VK_REFLONG:
50-
return false;
51-
52-
case VK_HI32:
53-
case VK_LO32:
54-
case VK_PC_HI32:
55-
case VK_PC_LO32:
56-
case VK_GOT_HI32:
57-
case VK_GOT_LO32:
58-
case VK_GOTOFF_HI32:
59-
case VK_GOTOFF_LO32:
60-
case VK_PLT_HI32:
61-
case VK_PLT_LO32:
62-
case VK_TLS_GD_HI32:
63-
case VK_TLS_GD_LO32:
64-
case VK_TPOFF_HI32:
65-
case VK_TPOFF_LO32:
66-
// Use suffix for these variant kinds
67-
return false;
68-
}
69-
return true;
70-
}
71-
72-
VEMCExpr::VariantKind VEMCExpr::parseVariantKind(StringRef name) {
73-
return StringSwitch<VEMCExpr::VariantKind>(name)
74-
.Case("hi", VK_HI32)
75-
.Case("lo", VK_LO32)
76-
.Case("pc_hi", VK_PC_HI32)
77-
.Case("pc_lo", VK_PC_LO32)
78-
.Case("got_hi", VK_GOT_HI32)
79-
.Case("got_lo", VK_GOT_LO32)
80-
.Case("gotoff_hi", VK_GOTOFF_HI32)
81-
.Case("gotoff_lo", VK_GOTOFF_LO32)
82-
.Case("plt_hi", VK_PLT_HI32)
83-
.Case("plt_lo", VK_PLT_LO32)
84-
.Case("tls_gd_hi", VK_TLS_GD_HI32)
85-
.Case("tls_gd_lo", VK_TLS_GD_LO32)
86-
.Case("tpoff_hi", VK_TPOFF_HI32)
87-
.Case("tpoff_lo", VK_TPOFF_LO32)
88-
.Default(VK_None);
89-
}
90-
91-
VE::Fixups VEMCExpr::getFixupKind(VEMCExpr::VariantKind Kind) {
92-
switch (Kind) {
41+
VE::Fixups VEMCExpr::getFixupKind(VEMCExpr::Specifier S) {
42+
switch (S) {
9343
default:
94-
llvm_unreachable("Unhandled VEMCExpr::VariantKind");
44+
llvm_unreachable("Unhandled VEMCExpr::Specifier");
9545
case VK_REFLONG:
9646
return VE::fixup_ve_reflong;
9747
case VK_HI32:
@@ -130,8 +80,8 @@ bool VEMCExpr::evaluateAsRelocatableImpl(MCValue &Res,
13080
if (!getSubExpr()->evaluateAsRelocatable(Res, Asm))
13181
return false;
13282

133-
Res =
134-
MCValue::get(Res.getSymA(), Res.getSymB(), Res.getConstant(), getKind());
83+
Res = MCValue::get(Res.getSymA(), Res.getSymB(), Res.getConstant(),
84+
getSpecifier());
13585

13686
return true;
13787
}
@@ -171,7 +121,7 @@ void VEMCExpr::visitUsedExpr(MCStreamer &Streamer) const {
171121
}
172122

173123
void VEMCExpr::fixELFSymbolsInTLSFixups(MCAssembler &Asm) const {
174-
switch (getKind()) {
124+
switch (getSpecifier()) {
175125
default:
176126
return;
177127
case VK_TLS_GD_HI32:

llvm/lib/Target/VE/MCTargetDesc/VEMCExpr.h

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,10 @@ namespace llvm {
2222
class StringRef;
2323
class VEMCExpr : public MCTargetExpr {
2424
public:
25-
enum VariantKind {
25+
enum Specifier {
2626
VK_None,
2727

28-
// While not strictly necessary, start at a larger number to avoid confusion
29-
// with MCSymbolRefExpr::VariantKind.
30-
VK_REFLONG = 100,
28+
VK_REFLONG = MCSymbolRefExpr::FirstTargetSpecifier,
3129
VK_HI32, // @hi
3230
VK_LO32, // @lo
3331
VK_PC_HI32, // @pc_hi
@@ -45,24 +43,24 @@ class VEMCExpr : public MCTargetExpr {
4543
};
4644

4745
private:
48-
const VariantKind Kind;
46+
const Specifier Kind;
4947
const MCExpr *Expr;
5048

51-
explicit VEMCExpr(VariantKind Kind, const MCExpr *Expr)
49+
explicit VEMCExpr(Specifier Kind, const MCExpr *Expr)
5250
: Kind(Kind), Expr(Expr) {}
5351

5452
public:
5553
/// @name Construction
5654
/// @{
5755

58-
static const VEMCExpr *create(VariantKind Kind, const MCExpr *Expr,
56+
static const VEMCExpr *create(Specifier Kind, const MCExpr *Expr,
5957
MCContext &Ctx);
6058
/// @}
6159
/// @name Accessors
6260
/// @{
6361

6462
/// getOpcode - Get the kind of this expression.
65-
VariantKind getKind() const { return Kind; }
63+
Specifier getSpecifier() const { return Kind; }
6664

6765
/// getSubExpr - Get the child of this expression.
6866
const MCExpr *getSubExpr() const { return Expr; }
@@ -85,13 +83,11 @@ class VEMCExpr : public MCTargetExpr {
8583
return E->getKind() == MCExpr::Target;
8684
}
8785

88-
static VariantKind parseVariantKind(StringRef name);
89-
static bool printVariantKind(raw_ostream &OS, VariantKind Kind);
90-
static VE::Fixups getFixupKind(VariantKind Kind);
86+
static VE::Fixups getFixupKind(Specifier S);
9187
};
9288

93-
static inline VEMCExpr::VariantKind getVariantKind(const MCSymbolRefExpr *SRE) {
94-
return VEMCExpr::VariantKind(SRE->getKind());
89+
static inline VEMCExpr::Specifier getSpecifier(const MCSymbolRefExpr *SRE) {
90+
return VEMCExpr::Specifier(SRE->getKind());
9591
}
9692

9793
} // namespace llvm

llvm/lib/Target/VE/VEAsmPrinter.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,14 +65,14 @@ class VEAsmPrinter : public AsmPrinter {
6565
};
6666
} // end of anonymous namespace
6767

68-
static MCOperand createVEMCOperand(VEMCExpr::VariantKind Kind, MCSymbol *Sym,
68+
static MCOperand createVEMCOperand(VEMCExpr::Specifier Kind, MCSymbol *Sym,
6969
MCContext &OutContext) {
7070
const MCSymbolRefExpr *MCSym = MCSymbolRefExpr::create(Sym, OutContext);
7171
const VEMCExpr *expr = VEMCExpr::create(Kind, MCSym, OutContext);
7272
return MCOperand::createExpr(expr);
7373
}
7474

75-
static MCOperand createGOTRelExprOp(VEMCExpr::VariantKind Kind,
75+
static MCOperand createGOTRelExprOp(VEMCExpr::Specifier Kind,
7676
MCSymbol *GOTLabel, MCContext &OutContext) {
7777
const MCSymbolRefExpr *GOT = MCSymbolRefExpr::create(GOTLabel, OutContext);
7878
const VEMCExpr *expr = VEMCExpr::create(Kind, GOT, OutContext);
@@ -164,7 +164,7 @@ static void emitANDrm(MCStreamer &OutStreamer, MCOperand &RS1, MCOperand &Imm,
164164
}
165165

166166
static void emitHiLo(MCStreamer &OutStreamer, MCSymbol *GOTSym,
167-
VEMCExpr::VariantKind HiKind, VEMCExpr::VariantKind LoKind,
167+
VEMCExpr::Specifier HiKind, VEMCExpr::Specifier LoKind,
168168
MCOperand &RD, MCContext &OutContext,
169169
const MCSubtargetInfo &STI) {
170170

llvm/lib/Target/VE/VEMCInstLower.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ using namespace llvm;
2828
static MCOperand LowerSymbolOperand(const MachineInstr *MI,
2929
const MachineOperand &MO,
3030
const MCSymbol *Symbol, AsmPrinter &AP) {
31-
VEMCExpr::VariantKind Kind = (VEMCExpr::VariantKind)MO.getTargetFlags();
31+
VEMCExpr::Specifier Kind = (VEMCExpr::Specifier)MO.getTargetFlags();
3232

3333
const MCExpr *Expr = MCSymbolRefExpr::create(Symbol, AP.OutContext);
3434
// Add offset iff MO is not jump table info or machine basic block.

0 commit comments

Comments
 (0)