Skip to content

Commit d57b867

Browse files
committed
Revert "AArch64: Move AArch64MCExpr functions to AArch64MCAsmInfo"
This reverts commit 4ea616d. This change is causing buildbot failures on MacOS: - https://lab.llvm.org/buildbot/#/builders/190/builds/21510 - http://45.33.8.238/macm1/108620/step_10.txt
1 parent 329dfa1 commit d57b867

File tree

5 files changed

+112
-166
lines changed

5 files changed

+112
-166
lines changed

llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCAsmInfo.cpp

Lines changed: 0 additions & 138 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
#include "llvm/MC/MCContext.h"
1616
#include "llvm/MC/MCExpr.h"
1717
#include "llvm/MC/MCStreamer.h"
18-
#include "llvm/MC/MCValue.h"
1918
#include "llvm/Support/CommandLine.h"
2019
#include "llvm/TargetParser/Triple.h"
2120
using namespace llvm;
@@ -54,80 +53,6 @@ const MCAsmInfo::AtSpecifier MachOAtSpecifiers[] = {
5453
{AArch64MCExpr::M_TLVPPAGEOFF, "TLVPPAGEOFF"},
5554
};
5655

57-
StringRef AArch64::getSpecifierName(const MCSpecifierExpr &Expr) {
58-
// clang-format off
59-
switch (static_cast<uint32_t>(Expr.getSpecifier())) {
60-
case AArch64MCExpr::VK_CALL: return "";
61-
case AArch64MCExpr::VK_LO12: return ":lo12:";
62-
case AArch64MCExpr::VK_ABS_G3: return ":abs_g3:";
63-
case AArch64MCExpr::VK_ABS_G2: return ":abs_g2:";
64-
case AArch64MCExpr::VK_ABS_G2_S: return ":abs_g2_s:";
65-
case AArch64MCExpr::VK_ABS_G2_NC: return ":abs_g2_nc:";
66-
case AArch64MCExpr::VK_ABS_G1: return ":abs_g1:";
67-
case AArch64MCExpr::VK_ABS_G1_S: return ":abs_g1_s:";
68-
case AArch64MCExpr::VK_ABS_G1_NC: return ":abs_g1_nc:";
69-
case AArch64MCExpr::VK_ABS_G0: return ":abs_g0:";
70-
case AArch64MCExpr::VK_ABS_G0_S: return ":abs_g0_s:";
71-
case AArch64MCExpr::VK_ABS_G0_NC: return ":abs_g0_nc:";
72-
case AArch64MCExpr::VK_PREL_G3: return ":prel_g3:";
73-
case AArch64MCExpr::VK_PREL_G2: return ":prel_g2:";
74-
case AArch64MCExpr::VK_PREL_G2_NC: return ":prel_g2_nc:";
75-
case AArch64MCExpr::VK_PREL_G1: return ":prel_g1:";
76-
case AArch64MCExpr::VK_PREL_G1_NC: return ":prel_g1_nc:";
77-
case AArch64MCExpr::VK_PREL_G0: return ":prel_g0:";
78-
case AArch64MCExpr::VK_PREL_G0_NC: return ":prel_g0_nc:";
79-
case AArch64MCExpr::VK_DTPREL_G2: return ":dtprel_g2:";
80-
case AArch64MCExpr::VK_DTPREL_G1: return ":dtprel_g1:";
81-
case AArch64MCExpr::VK_DTPREL_G1_NC: return ":dtprel_g1_nc:";
82-
case AArch64MCExpr::VK_DTPREL_G0: return ":dtprel_g0:";
83-
case AArch64MCExpr::VK_DTPREL_G0_NC: return ":dtprel_g0_nc:";
84-
case AArch64MCExpr::VK_DTPREL_HI12: return ":dtprel_hi12:";
85-
case AArch64MCExpr::VK_DTPREL_LO12: return ":dtprel_lo12:";
86-
case AArch64MCExpr::VK_DTPREL_LO12_NC: return ":dtprel_lo12_nc:";
87-
case AArch64MCExpr::VK_TPREL_G2: return ":tprel_g2:";
88-
case AArch64MCExpr::VK_TPREL_G1: return ":tprel_g1:";
89-
case AArch64MCExpr::VK_TPREL_G1_NC: return ":tprel_g1_nc:";
90-
case AArch64MCExpr::VK_TPREL_G0: return ":tprel_g0:";
91-
case AArch64MCExpr::VK_TPREL_G0_NC: return ":tprel_g0_nc:";
92-
case AArch64MCExpr::VK_TPREL_HI12: return ":tprel_hi12:";
93-
case AArch64MCExpr::VK_TPREL_LO12: return ":tprel_lo12:";
94-
case AArch64MCExpr::VK_TPREL_LO12_NC: return ":tprel_lo12_nc:";
95-
case AArch64MCExpr::VK_TLSDESC_LO12: return ":tlsdesc_lo12:";
96-
case AArch64MCExpr::VK_TLSDESC_AUTH_LO12: return ":tlsdesc_auth_lo12:";
97-
case AArch64MCExpr::VK_ABS_PAGE: return "";
98-
case AArch64MCExpr::VK_ABS_PAGE_NC: return ":pg_hi21_nc:";
99-
case AArch64MCExpr::VK_GOT: return ":got:";
100-
case AArch64MCExpr::VK_GOT_PAGE: return ":got:";
101-
case AArch64MCExpr::VK_GOT_PAGE_LO15: return ":gotpage_lo15:";
102-
case AArch64MCExpr::VK_GOT_LO12: return ":got_lo12:";
103-
case AArch64MCExpr::VK_GOTTPREL: return ":gottprel:";
104-
case AArch64MCExpr::VK_GOTTPREL_PAGE: return ":gottprel:";
105-
case AArch64MCExpr::VK_GOTTPREL_LO12_NC: return ":gottprel_lo12:";
106-
case AArch64MCExpr::VK_GOTTPREL_G1: return ":gottprel_g1:";
107-
case AArch64MCExpr::VK_GOTTPREL_G0_NC: return ":gottprel_g0_nc:";
108-
case AArch64MCExpr::VK_TLSDESC: return "";
109-
case AArch64MCExpr::VK_TLSDESC_PAGE: return ":tlsdesc:";
110-
case AArch64MCExpr::VK_TLSDESC_AUTH: return "";
111-
case AArch64MCExpr::VK_TLSDESC_AUTH_PAGE: return ":tlsdesc_auth:";
112-
case AArch64MCExpr::VK_SECREL_LO12: return ":secrel_lo12:";
113-
case AArch64MCExpr::VK_SECREL_HI12: return ":secrel_hi12:";
114-
case AArch64MCExpr::VK_GOT_AUTH: return ":got_auth:";
115-
case AArch64MCExpr::VK_GOT_AUTH_PAGE: return ":got_auth:";
116-
case AArch64MCExpr::VK_GOT_AUTH_LO12: return ":got_auth_lo12:";
117-
default:
118-
llvm_unreachable("Invalid relocation specifier");
119-
}
120-
// clang-format on
121-
}
122-
123-
static bool evaluate(const MCSpecifierExpr &Expr, MCValue &Res,
124-
const MCAssembler *Asm) {
125-
if (!Expr.getSubExpr()->evaluateAsRelocatable(Res, Asm))
126-
return false;
127-
Res.setSpecifier(Expr.getSpecifier());
128-
return true;
129-
}
130-
13156
AArch64MCAsmInfoDarwin::AArch64MCAsmInfoDarwin(bool IsILP32) {
13257
// We prefer NEON instructions to be printed in the short, Apple-specific
13358
// form when targeting Darwin.
@@ -166,34 +91,6 @@ const MCExpr *AArch64MCAsmInfoDarwin::getExprForPersonalitySymbol(
16691
return MCBinaryExpr::createSub(Res, PC, Context);
16792
}
16893

169-
void AArch64AuthMCExpr::print(raw_ostream &OS, const MCAsmInfo *MAI) const {
170-
bool WrapSubExprInParens = !isa<MCSymbolRefExpr>(getSubExpr());
171-
if (WrapSubExprInParens)
172-
OS << '(';
173-
getSubExpr()->print(OS, MAI);
174-
if (WrapSubExprInParens)
175-
OS << ')';
176-
177-
OS << "@AUTH(" << AArch64PACKeyIDToString(Key) << ',' << Discriminator;
178-
if (hasAddressDiversity())
179-
OS << ",addr";
180-
OS << ')';
181-
}
182-
183-
void AArch64MCAsmInfoDarwin::printSpecifierExpr(
184-
raw_ostream &OS, const MCSpecifierExpr &Expr) const {
185-
if (auto *AE = dyn_cast<AArch64AuthMCExpr>(&Expr))
186-
return AE->print(OS, this);
187-
// FIXME: tryParseAdrLabel should not use VK_ABS for Mach-O
188-
assert(Expr.getSpecifier() == AArch64MCExpr::VK_ABS);
189-
printExpr(OS, *Expr.getSubExpr());
190-
}
191-
192-
bool AArch64MCAsmInfoDarwin::evaluateAsRelocatableImpl(
193-
const MCSpecifierExpr &Expr, MCValue &Res, const MCAssembler *Asm) const {
194-
return evaluate(Expr, Res, Asm);
195-
}
196-
19794
AArch64MCAsmInfoELF::AArch64MCAsmInfoELF(const Triple &T) {
19895
if (T.getArch() == Triple::aarch64_be)
19996
IsLittleEndian = false;
@@ -230,19 +127,6 @@ AArch64MCAsmInfoELF::AArch64MCAsmInfoELF(const Triple &T) {
230127
initializeVariantKinds(ELFAtSpecifiers);
231128
}
232129

233-
void AArch64MCAsmInfoELF::printSpecifierExpr(
234-
raw_ostream &OS, const MCSpecifierExpr &Expr) const {
235-
if (auto *AE = dyn_cast<AArch64AuthMCExpr>(&Expr))
236-
return AE->print(OS, this);
237-
OS << AArch64::getSpecifierName(Expr);
238-
printExpr(OS, *Expr.getSubExpr());
239-
}
240-
241-
bool AArch64MCAsmInfoELF::evaluateAsRelocatableImpl(
242-
const MCSpecifierExpr &Expr, MCValue &Res, const MCAssembler *Asm) const {
243-
return evaluate(Expr, Res, Asm);
244-
}
245-
246130
AArch64MCAsmInfoMicrosoftCOFF::AArch64MCAsmInfoMicrosoftCOFF() {
247131
PrivateGlobalPrefix = ".L";
248132
PrivateLabelPrefix = ".L";
@@ -262,17 +146,6 @@ AArch64MCAsmInfoMicrosoftCOFF::AArch64MCAsmInfoMicrosoftCOFF() {
262146
initializeVariantKinds(COFFAtSpecifiers);
263147
}
264148

265-
void AArch64MCAsmInfoMicrosoftCOFF::printSpecifierExpr(
266-
raw_ostream &OS, const MCSpecifierExpr &Expr) const {
267-
OS << AArch64::getSpecifierName(Expr);
268-
printExpr(OS, *Expr.getSubExpr());
269-
}
270-
271-
bool AArch64MCAsmInfoMicrosoftCOFF::evaluateAsRelocatableImpl(
272-
const MCSpecifierExpr &Expr, MCValue &Res, const MCAssembler *Asm) const {
273-
return evaluate(Expr, Res, Asm);
274-
}
275-
276149
AArch64MCAsmInfoGNUCOFF::AArch64MCAsmInfoGNUCOFF() {
277150
PrivateGlobalPrefix = ".L";
278151
PrivateLabelPrefix = ".L";
@@ -291,14 +164,3 @@ AArch64MCAsmInfoGNUCOFF::AArch64MCAsmInfoGNUCOFF() {
291164

292165
initializeVariantKinds(COFFAtSpecifiers);
293166
}
294-
295-
void AArch64MCAsmInfoGNUCOFF::printSpecifierExpr(
296-
raw_ostream &OS, const MCSpecifierExpr &Expr) const {
297-
OS << AArch64::getSpecifierName(Expr);
298-
printExpr(OS, *Expr.getSubExpr());
299-
}
300-
301-
bool AArch64MCAsmInfoGNUCOFF::evaluateAsRelocatableImpl(
302-
const MCSpecifierExpr &Expr, MCValue &Res, const MCAssembler *Asm) const {
303-
return evaluate(Expr, Res, Asm);
304-
}

llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCAsmInfo.h

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
#ifndef LLVM_LIB_TARGET_AARCH64_MCTARGETDESC_AARCH64MCASMINFO_H
1414
#define LLVM_LIB_TARGET_AARCH64_MCTARGETDESC_AARCH64MCASMINFO_H
1515

16-
#include "MCTargetDesc/AArch64MCExpr.h"
1716
#include "llvm/MC/MCAsmInfoCOFF.h"
1817
#include "llvm/MC/MCAsmInfoDarwin.h"
1918
#include "llvm/MC/MCAsmInfoELF.h"
@@ -27,42 +26,20 @@ struct AArch64MCAsmInfoDarwin : public MCAsmInfoDarwin {
2726
const MCExpr *
2827
getExprForPersonalitySymbol(const MCSymbol *Sym, unsigned Encoding,
2928
MCStreamer &Streamer) const override;
30-
void printSpecifierExpr(raw_ostream &OS,
31-
const MCSpecifierExpr &Expr) const override;
32-
bool evaluateAsRelocatableImpl(const MCSpecifierExpr &Expr, MCValue &Res,
33-
const MCAssembler *Asm) const override;
3429
};
3530

3631
struct AArch64MCAsmInfoELF : public MCAsmInfoELF {
3732
explicit AArch64MCAsmInfoELF(const Triple &T);
38-
void printSpecifierExpr(raw_ostream &OS,
39-
const MCSpecifierExpr &Expr) const override;
40-
bool evaluateAsRelocatableImpl(const MCSpecifierExpr &Expr, MCValue &Res,
41-
const MCAssembler *Asm) const override;
4233
};
4334

4435
struct AArch64MCAsmInfoMicrosoftCOFF : public MCAsmInfoMicrosoft {
4536
explicit AArch64MCAsmInfoMicrosoftCOFF();
46-
void printSpecifierExpr(raw_ostream &OS,
47-
const MCSpecifierExpr &Expr) const override;
48-
bool evaluateAsRelocatableImpl(const MCSpecifierExpr &Expr, MCValue &Res,
49-
const MCAssembler *Asm) const override;
5037
};
5138

5239
struct AArch64MCAsmInfoGNUCOFF : public MCAsmInfoGNUCOFF {
5340
explicit AArch64MCAsmInfoGNUCOFF();
54-
void printSpecifierExpr(raw_ostream &OS,
55-
const MCSpecifierExpr &Expr) const override;
56-
bool evaluateAsRelocatableImpl(const MCSpecifierExpr &Expr, MCValue &Res,
57-
const MCAssembler *Asm) const override;
5841
};
5942

60-
namespace AArch64 {
61-
/// Return the string representation of the ELF relocation specifier
62-
/// (e.g. ":got:", ":lo12:").
63-
StringRef getSpecifierName(const MCSpecifierExpr &Expr);
64-
} // namespace AArch64
65-
6643
} // namespace llvm
6744

6845
#endif

llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCExpr.cpp

Lines changed: 96 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,100 @@
1212
//===----------------------------------------------------------------------===//
1313

1414
#include "AArch64MCExpr.h"
15-
#include "AArch64MCAsmInfo.h"
1615
#include "llvm/MC/MCContext.h"
1716
#include "llvm/MC/MCStreamer.h"
17+
#include "llvm/MC/MCValue.h"
1818
#include "llvm/Support/Casting.h"
1919
#include "llvm/Support/ErrorHandling.h"
2020

2121
using namespace llvm;
2222

23+
#define DEBUG_TYPE "aarch64symbolrefexpr"
24+
2325
const AArch64MCExpr *AArch64MCExpr::create(const MCExpr *Expr, Specifier S,
2426
MCContext &Ctx) {
2527
return new (Ctx) AArch64MCExpr(Expr, S);
2628
}
2729

30+
StringRef AArch64MCExpr::getSpecifierName() const {
31+
// clang-format off
32+
switch (static_cast<uint32_t>(getSpecifier())) {
33+
case VK_CALL: return "";
34+
case VK_LO12: return ":lo12:";
35+
case VK_ABS_G3: return ":abs_g3:";
36+
case VK_ABS_G2: return ":abs_g2:";
37+
case VK_ABS_G2_S: return ":abs_g2_s:";
38+
case VK_ABS_G2_NC: return ":abs_g2_nc:";
39+
case VK_ABS_G1: return ":abs_g1:";
40+
case VK_ABS_G1_S: return ":abs_g1_s:";
41+
case VK_ABS_G1_NC: return ":abs_g1_nc:";
42+
case VK_ABS_G0: return ":abs_g0:";
43+
case VK_ABS_G0_S: return ":abs_g0_s:";
44+
case VK_ABS_G0_NC: return ":abs_g0_nc:";
45+
case VK_PREL_G3: return ":prel_g3:";
46+
case VK_PREL_G2: return ":prel_g2:";
47+
case VK_PREL_G2_NC: return ":prel_g2_nc:";
48+
case VK_PREL_G1: return ":prel_g1:";
49+
case VK_PREL_G1_NC: return ":prel_g1_nc:";
50+
case VK_PREL_G0: return ":prel_g0:";
51+
case VK_PREL_G0_NC: return ":prel_g0_nc:";
52+
case VK_DTPREL_G2: return ":dtprel_g2:";
53+
case VK_DTPREL_G1: return ":dtprel_g1:";
54+
case VK_DTPREL_G1_NC: return ":dtprel_g1_nc:";
55+
case VK_DTPREL_G0: return ":dtprel_g0:";
56+
case VK_DTPREL_G0_NC: return ":dtprel_g0_nc:";
57+
case VK_DTPREL_HI12: return ":dtprel_hi12:";
58+
case VK_DTPREL_LO12: return ":dtprel_lo12:";
59+
case VK_DTPREL_LO12_NC: return ":dtprel_lo12_nc:";
60+
case VK_TPREL_G2: return ":tprel_g2:";
61+
case VK_TPREL_G1: return ":tprel_g1:";
62+
case VK_TPREL_G1_NC: return ":tprel_g1_nc:";
63+
case VK_TPREL_G0: return ":tprel_g0:";
64+
case VK_TPREL_G0_NC: return ":tprel_g0_nc:";
65+
case VK_TPREL_HI12: return ":tprel_hi12:";
66+
case VK_TPREL_LO12: return ":tprel_lo12:";
67+
case VK_TPREL_LO12_NC: return ":tprel_lo12_nc:";
68+
case VK_TLSDESC_LO12: return ":tlsdesc_lo12:";
69+
case VK_TLSDESC_AUTH_LO12: return ":tlsdesc_auth_lo12:";
70+
case VK_ABS_PAGE: return "";
71+
case VK_ABS_PAGE_NC: return ":pg_hi21_nc:";
72+
case VK_GOT: return ":got:";
73+
case VK_GOT_PAGE: return ":got:";
74+
case VK_GOT_PAGE_LO15: return ":gotpage_lo15:";
75+
case VK_GOT_LO12: return ":got_lo12:";
76+
case VK_GOTTPREL: return ":gottprel:";
77+
case VK_GOTTPREL_PAGE: return ":gottprel:";
78+
case VK_GOTTPREL_LO12_NC: return ":gottprel_lo12:";
79+
case VK_GOTTPREL_G1: return ":gottprel_g1:";
80+
case VK_GOTTPREL_G0_NC: return ":gottprel_g0_nc:";
81+
case VK_TLSDESC: return "";
82+
case VK_TLSDESC_PAGE: return ":tlsdesc:";
83+
case VK_TLSDESC_AUTH: return "";
84+
case VK_TLSDESC_AUTH_PAGE: return ":tlsdesc_auth:";
85+
case VK_SECREL_LO12: return ":secrel_lo12:";
86+
case VK_SECREL_HI12: return ":secrel_hi12:";
87+
case VK_GOT_AUTH: return ":got_auth:";
88+
case VK_GOT_AUTH_PAGE: return ":got_auth:";
89+
case VK_GOT_AUTH_LO12: return ":got_auth_lo12:";
90+
default:
91+
llvm_unreachable("Invalid relocation specifier");
92+
}
93+
// clang-format on
94+
}
95+
96+
void AArch64MCExpr::printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const {
97+
OS << getSpecifierName();
98+
Expr->print(OS, MAI);
99+
}
100+
101+
bool AArch64MCExpr::evaluateAsRelocatableImpl(MCValue &Res,
102+
const MCAssembler *Asm) const {
103+
if (!getSubExpr()->evaluateAsRelocatable(Res, Asm))
104+
return false;
105+
Res.setSpecifier(getSpecifier());
106+
return true;
107+
}
108+
28109
const AArch64AuthMCExpr *AArch64AuthMCExpr::create(const MCExpr *Expr,
29110
uint16_t Discriminator,
30111
AArch64PACKey::ID Key,
@@ -33,3 +114,17 @@ const AArch64AuthMCExpr *AArch64AuthMCExpr::create(const MCExpr *Expr,
33114
return new (Ctx)
34115
AArch64AuthMCExpr(Expr, Discriminator, Key, HasAddressDiversity);
35116
}
117+
118+
void AArch64AuthMCExpr::printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const {
119+
bool WrapSubExprInParens = !isa<MCSymbolRefExpr>(getSubExpr());
120+
if (WrapSubExprInParens)
121+
OS << '(';
122+
getSubExpr()->print(OS, MAI);
123+
if (WrapSubExprInParens)
124+
OS << ')';
125+
126+
OS << "@AUTH(" << AArch64PACKeyIDToString(Key) << ',' << Discriminator;
127+
if (hasAddressDiversity())
128+
OS << ",addr";
129+
OS << ')';
130+
}

llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCExpr.h

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,8 @@ class AArch64MCExpr : public MCSpecifierExpr {
147147
public:
148148
static const AArch64MCExpr *create(const MCExpr *Expr, Specifier,
149149
MCContext &Ctx);
150+
/// @name VariantKind information extractors.
151+
/// @{
150152

151153
static Specifier getSymbolLoc(Specifier S) {
152154
return static_cast<Specifier>(S & VK_SymLocBits);
@@ -157,6 +159,16 @@ class AArch64MCExpr : public MCSpecifierExpr {
157159
}
158160

159161
static bool isNotChecked(Specifier S) { return S & VK_NC; }
162+
163+
/// @}
164+
165+
/// Return the string representation of the ELF relocation specifier
166+
/// (e.g. ":got:", ":lo12:").
167+
StringRef getSpecifierName() const;
168+
169+
void printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const override;
170+
bool evaluateAsRelocatableImpl(MCValue &Res,
171+
const MCAssembler *Asm) const override;
160172
};
161173

162174
class AArch64AuthMCExpr final : public AArch64MCExpr {
@@ -177,7 +189,7 @@ class AArch64AuthMCExpr final : public AArch64MCExpr {
177189
uint16_t getDiscriminator() const { return Discriminator; }
178190
bool hasAddressDiversity() const { return getSpecifier() == VK_AUTHADDR; }
179191

180-
void print(raw_ostream &OS, const MCAsmInfo *MAI) const;
192+
void printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const override;
181193

182194
static bool classof(const MCExpr *E) {
183195
return isa<AArch64MCExpr>(E) && classof(cast<AArch64MCExpr>(E));

0 commit comments

Comments
 (0)