Skip to content

Commit 1edefc3

Browse files
committed
Move ARM-specific MCSymbolRefExpr::VariantKind to ARMMCExpr::Specifier
Similar to previous migration done for other targets (PowerPC, X86, etc). Note: ARMELFObjectWriter::needsRelocateWithSymbol is conservative and already includes most specifiers.
1 parent 4b41799 commit 1edefc3

File tree

11 files changed

+141
-134
lines changed

11 files changed

+141
-134
lines changed

llvm/include/llvm/MC/MCExpr.h

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -220,21 +220,6 @@ class MCSymbolRefExpr : public MCExpr {
220220
VK_GOTPAGEOFF,
221221
VK_SECREL,
222222
VK_WEAKREF, // The link between the symbols in .weakref foo, bar
223-
VK_FUNCDESC,
224-
VK_GOTFUNCDESC,
225-
VK_GOTOFFFUNCDESC,
226-
VK_TLSGD_FDPIC,
227-
VK_TLSLDM_FDPIC,
228-
VK_GOTTPOFF_FDPIC,
229-
230-
VK_ARM_NONE,
231-
VK_ARM_GOT_PREL,
232-
VK_ARM_TARGET1,
233-
VK_ARM_TARGET2,
234-
VK_ARM_PREL31,
235-
VK_ARM_SBREL, // symbol(sbrel)
236-
VK_ARM_TLSLDO, // symbol(tlsldo)
237-
VK_ARM_TLSDESCSEQ,
238223

239224
VK_COFF_IMGREL32, // symbol@imgrel (image-relative)
240225

llvm/lib/Target/ARM/ARMAsmPrinter.cpp

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -90,12 +90,10 @@ void ARMAsmPrinter::emitXXStructor(const DataLayout &DL, const Constant *CV) {
9090
const GlobalValue *GV = dyn_cast<GlobalValue>(CV->stripPointerCasts());
9191
assert(GV && "C++ constructor pointer was not a GlobalValue!");
9292

93-
const MCExpr *E = MCSymbolRefExpr::create(GetARMGVSymbol(GV,
94-
ARMII::MO_NO_FLAG),
95-
(Subtarget->isTargetELF()
96-
? MCSymbolRefExpr::VK_ARM_TARGET1
97-
: MCSymbolRefExpr::VK_None),
98-
OutContext);
93+
const MCExpr *E = MCSymbolRefExpr::create(
94+
GetARMGVSymbol(GV, ARMII::MO_NO_FLAG),
95+
(Subtarget->isTargetELF() ? ARMMCExpr::VK_TARGET1 : ARMMCExpr::VK_None),
96+
OutContext);
9997

10098
OutStreamer->emitValue(E, Size);
10199
}
@@ -835,21 +833,20 @@ static MCSymbol *getPICLabel(StringRef Prefix, unsigned FunctionNumber,
835833
return Label;
836834
}
837835

838-
static MCSymbolRefExpr::VariantKind
839-
getModifierVariantKind(ARMCP::ARMCPModifier Modifier) {
836+
static uint8_t getModifierSpecifier(ARMCP::ARMCPModifier Modifier) {
840837
switch (Modifier) {
841838
case ARMCP::no_modifier:
842-
return MCSymbolRefExpr::VK_None;
839+
return ARMMCExpr::VK_None;
843840
case ARMCP::TLSGD:
844-
return MCSymbolRefExpr::VK_TLSGD;
841+
return ARMMCExpr::VK_TLSGD;
845842
case ARMCP::TPOFF:
846-
return MCSymbolRefExpr::VK_TPOFF;
843+
return ARMMCExpr::VK_TPOFF;
847844
case ARMCP::GOTTPOFF:
848-
return MCSymbolRefExpr::VK_GOTTPOFF;
845+
return ARMMCExpr::VK_GOTTPOFF;
849846
case ARMCP::SBREL:
850-
return MCSymbolRefExpr::VK_ARM_SBREL;
847+
return ARMMCExpr::VK_SBREL;
851848
case ARMCP::GOT_PREL:
852-
return MCSymbolRefExpr::VK_ARM_GOT_PREL;
849+
return ARMMCExpr::VK_GOT_PREL;
853850
case ARMCP::SECREL:
854851
return MCSymbolRefExpr::VK_SECREL;
855852
}
@@ -964,9 +961,8 @@ void ARMAsmPrinter::emitMachineConstantPoolValue(
964961
}
965962

966963
// Create an MCSymbol for the reference.
967-
const MCExpr *Expr =
968-
MCSymbolRefExpr::create(MCSym, getModifierVariantKind(ACPV->getModifier()),
969-
OutContext);
964+
const MCExpr *Expr = MCSymbolRefExpr::create(
965+
MCSym, getModifierSpecifier(ACPV->getModifier()), OutContext);
970966

971967
if (ACPV->getPCAdjustment()) {
972968
MCSymbol *PCLabel =

llvm/lib/Target/ARM/ARMMCInstLower.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,9 @@ using namespace llvm;
3737

3838
MCOperand ARMAsmPrinter::GetSymbolRef(const MachineOperand &MO,
3939
const MCSymbol *Symbol) {
40-
MCSymbolRefExpr::VariantKind Specifier = MCSymbolRefExpr::VK_None;
40+
auto Specifier = ARMMCExpr::VK_None;
4141
if (MO.getTargetFlags() & ARMII::MO_SBREL)
42-
Specifier = MCSymbolRefExpr::VK_ARM_SBREL;
42+
Specifier = ARMMCExpr::VK_SBREL;
4343

4444
const MCExpr *Expr = MCSymbolRefExpr::create(Symbol, Specifier, OutContext);
4545
switch (MO.getTargetFlags() & ARMII::MO_OPTION_MASK) {

llvm/lib/Target/ARM/ARMTargetObjectFile.cpp

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include "ARMTargetObjectFile.h"
1010
#include "ARMSubtarget.h"
1111
#include "ARMTargetMachine.h"
12+
#include "MCTargetDesc/ARMMCExpr.h"
1213
#include "llvm/BinaryFormat/Dwarf.h"
1314
#include "llvm/BinaryFormat/ELF.h"
1415
#include "llvm/MC/MCAsmInfo.h"
@@ -29,7 +30,7 @@ using namespace dwarf;
2930
//===----------------------------------------------------------------------===//
3031

3132
ARMElfTargetObjectFile::ARMElfTargetObjectFile() {
32-
PLTRelativeSpecifier = MCSymbolRefExpr::VK_ARM_PREL31;
33+
PLTRelativeSpecifier = ARMMCExpr::VK_PREL31;
3334
SupportIndirectSymViaGOTPCRel = true;
3435
}
3536

@@ -66,16 +67,15 @@ const MCExpr *ARMElfTargetObjectFile::getIndirectSymViaGOTPCRel(
6667
const GlobalValue *GV, const MCSymbol *Sym, const MCValue &MV,
6768
int64_t Offset, MachineModuleInfo *MMI, MCStreamer &Streamer) const {
6869
int64_t FinalOffset = Offset + MV.getConstant();
69-
const MCExpr *Res = MCSymbolRefExpr::create(
70-
Sym, MCSymbolRefExpr::VK_ARM_GOT_PREL, getContext());
70+
const MCExpr *Res =
71+
MCSymbolRefExpr::create(Sym, ARMMCExpr::VK_GOT_PREL, getContext());
7172
const MCExpr *Off = MCConstantExpr::create(FinalOffset, getContext());
7273
return MCBinaryExpr::createAdd(Res, Off, getContext());
7374
}
7475

7576
const MCExpr *ARMElfTargetObjectFile::
7677
getIndirectSymViaRWPI(const MCSymbol *Sym) const {
77-
return MCSymbolRefExpr::create(Sym, MCSymbolRefExpr::VK_ARM_SBREL,
78-
getContext());
78+
return MCSymbolRefExpr::create(Sym, ARMMCExpr::VK_SBREL, getContext());
7979
}
8080

8181
const MCExpr *ARMElfTargetObjectFile::getTTypeGlobalReference(
@@ -87,14 +87,13 @@ const MCExpr *ARMElfTargetObjectFile::getTTypeGlobalReference(
8787

8888
assert(Encoding == DW_EH_PE_absptr && "Can handle absptr encoding only");
8989

90-
return MCSymbolRefExpr::create(TM.getSymbol(GV),
91-
MCSymbolRefExpr::VK_ARM_TARGET2, getContext());
90+
return MCSymbolRefExpr::create(TM.getSymbol(GV), ARMMCExpr::VK_TARGET2,
91+
getContext());
9292
}
9393

9494
const MCExpr *ARMElfTargetObjectFile::
9595
getDebugThreadLocalSymbol(const MCSymbol *Sym) const {
96-
return MCSymbolRefExpr::create(Sym, MCSymbolRefExpr::VK_ARM_TLSLDO,
97-
getContext());
96+
return MCSymbolRefExpr::create(Sym, ARMMCExpr::VK_TLSLDO, getContext());
9897
}
9998

10099
static bool isExecuteOnlyFunction(const GlobalObject *GO, SectionKind SK,

llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12437,8 +12437,8 @@ bool ARMAsmParser::parseDirectiveTLSDescSeq(SMLoc L) {
1243712437
return TokError("expected variable after '.tlsdescseq' directive");
1243812438

1243912439
auto *Sym = getContext().getOrCreateSymbol(Parser.getTok().getIdentifier());
12440-
const auto *SRE = MCSymbolRefExpr::create(
12441-
Sym, MCSymbolRefExpr::VK_ARM_TLSDESCSEQ, getContext());
12440+
const auto *SRE =
12441+
MCSymbolRefExpr::create(Sym, ARMMCExpr::VK_TLSDESCSEQ, getContext());
1244212442
Lex();
1244312443

1244412444
if (parseEOL())

llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include "MCTargetDesc/ARMAsmBackendELF.h"
1313
#include "MCTargetDesc/ARMAsmBackendWinCOFF.h"
1414
#include "MCTargetDesc/ARMFixupKinds.h"
15+
#include "MCTargetDesc/ARMMCExpr.h"
1516
#include "MCTargetDesc/ARMMCTargetDesc.h"
1617
#include "llvm/ADT/StringSwitch.h"
1718
#include "llvm/BinaryFormat/ELF.h"
@@ -605,7 +606,7 @@ unsigned ARMAsmBackend::adjustFixupValue(const MCAssembler &Asm,
605606
// Offset by 8 just as above.
606607
if (const MCSymbolRefExpr *SRE =
607608
dyn_cast<MCSymbolRefExpr>(Fixup.getValue()))
608-
if (SRE->getKind() == MCSymbolRefExpr::VK_TLSCALL)
609+
if (getSpecifier(SRE) == ARMMCExpr::VK_TLSCALL)
609610
return 0;
610611
return 0xffffff & (Value >> 2);
611612
case ARM::fixup_t2_uncondbranch: {
@@ -732,7 +733,7 @@ unsigned ARMAsmBackend::adjustFixupValue(const MCAssembler &Asm,
732733
uint32_t offset = (Value - 4) >> 2;
733734
if (const MCSymbolRefExpr *SRE =
734735
dyn_cast<MCSymbolRefExpr>(Fixup.getValue()))
735-
if (SRE->getKind() == MCSymbolRefExpr::VK_TLSCALL)
736+
if (getSpecifier(SRE) == ARMMCExpr::VK_TLSCALL)
736737
offset = 0;
737738
uint32_t signBit = (offset & 0x400000) >> 22;
738739
uint32_t I1Bit = (offset & 0x200000) >> 21;

0 commit comments

Comments
 (0)