Skip to content

Commit 5676e76

Browse files
MaskRayfrederik-h
authored andcommitted
Move VE-specific MCSymbolRefExpr::VariantKind to VEMCExpr
Close llvm#130003
1 parent 40f646c commit 5676e76

File tree

8 files changed

+164
-222
lines changed

8 files changed

+164
-222
lines changed

llvm/include/llvm/MC/MCExpr.h

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -283,21 +283,6 @@ class MCSymbolRefExpr : public MCExpr {
283283
VK_AMDGPU_ABS32_LO, // symbol@abs32@lo
284284
VK_AMDGPU_ABS32_HI, // symbol@abs32@hi
285285

286-
VK_VE_HI32, // symbol@hi
287-
VK_VE_LO32, // symbol@lo
288-
VK_VE_PC_HI32, // symbol@pc_hi
289-
VK_VE_PC_LO32, // symbol@pc_lo
290-
VK_VE_GOT_HI32, // symbol@got_hi
291-
VK_VE_GOT_LO32, // symbol@got_lo
292-
VK_VE_GOTOFF_HI32, // symbol@gotoff_hi
293-
VK_VE_GOTOFF_LO32, // symbol@gotoff_lo
294-
VK_VE_PLT_HI32, // symbol@plt_hi
295-
VK_VE_PLT_LO32, // symbol@plt_lo
296-
VK_VE_TLS_GD_HI32, // symbol@tls_gd_hi
297-
VK_VE_TLS_GD_LO32, // symbol@tls_gd_lo
298-
VK_VE_TPOFF_HI32, // symbol@tpoff_hi
299-
VK_VE_TPOFF_LO32, // symbol@tpoff_lo
300-
301286
VK_TPREL,
302287
VK_DTPREL
303288
};

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

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1036,7 +1036,7 @@ bool VEAsmParser::parseLiteralValues(unsigned Size, SMLoc L) {
10361036
}
10371037

10381038
/// Extract \code @lo32/@hi32/etc \endcode modifier from expression.
1039-
/// Recursively scan the expression and check for VK_VE_HI32/LO32/etc
1039+
/// Recursively scan the expression and check for VK_HI32/LO32/etc
10401040
/// symbol variants. If all symbols with modifier use the same
10411041
/// variant, return the corresponding VEMCExpr::VariantKind,
10421042
/// and a modified expression using the default symbol variant.
@@ -1045,7 +1045,7 @@ const MCExpr *
10451045
VEAsmParser::extractModifierFromExpr(const MCExpr *E,
10461046
VEMCExpr::VariantKind &Variant) {
10471047
MCContext &Context = getParser().getContext();
1048-
Variant = VEMCExpr::VK_VE_None;
1048+
Variant = VEMCExpr::VK_None;
10491049

10501050
switch (E->getKind()) {
10511051
case MCExpr::Target:
@@ -1055,52 +1055,52 @@ VEAsmParser::extractModifierFromExpr(const MCExpr *E,
10551055
case MCExpr::SymbolRef: {
10561056
const MCSymbolRefExpr *SRE = cast<MCSymbolRefExpr>(E);
10571057

1058-
switch (SRE->getKind()) {
1059-
case MCSymbolRefExpr::VK_None:
1060-
// Use VK_VE_REFLONG to a symbol without modifiers.
1061-
Variant = VEMCExpr::VK_VE_REFLONG;
1058+
switch (getVariantKind(SRE)) {
1059+
case VEMCExpr::VK_None:
1060+
// Use VK_REFLONG to a symbol without modifiers.
1061+
Variant = VEMCExpr::VK_REFLONG;
10621062
break;
1063-
case MCSymbolRefExpr::VK_VE_HI32:
1064-
Variant = VEMCExpr::VK_VE_HI32;
1063+
case VEMCExpr::VK_HI32:
1064+
Variant = VEMCExpr::VK_HI32;
10651065
break;
1066-
case MCSymbolRefExpr::VK_VE_LO32:
1067-
Variant = VEMCExpr::VK_VE_LO32;
1066+
case VEMCExpr::VK_LO32:
1067+
Variant = VEMCExpr::VK_LO32;
10681068
break;
1069-
case MCSymbolRefExpr::VK_VE_PC_HI32:
1070-
Variant = VEMCExpr::VK_VE_PC_HI32;
1069+
case VEMCExpr::VK_PC_HI32:
1070+
Variant = VEMCExpr::VK_PC_HI32;
10711071
break;
1072-
case MCSymbolRefExpr::VK_VE_PC_LO32:
1073-
Variant = VEMCExpr::VK_VE_PC_LO32;
1072+
case VEMCExpr::VK_PC_LO32:
1073+
Variant = VEMCExpr::VK_PC_LO32;
10741074
break;
1075-
case MCSymbolRefExpr::VK_VE_GOT_HI32:
1076-
Variant = VEMCExpr::VK_VE_GOT_HI32;
1075+
case VEMCExpr::VK_GOT_HI32:
1076+
Variant = VEMCExpr::VK_GOT_HI32;
10771077
break;
1078-
case MCSymbolRefExpr::VK_VE_GOT_LO32:
1079-
Variant = VEMCExpr::VK_VE_GOT_LO32;
1078+
case VEMCExpr::VK_GOT_LO32:
1079+
Variant = VEMCExpr::VK_GOT_LO32;
10801080
break;
1081-
case MCSymbolRefExpr::VK_VE_GOTOFF_HI32:
1082-
Variant = VEMCExpr::VK_VE_GOTOFF_HI32;
1081+
case VEMCExpr::VK_GOTOFF_HI32:
1082+
Variant = VEMCExpr::VK_GOTOFF_HI32;
10831083
break;
1084-
case MCSymbolRefExpr::VK_VE_GOTOFF_LO32:
1085-
Variant = VEMCExpr::VK_VE_GOTOFF_LO32;
1084+
case VEMCExpr::VK_GOTOFF_LO32:
1085+
Variant = VEMCExpr::VK_GOTOFF_LO32;
10861086
break;
1087-
case MCSymbolRefExpr::VK_VE_PLT_HI32:
1088-
Variant = VEMCExpr::VK_VE_PLT_HI32;
1087+
case VEMCExpr::VK_PLT_HI32:
1088+
Variant = VEMCExpr::VK_PLT_HI32;
10891089
break;
1090-
case MCSymbolRefExpr::VK_VE_PLT_LO32:
1091-
Variant = VEMCExpr::VK_VE_PLT_LO32;
1090+
case VEMCExpr::VK_PLT_LO32:
1091+
Variant = VEMCExpr::VK_PLT_LO32;
10921092
break;
1093-
case MCSymbolRefExpr::VK_VE_TLS_GD_HI32:
1094-
Variant = VEMCExpr::VK_VE_TLS_GD_HI32;
1093+
case VEMCExpr::VK_TLS_GD_HI32:
1094+
Variant = VEMCExpr::VK_TLS_GD_HI32;
10951095
break;
1096-
case MCSymbolRefExpr::VK_VE_TLS_GD_LO32:
1097-
Variant = VEMCExpr::VK_VE_TLS_GD_LO32;
1096+
case VEMCExpr::VK_TLS_GD_LO32:
1097+
Variant = VEMCExpr::VK_TLS_GD_LO32;
10981098
break;
1099-
case MCSymbolRefExpr::VK_VE_TPOFF_HI32:
1100-
Variant = VEMCExpr::VK_VE_TPOFF_HI32;
1099+
case VEMCExpr::VK_TPOFF_HI32:
1100+
Variant = VEMCExpr::VK_TPOFF_HI32;
11011101
break;
1102-
case MCSymbolRefExpr::VK_VE_TPOFF_LO32:
1103-
Variant = VEMCExpr::VK_VE_TPOFF_LO32;
1102+
case VEMCExpr::VK_TPOFF_LO32:
1103+
Variant = VEMCExpr::VK_TPOFF_LO32;
11041104
break;
11051105
default:
11061106
return nullptr;
@@ -1131,9 +1131,9 @@ VEAsmParser::extractModifierFromExpr(const MCExpr *E,
11311131
if (!RHS)
11321132
RHS = BE->getRHS();
11331133

1134-
if (LHSVariant == VEMCExpr::VK_VE_None)
1134+
if (LHSVariant == VEMCExpr::VK_None)
11351135
Variant = RHSVariant;
1136-
else if (RHSVariant == VEMCExpr::VK_VE_None)
1136+
else if (RHSVariant == VEMCExpr::VK_None)
11371137
Variant = LHSVariant;
11381138
else if (LHSVariant == RHSVariant)
11391139
Variant = LHSVariant;

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_VE_PC_LO32)
43+
if (SExpr->getKind() == VEMCExpr::VK_PC_LO32)
4444
return ELF::R_VE_PC_LO32;
4545
}
4646

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

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,27 +11,28 @@
1111
//===----------------------------------------------------------------------===//
1212

1313
#include "VEMCAsmInfo.h"
14+
#include "VEMCExpr.h"
1415
#include "llvm/MC/MCExpr.h"
1516
#include "llvm/MC/MCStreamer.h"
1617
#include "llvm/TargetParser/Triple.h"
1718

1819
using namespace llvm;
1920

2021
const MCAsmInfo::VariantKindDesc variantKindDescs[] = {
21-
{MCSymbolRefExpr::VK_VE_HI32, "hi"},
22-
{MCSymbolRefExpr::VK_VE_LO32, "lo"},
23-
{MCSymbolRefExpr::VK_VE_PC_HI32, "pc_hi"},
24-
{MCSymbolRefExpr::VK_VE_PC_LO32, "pc_lo"},
25-
{MCSymbolRefExpr::VK_VE_GOT_HI32, "got_hi"},
26-
{MCSymbolRefExpr::VK_VE_GOT_LO32, "got_lo"},
27-
{MCSymbolRefExpr::VK_VE_GOTOFF_HI32, "gotoff_hi"},
28-
{MCSymbolRefExpr::VK_VE_GOTOFF_LO32, "gotoff_lo"},
29-
{MCSymbolRefExpr::VK_VE_PLT_HI32, "plt_hi"},
30-
{MCSymbolRefExpr::VK_VE_PLT_LO32, "plt_lo"},
31-
{MCSymbolRefExpr::VK_VE_TLS_GD_HI32, "tls_gd_hi"},
32-
{MCSymbolRefExpr::VK_VE_TLS_GD_LO32, "tls_gd_lo"},
33-
{MCSymbolRefExpr::VK_VE_TPOFF_HI32, "tpoff_hi"},
34-
{MCSymbolRefExpr::VK_VE_TPOFF_LO32, "tpoff_lo"},
22+
{VEMCExpr::VK_HI32, "hi"},
23+
{VEMCExpr::VK_LO32, "lo"},
24+
{VEMCExpr::VK_PC_HI32, "pc_hi"},
25+
{VEMCExpr::VK_PC_LO32, "pc_lo"},
26+
{VEMCExpr::VK_GOT_HI32, "got_hi"},
27+
{VEMCExpr::VK_GOT_LO32, "got_lo"},
28+
{VEMCExpr::VK_GOTOFF_HI32, "gotoff_hi"},
29+
{VEMCExpr::VK_GOTOFF_LO32, "gotoff_lo"},
30+
{VEMCExpr::VK_PLT_HI32, "plt_hi"},
31+
{VEMCExpr::VK_PLT_LO32, "plt_lo"},
32+
{VEMCExpr::VK_TLS_GD_HI32, "tls_gd_hi"},
33+
{VEMCExpr::VK_TLS_GD_LO32, "tls_gd_lo"},
34+
{VEMCExpr::VK_TPOFF_HI32, "tpoff_hi"},
35+
{VEMCExpr::VK_TPOFF_LO32, "tpoff_lo"},
3536
};
3637

3738
void VEELFMCAsmInfo::anchor() {}

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

Lines changed: 53 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
#include "VEMCExpr.h"
1515
#include "llvm/BinaryFormat/ELF.h"
16+
#include "llvm/MC/MCAsmInfo.h"
1617
#include "llvm/MC/MCAssembler.h"
1718
#include "llvm/MC/MCContext.h"
1819
#include "llvm/MC/MCObjectStreamer.h"
@@ -38,137 +39,88 @@ void VEMCExpr::printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const {
3839

3940
if (closeParen)
4041
OS << ')';
41-
printVariantKindSuffix(OS, Kind);
42+
if (Kind != VK_None && Kind != VK_REFLONG)
43+
OS << '@' << MAI->getVariantKindName(Kind);
4244
}
4345

4446
bool VEMCExpr::printVariantKind(raw_ostream &OS, VariantKind Kind) {
4547
switch (Kind) {
46-
case VK_VE_None:
47-
case VK_VE_REFLONG:
48+
case VK_None:
49+
case VK_REFLONG:
4850
return false;
4951

50-
case VK_VE_HI32:
51-
case VK_VE_LO32:
52-
case VK_VE_PC_HI32:
53-
case VK_VE_PC_LO32:
54-
case VK_VE_GOT_HI32:
55-
case VK_VE_GOT_LO32:
56-
case VK_VE_GOTOFF_HI32:
57-
case VK_VE_GOTOFF_LO32:
58-
case VK_VE_PLT_HI32:
59-
case VK_VE_PLT_LO32:
60-
case VK_VE_TLS_GD_HI32:
61-
case VK_VE_TLS_GD_LO32:
62-
case VK_VE_TPOFF_HI32:
63-
case VK_VE_TPOFF_LO32:
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:
6466
// Use suffix for these variant kinds
6567
return false;
6668
}
6769
return true;
6870
}
6971

70-
void VEMCExpr::printVariantKindSuffix(raw_ostream &OS, VariantKind Kind) {
71-
switch (Kind) {
72-
case VK_VE_None:
73-
case VK_VE_REFLONG:
74-
break;
75-
case VK_VE_HI32:
76-
OS << "@hi";
77-
break;
78-
case VK_VE_LO32:
79-
OS << "@lo";
80-
break;
81-
case VK_VE_PC_HI32:
82-
OS << "@pc_hi";
83-
break;
84-
case VK_VE_PC_LO32:
85-
OS << "@pc_lo";
86-
break;
87-
case VK_VE_GOT_HI32:
88-
OS << "@got_hi";
89-
break;
90-
case VK_VE_GOT_LO32:
91-
OS << "@got_lo";
92-
break;
93-
case VK_VE_GOTOFF_HI32:
94-
OS << "@gotoff_hi";
95-
break;
96-
case VK_VE_GOTOFF_LO32:
97-
OS << "@gotoff_lo";
98-
break;
99-
case VK_VE_PLT_HI32:
100-
OS << "@plt_hi";
101-
break;
102-
case VK_VE_PLT_LO32:
103-
OS << "@plt_lo";
104-
break;
105-
case VK_VE_TLS_GD_HI32:
106-
OS << "@tls_gd_hi";
107-
break;
108-
case VK_VE_TLS_GD_LO32:
109-
OS << "@tls_gd_lo";
110-
break;
111-
case VK_VE_TPOFF_HI32:
112-
OS << "@tpoff_hi";
113-
break;
114-
case VK_VE_TPOFF_LO32:
115-
OS << "@tpoff_lo";
116-
break;
117-
}
118-
}
119-
12072
VEMCExpr::VariantKind VEMCExpr::parseVariantKind(StringRef name) {
12173
return StringSwitch<VEMCExpr::VariantKind>(name)
122-
.Case("hi", VK_VE_HI32)
123-
.Case("lo", VK_VE_LO32)
124-
.Case("pc_hi", VK_VE_PC_HI32)
125-
.Case("pc_lo", VK_VE_PC_LO32)
126-
.Case("got_hi", VK_VE_GOT_HI32)
127-
.Case("got_lo", VK_VE_GOT_LO32)
128-
.Case("gotoff_hi", VK_VE_GOTOFF_HI32)
129-
.Case("gotoff_lo", VK_VE_GOTOFF_LO32)
130-
.Case("plt_hi", VK_VE_PLT_HI32)
131-
.Case("plt_lo", VK_VE_PLT_LO32)
132-
.Case("tls_gd_hi", VK_VE_TLS_GD_HI32)
133-
.Case("tls_gd_lo", VK_VE_TLS_GD_LO32)
134-
.Case("tpoff_hi", VK_VE_TPOFF_HI32)
135-
.Case("tpoff_lo", VK_VE_TPOFF_LO32)
136-
.Default(VK_VE_None);
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);
13789
}
13890

13991
VE::Fixups VEMCExpr::getFixupKind(VEMCExpr::VariantKind Kind) {
14092
switch (Kind) {
14193
default:
14294
llvm_unreachable("Unhandled VEMCExpr::VariantKind");
143-
case VK_VE_REFLONG:
95+
case VK_REFLONG:
14496
return VE::fixup_ve_reflong;
145-
case VK_VE_HI32:
97+
case VK_HI32:
14698
return VE::fixup_ve_hi32;
147-
case VK_VE_LO32:
99+
case VK_LO32:
148100
return VE::fixup_ve_lo32;
149-
case VK_VE_PC_HI32:
101+
case VK_PC_HI32:
150102
return VE::fixup_ve_pc_hi32;
151-
case VK_VE_PC_LO32:
103+
case VK_PC_LO32:
152104
return VE::fixup_ve_pc_lo32;
153-
case VK_VE_GOT_HI32:
105+
case VK_GOT_HI32:
154106
return VE::fixup_ve_got_hi32;
155-
case VK_VE_GOT_LO32:
107+
case VK_GOT_LO32:
156108
return VE::fixup_ve_got_lo32;
157-
case VK_VE_GOTOFF_HI32:
109+
case VK_GOTOFF_HI32:
158110
return VE::fixup_ve_gotoff_hi32;
159-
case VK_VE_GOTOFF_LO32:
111+
case VK_GOTOFF_LO32:
160112
return VE::fixup_ve_gotoff_lo32;
161-
case VK_VE_PLT_HI32:
113+
case VK_PLT_HI32:
162114
return VE::fixup_ve_plt_hi32;
163-
case VK_VE_PLT_LO32:
115+
case VK_PLT_LO32:
164116
return VE::fixup_ve_plt_lo32;
165-
case VK_VE_TLS_GD_HI32:
117+
case VK_TLS_GD_HI32:
166118
return VE::fixup_ve_tls_gd_hi32;
167-
case VK_VE_TLS_GD_LO32:
119+
case VK_TLS_GD_LO32:
168120
return VE::fixup_ve_tls_gd_lo32;
169-
case VK_VE_TPOFF_HI32:
121+
case VK_TPOFF_HI32:
170122
return VE::fixup_ve_tpoff_hi32;
171-
case VK_VE_TPOFF_LO32:
123+
case VK_TPOFF_LO32:
172124
return VE::fixup_ve_tpoff_lo32;
173125
}
174126
}
@@ -222,10 +174,10 @@ void VEMCExpr::fixELFSymbolsInTLSFixups(MCAssembler &Asm) const {
222174
switch (getKind()) {
223175
default:
224176
return;
225-
case VK_VE_TLS_GD_HI32:
226-
case VK_VE_TLS_GD_LO32:
227-
case VK_VE_TPOFF_HI32:
228-
case VK_VE_TPOFF_LO32:
177+
case VK_TLS_GD_HI32:
178+
case VK_TLS_GD_LO32:
179+
case VK_TPOFF_HI32:
180+
case VK_TPOFF_LO32:
229181
break;
230182
}
231183
fixELFSymbolsInTLSFixupsImpl(getSubExpr(), Asm);

0 commit comments

Comments
 (0)