[llvm] 1edefc3 - Move ARM-specific MCSymbolRefExpr::VariantKind to ARMMCExpr::Specifier

Fangrui Song via llvm-commits llvm-commits at lists.llvm.org
Fri Mar 21 23:08:45 PDT 2025


Author: Fangrui Song
Date: 2025-03-21T23:08:40-07:00
New Revision: 1edefc3ea056ea32984a20eabd848d36d8d43be3

URL: https://github.com/llvm/llvm-project/commit/1edefc3ea056ea32984a20eabd848d36d8d43be3
DIFF: https://github.com/llvm/llvm-project/commit/1edefc3ea056ea32984a20eabd848d36d8d43be3.diff

LOG: 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.

Added: 
    

Modified: 
    llvm/include/llvm/MC/MCExpr.h
    llvm/lib/Target/ARM/ARMAsmPrinter.cpp
    llvm/lib/Target/ARM/ARMMCInstLower.cpp
    llvm/lib/Target/ARM/ARMTargetObjectFile.cpp
    llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
    llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp
    llvm/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp
    llvm/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp
    llvm/lib/Target/ARM/MCTargetDesc/ARMMCAsmInfo.cpp
    llvm/lib/Target/ARM/MCTargetDesc/ARMMCExpr.h
    llvm/lib/Target/ARM/MCTargetDesc/ARMWinCOFFObjectWriter.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/include/llvm/MC/MCExpr.h b/llvm/include/llvm/MC/MCExpr.h
index 7fa5332700b90..a9dea1f42ddf6 100644
--- a/llvm/include/llvm/MC/MCExpr.h
+++ b/llvm/include/llvm/MC/MCExpr.h
@@ -220,21 +220,6 @@ class MCSymbolRefExpr : public MCExpr {
     VK_GOTPAGEOFF,
     VK_SECREL,
     VK_WEAKREF, // The link between the symbols in .weakref foo, bar
-    VK_FUNCDESC,
-    VK_GOTFUNCDESC,
-    VK_GOTOFFFUNCDESC,
-    VK_TLSGD_FDPIC,
-    VK_TLSLDM_FDPIC,
-    VK_GOTTPOFF_FDPIC,
-
-    VK_ARM_NONE,
-    VK_ARM_GOT_PREL,
-    VK_ARM_TARGET1,
-    VK_ARM_TARGET2,
-    VK_ARM_PREL31,
-    VK_ARM_SBREL,  // symbol(sbrel)
-    VK_ARM_TLSLDO, // symbol(tlsldo)
-    VK_ARM_TLSDESCSEQ,
 
     VK_COFF_IMGREL32, // symbol at imgrel (image-relative)
 

diff  --git a/llvm/lib/Target/ARM/ARMAsmPrinter.cpp b/llvm/lib/Target/ARM/ARMAsmPrinter.cpp
index b8772e1665f8a..10a8a5272812b 100644
--- a/llvm/lib/Target/ARM/ARMAsmPrinter.cpp
+++ b/llvm/lib/Target/ARM/ARMAsmPrinter.cpp
@@ -90,12 +90,10 @@ void ARMAsmPrinter::emitXXStructor(const DataLayout &DL, const Constant *CV) {
   const GlobalValue *GV = dyn_cast<GlobalValue>(CV->stripPointerCasts());
   assert(GV && "C++ constructor pointer was not a GlobalValue!");
 
-  const MCExpr *E = MCSymbolRefExpr::create(GetARMGVSymbol(GV,
-                                                           ARMII::MO_NO_FLAG),
-                                            (Subtarget->isTargetELF()
-                                             ? MCSymbolRefExpr::VK_ARM_TARGET1
-                                             : MCSymbolRefExpr::VK_None),
-                                            OutContext);
+  const MCExpr *E = MCSymbolRefExpr::create(
+      GetARMGVSymbol(GV, ARMII::MO_NO_FLAG),
+      (Subtarget->isTargetELF() ? ARMMCExpr::VK_TARGET1 : ARMMCExpr::VK_None),
+      OutContext);
 
   OutStreamer->emitValue(E, Size);
 }
@@ -835,21 +833,20 @@ static MCSymbol *getPICLabel(StringRef Prefix, unsigned FunctionNumber,
   return Label;
 }
 
-static MCSymbolRefExpr::VariantKind
-getModifierVariantKind(ARMCP::ARMCPModifier Modifier) {
+static uint8_t getModifierSpecifier(ARMCP::ARMCPModifier Modifier) {
   switch (Modifier) {
   case ARMCP::no_modifier:
-    return MCSymbolRefExpr::VK_None;
+    return ARMMCExpr::VK_None;
   case ARMCP::TLSGD:
-    return MCSymbolRefExpr::VK_TLSGD;
+    return ARMMCExpr::VK_TLSGD;
   case ARMCP::TPOFF:
-    return MCSymbolRefExpr::VK_TPOFF;
+    return ARMMCExpr::VK_TPOFF;
   case ARMCP::GOTTPOFF:
-    return MCSymbolRefExpr::VK_GOTTPOFF;
+    return ARMMCExpr::VK_GOTTPOFF;
   case ARMCP::SBREL:
-    return MCSymbolRefExpr::VK_ARM_SBREL;
+    return ARMMCExpr::VK_SBREL;
   case ARMCP::GOT_PREL:
-    return MCSymbolRefExpr::VK_ARM_GOT_PREL;
+    return ARMMCExpr::VK_GOT_PREL;
   case ARMCP::SECREL:
     return MCSymbolRefExpr::VK_SECREL;
   }
@@ -964,9 +961,8 @@ void ARMAsmPrinter::emitMachineConstantPoolValue(
   }
 
   // Create an MCSymbol for the reference.
-  const MCExpr *Expr =
-    MCSymbolRefExpr::create(MCSym, getModifierVariantKind(ACPV->getModifier()),
-                            OutContext);
+  const MCExpr *Expr = MCSymbolRefExpr::create(
+      MCSym, getModifierSpecifier(ACPV->getModifier()), OutContext);
 
   if (ACPV->getPCAdjustment()) {
     MCSymbol *PCLabel =

diff  --git a/llvm/lib/Target/ARM/ARMMCInstLower.cpp b/llvm/lib/Target/ARM/ARMMCInstLower.cpp
index 0022adbfeced8..3e29428032a50 100644
--- a/llvm/lib/Target/ARM/ARMMCInstLower.cpp
+++ b/llvm/lib/Target/ARM/ARMMCInstLower.cpp
@@ -37,9 +37,9 @@ using namespace llvm;
 
 MCOperand ARMAsmPrinter::GetSymbolRef(const MachineOperand &MO,
                                       const MCSymbol *Symbol) {
-  MCSymbolRefExpr::VariantKind Specifier = MCSymbolRefExpr::VK_None;
+  auto Specifier = ARMMCExpr::VK_None;
   if (MO.getTargetFlags() & ARMII::MO_SBREL)
-    Specifier = MCSymbolRefExpr::VK_ARM_SBREL;
+    Specifier = ARMMCExpr::VK_SBREL;
 
   const MCExpr *Expr = MCSymbolRefExpr::create(Symbol, Specifier, OutContext);
   switch (MO.getTargetFlags() & ARMII::MO_OPTION_MASK) {

diff  --git a/llvm/lib/Target/ARM/ARMTargetObjectFile.cpp b/llvm/lib/Target/ARM/ARMTargetObjectFile.cpp
index 29abd9e58e2ef..131703ec082bf 100644
--- a/llvm/lib/Target/ARM/ARMTargetObjectFile.cpp
+++ b/llvm/lib/Target/ARM/ARMTargetObjectFile.cpp
@@ -9,6 +9,7 @@
 #include "ARMTargetObjectFile.h"
 #include "ARMSubtarget.h"
 #include "ARMTargetMachine.h"
+#include "MCTargetDesc/ARMMCExpr.h"
 #include "llvm/BinaryFormat/Dwarf.h"
 #include "llvm/BinaryFormat/ELF.h"
 #include "llvm/MC/MCAsmInfo.h"
@@ -29,7 +30,7 @@ using namespace dwarf;
 //===----------------------------------------------------------------------===//
 
 ARMElfTargetObjectFile::ARMElfTargetObjectFile() {
-  PLTRelativeSpecifier = MCSymbolRefExpr::VK_ARM_PREL31;
+  PLTRelativeSpecifier = ARMMCExpr::VK_PREL31;
   SupportIndirectSymViaGOTPCRel = true;
 }
 
@@ -66,16 +67,15 @@ const MCExpr *ARMElfTargetObjectFile::getIndirectSymViaGOTPCRel(
     const GlobalValue *GV, const MCSymbol *Sym, const MCValue &MV,
     int64_t Offset, MachineModuleInfo *MMI, MCStreamer &Streamer) const {
   int64_t FinalOffset = Offset + MV.getConstant();
-  const MCExpr *Res = MCSymbolRefExpr::create(
-      Sym, MCSymbolRefExpr::VK_ARM_GOT_PREL, getContext());
+  const MCExpr *Res =
+      MCSymbolRefExpr::create(Sym, ARMMCExpr::VK_GOT_PREL, getContext());
   const MCExpr *Off = MCConstantExpr::create(FinalOffset, getContext());
   return MCBinaryExpr::createAdd(Res, Off, getContext());
 }
 
 const MCExpr *ARMElfTargetObjectFile::
 getIndirectSymViaRWPI(const MCSymbol *Sym) const {
-  return MCSymbolRefExpr::create(Sym, MCSymbolRefExpr::VK_ARM_SBREL,
-                                 getContext());
+  return MCSymbolRefExpr::create(Sym, ARMMCExpr::VK_SBREL, getContext());
 }
 
 const MCExpr *ARMElfTargetObjectFile::getTTypeGlobalReference(
@@ -87,14 +87,13 @@ const MCExpr *ARMElfTargetObjectFile::getTTypeGlobalReference(
 
   assert(Encoding == DW_EH_PE_absptr && "Can handle absptr encoding only");
 
-  return MCSymbolRefExpr::create(TM.getSymbol(GV),
-                                 MCSymbolRefExpr::VK_ARM_TARGET2, getContext());
+  return MCSymbolRefExpr::create(TM.getSymbol(GV), ARMMCExpr::VK_TARGET2,
+                                 getContext());
 }
 
 const MCExpr *ARMElfTargetObjectFile::
 getDebugThreadLocalSymbol(const MCSymbol *Sym) const {
-  return MCSymbolRefExpr::create(Sym, MCSymbolRefExpr::VK_ARM_TLSLDO,
-                                 getContext());
+  return MCSymbolRefExpr::create(Sym, ARMMCExpr::VK_TLSLDO, getContext());
 }
 
 static bool isExecuteOnlyFunction(const GlobalObject *GO, SectionKind SK,

diff  --git a/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp b/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
index b7588e510f8d8..456c3b5396fc9 100644
--- a/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
+++ b/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
@@ -12437,8 +12437,8 @@ bool ARMAsmParser::parseDirectiveTLSDescSeq(SMLoc L) {
     return TokError("expected variable after '.tlsdescseq' directive");
 
   auto *Sym = getContext().getOrCreateSymbol(Parser.getTok().getIdentifier());
-  const auto *SRE = MCSymbolRefExpr::create(
-      Sym, MCSymbolRefExpr::VK_ARM_TLSDESCSEQ, getContext());
+  const auto *SRE =
+      MCSymbolRefExpr::create(Sym, ARMMCExpr::VK_TLSDESCSEQ, getContext());
   Lex();
 
   if (parseEOL())

diff  --git a/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp b/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp
index bcacc373740b8..9cf8584d82337 100644
--- a/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp
+++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp
@@ -12,6 +12,7 @@
 #include "MCTargetDesc/ARMAsmBackendELF.h"
 #include "MCTargetDesc/ARMAsmBackendWinCOFF.h"
 #include "MCTargetDesc/ARMFixupKinds.h"
+#include "MCTargetDesc/ARMMCExpr.h"
 #include "MCTargetDesc/ARMMCTargetDesc.h"
 #include "llvm/ADT/StringSwitch.h"
 #include "llvm/BinaryFormat/ELF.h"
@@ -605,7 +606,7 @@ unsigned ARMAsmBackend::adjustFixupValue(const MCAssembler &Asm,
     // Offset by 8 just as above.
     if (const MCSymbolRefExpr *SRE =
             dyn_cast<MCSymbolRefExpr>(Fixup.getValue()))
-      if (SRE->getKind() == MCSymbolRefExpr::VK_TLSCALL)
+      if (getSpecifier(SRE) == ARMMCExpr::VK_TLSCALL)
         return 0;
     return 0xffffff & (Value >> 2);
   case ARM::fixup_t2_uncondbranch: {
@@ -732,7 +733,7 @@ unsigned ARMAsmBackend::adjustFixupValue(const MCAssembler &Asm,
     uint32_t offset = (Value - 4) >> 2;
     if (const MCSymbolRefExpr *SRE =
             dyn_cast<MCSymbolRefExpr>(Fixup.getValue()))
-      if (SRE->getKind() == MCSymbolRefExpr::VK_TLSCALL)
+      if (getSpecifier(SRE) == ARMMCExpr::VK_TLSCALL)
         offset = 0;
     uint32_t signBit = (offset & 0x400000) >> 22;
     uint32_t I1Bit = (offset & 0x200000) >> 21;

diff  --git a/llvm/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp b/llvm/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp
index 6ae5705783f9b..d88d3bdd39378 100644
--- a/llvm/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp
+++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp
@@ -7,6 +7,7 @@
 //===----------------------------------------------------------------------===//
 
 #include "MCTargetDesc/ARMFixupKinds.h"
+#include "MCTargetDesc/ARMMCExpr.h"
 #include "MCTargetDesc/ARMMCTargetDesc.h"
 #include "llvm/BinaryFormat/ELF.h"
 #include "llvm/MC/MCContext.h"
@@ -81,7 +82,7 @@ unsigned ARMELFObjectWriter::GetRelocTypeInner(const MCValue &Target,
   unsigned Kind = Fixup.getTargetKind();
   if (Kind >= FirstLiteralRelocationKind)
     return Kind - FirstLiteralRelocationKind;
-  MCSymbolRefExpr::VariantKind Specifier = Target.getAccessVariant();
+  uint8_t Specifier = Target.getAccessVariant();
   auto CheckFDPIC = [&](uint32_t Type) {
     if (getOSABI() != ELF::ELFOSABI_ARM_FDPIC)
       Ctx.reportError(Fixup.getLoc(),
@@ -92,16 +93,16 @@ unsigned ARMELFObjectWriter::GetRelocTypeInner(const MCValue &Target,
   };
 
   switch (Specifier) {
-  case MCSymbolRefExpr::VK_GOTTPOFF:
-  case MCSymbolRefExpr::VK_GOTTPOFF_FDPIC:
-  case MCSymbolRefExpr::VK_TLSCALL:
-  case MCSymbolRefExpr::VK_TLSDESC:
-  case MCSymbolRefExpr::VK_TLSGD:
-  case MCSymbolRefExpr::VK_TLSGD_FDPIC:
-  case MCSymbolRefExpr::VK_TLSLDM:
-  case MCSymbolRefExpr::VK_TLSLDM_FDPIC:
-  case MCSymbolRefExpr::VK_ARM_TLSLDO:
-  case MCSymbolRefExpr::VK_TPOFF:
+  case ARMMCExpr::VK_GOTTPOFF:
+  case ARMMCExpr::VK_GOTTPOFF_FDPIC:
+  case ARMMCExpr::VK_TLSCALL:
+  case ARMMCExpr::VK_TLSDESC:
+  case ARMMCExpr::VK_TLSGD:
+  case ARMMCExpr::VK_TLSGD_FDPIC:
+  case ARMMCExpr::VK_TLSLDM:
+  case ARMMCExpr::VK_TLSLDM_FDPIC:
+  case ARMMCExpr::VK_TLSLDO:
+  case ARMMCExpr::VK_TPOFF:
     if (auto *S = Target.getSymA())
       cast<MCSymbolELF>(S->getSymbol()).setType(ELF::STT_TLS);
     break;
@@ -120,7 +121,7 @@ unsigned ARMELFObjectWriter::GetRelocTypeInner(const MCValue &Target,
         Ctx.reportError(Fixup.getLoc(),
                         "invalid fixup for 4-byte pc-relative data relocation");
         return ELF::R_ARM_NONE;
-      case MCSymbolRefExpr::VK_None: {
+      case ARMMCExpr::VK_None: {
         if (const MCSymbolRefExpr *SymRef = Target.getSymA()) {
           // For GNU AS compatibility expressions such as
           // _GLOBAL_OFFSET_TABLE_ - label emit a R_ARM_BASE_PREL relocation.
@@ -129,19 +130,19 @@ unsigned ARMELFObjectWriter::GetRelocTypeInner(const MCValue &Target,
         }
         return ELF::R_ARM_REL32;
       }
-      case MCSymbolRefExpr::VK_GOTTPOFF:
+      case ARMMCExpr::VK_GOTTPOFF:
         return ELF::R_ARM_TLS_IE32;
-      case MCSymbolRefExpr::VK_ARM_GOT_PREL:
+      case ARMMCExpr::VK_GOT_PREL:
         return ELF::R_ARM_GOT_PREL;
-      case MCSymbolRefExpr::VK_ARM_PREL31:
+      case ARMMCExpr::VK_PREL31:
         return ELF::R_ARM_PREL31;
       }
     case ARM::fixup_arm_blx:
     case ARM::fixup_arm_uncondbl:
       switch (Specifier) {
-      case MCSymbolRefExpr::VK_PLT:
+      case ARMMCExpr::VK_PLT:
         return ELF::R_ARM_CALL;
-      case MCSymbolRefExpr::VK_TLSCALL:
+      case ARMMCExpr::VK_TLSCALL:
         return ELF::R_ARM_TLS_CALL;
       default:
         return ELF::R_ARM_CALL;
@@ -177,7 +178,7 @@ unsigned ARMELFObjectWriter::GetRelocTypeInner(const MCValue &Target,
     case ARM::fixup_arm_thumb_bl:
     case ARM::fixup_arm_thumb_blx:
       switch (Specifier) {
-      case MCSymbolRefExpr::VK_TLSCALL:
+      case ARMMCExpr::VK_TLSCALL:
         return ELF::R_ARM_THM_TLS_CALL;
       default:
         return ELF::R_ARM_THM_CALL;
@@ -212,7 +213,7 @@ unsigned ARMELFObjectWriter::GetRelocTypeInner(const MCValue &Target,
       Ctx.reportError(Fixup.getLoc(),
                       "invalid fixup for 1-byte data relocation");
       return ELF::R_ARM_NONE;
-    case MCSymbolRefExpr::VK_None:
+    case ARMMCExpr::VK_None:
       return ELF::R_ARM_ABS8;
     }
   case FK_Data_2:
@@ -221,7 +222,7 @@ unsigned ARMELFObjectWriter::GetRelocTypeInner(const MCValue &Target,
       Ctx.reportError(Fixup.getLoc(),
                       "invalid fixup for 2-byte data relocation");
       return ELF::R_ARM_NONE;
-    case MCSymbolRefExpr::VK_None:
+    case ARMMCExpr::VK_None:
       return ELF::R_ARM_ABS16;
     }
   case FK_Data_4:
@@ -230,51 +231,51 @@ unsigned ARMELFObjectWriter::GetRelocTypeInner(const MCValue &Target,
       Ctx.reportError(Fixup.getLoc(),
                       "invalid fixup for 4-byte data relocation");
       return ELF::R_ARM_NONE;
-    case MCSymbolRefExpr::VK_ARM_NONE:
+    case ARMMCExpr::VK_ARM_NONE:
       return ELF::R_ARM_NONE;
-    case MCSymbolRefExpr::VK_GOT:
+    case ARMMCExpr::VK_GOT:
       return ELF::R_ARM_GOT_BREL;
-    case MCSymbolRefExpr::VK_TLSGD:
+    case ARMMCExpr::VK_TLSGD:
       return ELF::R_ARM_TLS_GD32;
-    case MCSymbolRefExpr::VK_TPOFF:
+    case ARMMCExpr::VK_TPOFF:
       return ELF::R_ARM_TLS_LE32;
-    case MCSymbolRefExpr::VK_GOTTPOFF:
+    case ARMMCExpr::VK_GOTTPOFF:
       return ELF::R_ARM_TLS_IE32;
-    case MCSymbolRefExpr::VK_None:
+    case ARMMCExpr::VK_None:
       return ELF::R_ARM_ABS32;
-    case MCSymbolRefExpr::VK_GOTOFF:
+    case ARMMCExpr::VK_GOTOFF:
       return ELF::R_ARM_GOTOFF32;
-    case MCSymbolRefExpr::VK_ARM_GOT_PREL:
+    case ARMMCExpr::VK_GOT_PREL:
       return ELF::R_ARM_GOT_PREL;
-    case MCSymbolRefExpr::VK_ARM_TARGET1:
+    case ARMMCExpr::VK_TARGET1:
       return ELF::R_ARM_TARGET1;
-    case MCSymbolRefExpr::VK_ARM_TARGET2:
+    case ARMMCExpr::VK_TARGET2:
       return ELF::R_ARM_TARGET2;
-    case MCSymbolRefExpr::VK_ARM_PREL31:
+    case ARMMCExpr::VK_PREL31:
       return ELF::R_ARM_PREL31;
-    case MCSymbolRefExpr::VK_ARM_SBREL:
+    case ARMMCExpr::VK_SBREL:
       return ELF::R_ARM_SBREL32;
-    case MCSymbolRefExpr::VK_ARM_TLSLDO:
+    case ARMMCExpr::VK_TLSLDO:
       return ELF::R_ARM_TLS_LDO32;
-    case MCSymbolRefExpr::VK_TLSCALL:
+    case ARMMCExpr::VK_TLSCALL:
       return ELF::R_ARM_TLS_CALL;
-    case MCSymbolRefExpr::VK_TLSDESC:
+    case ARMMCExpr::VK_TLSDESC:
       return ELF::R_ARM_TLS_GOTDESC;
-    case MCSymbolRefExpr::VK_TLSLDM:
+    case ARMMCExpr::VK_TLSLDM:
       return ELF::R_ARM_TLS_LDM32;
-    case MCSymbolRefExpr::VK_ARM_TLSDESCSEQ:
+    case ARMMCExpr::VK_TLSDESCSEQ:
       return ELF::R_ARM_TLS_DESCSEQ;
-    case MCSymbolRefExpr::VK_FUNCDESC:
+    case ARMMCExpr::VK_FUNCDESC:
       return CheckFDPIC(ELF::R_ARM_FUNCDESC);
-    case MCSymbolRefExpr::VK_GOTFUNCDESC:
+    case ARMMCExpr::VK_GOTFUNCDESC:
       return CheckFDPIC(ELF::R_ARM_GOTFUNCDESC);
-    case MCSymbolRefExpr::VK_GOTOFFFUNCDESC:
+    case ARMMCExpr::VK_GOTOFFFUNCDESC:
       return CheckFDPIC(ELF::R_ARM_GOTOFFFUNCDESC);
-    case MCSymbolRefExpr::VK_TLSGD_FDPIC:
+    case ARMMCExpr::VK_TLSGD_FDPIC:
       return CheckFDPIC(ELF::R_ARM_TLS_GD32_FDPIC);
-    case MCSymbolRefExpr::VK_TLSLDM_FDPIC:
+    case ARMMCExpr::VK_TLSLDM_FDPIC:
       return CheckFDPIC(ELF::R_ARM_TLS_LDM32_FDPIC);
-    case MCSymbolRefExpr::VK_GOTTPOFF_FDPIC:
+    case ARMMCExpr::VK_GOTTPOFF_FDPIC:
       return CheckFDPIC(ELF::R_ARM_TLS_IE32_FDPIC);
     }
   case ARM::fixup_arm_condbranch:
@@ -285,9 +286,9 @@ unsigned ARMELFObjectWriter::GetRelocTypeInner(const MCValue &Target,
     default:
       Ctx.reportError(Fixup.getLoc(), "invalid fixup for ARM MOVT instruction");
       return ELF::R_ARM_NONE;
-    case MCSymbolRefExpr::VK_None:
+    case ARMMCExpr::VK_None:
       return ELF::R_ARM_MOVT_ABS;
-    case MCSymbolRefExpr::VK_ARM_SBREL:
+    case ARMMCExpr::VK_SBREL:
       return ELF::R_ARM_MOVT_BREL;
     }
   case ARM::fixup_arm_movw_lo16:
@@ -295,9 +296,9 @@ unsigned ARMELFObjectWriter::GetRelocTypeInner(const MCValue &Target,
     default:
       Ctx.reportError(Fixup.getLoc(), "invalid fixup for ARM MOVW instruction");
       return ELF::R_ARM_NONE;
-    case MCSymbolRefExpr::VK_None:
+    case ARMMCExpr::VK_None:
       return ELF::R_ARM_MOVW_ABS_NC;
-    case MCSymbolRefExpr::VK_ARM_SBREL:
+    case ARMMCExpr::VK_SBREL:
       return ELF::R_ARM_MOVW_BREL_NC;
     }
   case ARM::fixup_t2_movt_hi16:
@@ -306,9 +307,9 @@ unsigned ARMELFObjectWriter::GetRelocTypeInner(const MCValue &Target,
       Ctx.reportError(Fixup.getLoc(),
                       "invalid fixup for Thumb MOVT instruction");
       return ELF::R_ARM_NONE;
-    case MCSymbolRefExpr::VK_None:
+    case ARMMCExpr::VK_None:
       return ELF::R_ARM_THM_MOVT_ABS;
-    case MCSymbolRefExpr::VK_ARM_SBREL:
+    case ARMMCExpr::VK_SBREL:
       return ELF::R_ARM_THM_MOVT_BREL;
     }
   case ARM::fixup_t2_movw_lo16:
@@ -317,9 +318,9 @@ unsigned ARMELFObjectWriter::GetRelocTypeInner(const MCValue &Target,
       Ctx.reportError(Fixup.getLoc(),
                       "invalid fixup for Thumb MOVW instruction");
       return ELF::R_ARM_NONE;
-    case MCSymbolRefExpr::VK_None:
+    case ARMMCExpr::VK_None:
       return ELF::R_ARM_THM_MOVW_ABS_NC;
-    case MCSymbolRefExpr::VK_ARM_SBREL:
+    case ARMMCExpr::VK_SBREL:
       return ELF::R_ARM_THM_MOVW_BREL_NC;
     }
 

diff  --git a/llvm/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp b/llvm/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp
index 4208aa2004627..85c5442fb7d91 100644
--- a/llvm/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp
+++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp
@@ -14,6 +14,7 @@
 
 #include "ARMMCTargetDesc.h"
 #include "ARMUnwindOpAsm.h"
+#include "MCTargetDesc/ARMMCExpr.h"
 #include "Utils/ARMBaseInfo.h"
 #include "llvm/ADT/DenseMap.h"
 #include "llvm/ADT/SmallString.h"
@@ -578,7 +579,7 @@ class ARMELFStreamer : public MCELFStreamer {
   /// necessary.
   void emitValueImpl(const MCExpr *Value, unsigned Size, SMLoc Loc) override {
     if (const MCSymbolRefExpr *SRE = dyn_cast_or_null<MCSymbolRefExpr>(Value)) {
-      if (SRE->getKind() == MCSymbolRefExpr::VK_ARM_SBREL && !(Size == 4)) {
+      if (getSpecifier(SRE) == ARMMCExpr::VK_SBREL && !(Size == 4)) {
         getContext().reportError(Loc, "relocated expression must be 32-bit");
         return;
       }
@@ -1255,9 +1256,7 @@ void ARMELFStreamer::emitFnEnd() {
     EmitPersonalityFixup(GetAEABIUnwindPersonalityName(PersonalityIndex));
 
   const MCSymbolRefExpr *FnStartRef =
-    MCSymbolRefExpr::create(FnStart,
-                            MCSymbolRefExpr::VK_ARM_PREL31,
-                            getContext());
+      MCSymbolRefExpr::create(FnStart, ARMMCExpr::VK_PREL31, getContext());
 
   emitValue(FnStartRef, 4);
 
@@ -1266,9 +1265,7 @@ void ARMELFStreamer::emitFnEnd() {
   } else if (ExTab) {
     // Emit a reference to the unwind opcodes in the ".ARM.extab" section.
     const MCSymbolRefExpr *ExTabEntryRef =
-      MCSymbolRefExpr::create(ExTab,
-                              MCSymbolRefExpr::VK_ARM_PREL31,
-                              getContext());
+        MCSymbolRefExpr::create(ExTab, ARMMCExpr::VK_PREL31, getContext());
     emitValue(ExTabEntryRef, 4);
   } else {
     // For the __aeabi_unwind_cpp_pr0, we have to emit the unwind opcodes in
@@ -1299,7 +1296,7 @@ void ARMELFStreamer::EmitPersonalityFixup(StringRef Name) {
   const MCSymbol *PersonalitySym = getContext().getOrCreateSymbol(Name);
 
   const MCSymbolRefExpr *PersonalityRef = MCSymbolRefExpr::create(
-      PersonalitySym, MCSymbolRefExpr::VK_ARM_NONE, getContext());
+      PersonalitySym, ARMMCExpr::VK_ARM_NONE, getContext());
 
   visitUsedExpr(*PersonalityRef);
   MCDataFragment *DF = getOrCreateDataFragment();
@@ -1345,10 +1342,8 @@ void ARMELFStreamer::FlushUnwindOpcodes(bool NoHandlerData) {
 
   // Emit personality
   if (Personality) {
-    const MCSymbolRefExpr *PersonalityRef =
-      MCSymbolRefExpr::create(Personality,
-                              MCSymbolRefExpr::VK_ARM_PREL31,
-                              getContext());
+    const MCSymbolRefExpr *PersonalityRef = MCSymbolRefExpr::create(
+        Personality, uint16_t(ARMMCExpr::VK_PREL31), getContext());
 
     emitValue(PersonalityRef, 4);
   }

diff  --git a/llvm/lib/Target/ARM/MCTargetDesc/ARMMCAsmInfo.cpp b/llvm/lib/Target/ARM/MCTargetDesc/ARMMCAsmInfo.cpp
index 813826a5097ac..f38b73a784632 100644
--- a/llvm/lib/Target/ARM/MCTargetDesc/ARMMCAsmInfo.cpp
+++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMMCAsmInfo.cpp
@@ -11,36 +11,37 @@
 //===----------------------------------------------------------------------===//
 
 #include "ARMMCAsmInfo.h"
+#include "MCTargetDesc/ARMMCExpr.h"
 #include "llvm/MC/MCExpr.h"
 #include "llvm/TargetParser/Triple.h"
 
 using namespace llvm;
 
 const MCAsmInfo::VariantKindDesc variantKindDescs[] = {
-    {MCSymbolRefExpr::VK_ARM_GOT_PREL, "GOT_PREL"},
-    {MCSymbolRefExpr::VK_ARM_NONE, "none"},
-    {MCSymbolRefExpr::VK_ARM_PREL31, "prel31"},
-    {MCSymbolRefExpr::VK_ARM_SBREL, "sbrel"},
-    {MCSymbolRefExpr::VK_ARM_TARGET1, "target1"},
-    {MCSymbolRefExpr::VK_ARM_TARGET2, "target2"},
-    {MCSymbolRefExpr::VK_ARM_TLSLDO, "TLSLDO"},
+    {ARMMCExpr::VK_GOT_PREL, "GOT_PREL"},
+    {ARMMCExpr::VK_ARM_NONE, "none"},
+    {ARMMCExpr::VK_PREL31, "prel31"},
+    {ARMMCExpr::VK_SBREL, "sbrel"},
+    {ARMMCExpr::VK_TARGET1, "target1"},
+    {ARMMCExpr::VK_TARGET2, "target2"},
+    {ARMMCExpr::VK_TLSLDO, "TLSLDO"},
     {MCSymbolRefExpr::VK_COFF_IMGREL32, "imgrel"},
-    {MCSymbolRefExpr::VK_FUNCDESC, "FUNCDESC"},
-    {MCSymbolRefExpr::VK_GOT, "GOT"},
-    {MCSymbolRefExpr::VK_GOTFUNCDESC, "GOTFUNCDESC"},
-    {MCSymbolRefExpr::VK_GOTOFF, "GOTOFF"},
-    {MCSymbolRefExpr::VK_GOTOFFFUNCDESC, "GOTOFFFUNCDESC"},
-    {MCSymbolRefExpr::VK_GOTTPOFF, "GOTTPOFF"},
-    {MCSymbolRefExpr::VK_GOTTPOFF_FDPIC, "gottpoff_fdpic"},
-    {MCSymbolRefExpr::VK_PLT, "PLT"},
+    {ARMMCExpr::VK_FUNCDESC, "FUNCDESC"},
+    {ARMMCExpr::VK_GOT, "GOT"},
+    {ARMMCExpr::VK_GOTFUNCDESC, "GOTFUNCDESC"},
+    {ARMMCExpr::VK_GOTOFF, "GOTOFF"},
+    {ARMMCExpr::VK_GOTOFFFUNCDESC, "GOTOFFFUNCDESC"},
+    {ARMMCExpr::VK_GOTTPOFF, "GOTTPOFF"},
+    {ARMMCExpr::VK_GOTTPOFF_FDPIC, "gottpoff_fdpic"},
+    {ARMMCExpr::VK_PLT, "PLT"},
     {MCSymbolRefExpr::VK_SECREL, "SECREL32"},
-    {MCSymbolRefExpr::VK_TLSCALL, "tlscall"},
-    {MCSymbolRefExpr::VK_TLSDESC, "tlsdesc"},
-    {MCSymbolRefExpr::VK_TLSGD, "TLSGD"},
-    {MCSymbolRefExpr::VK_TLSGD_FDPIC, "tlsgd_fdpic"},
-    {MCSymbolRefExpr::VK_TLSLDM, "TLSLDM"},
-    {MCSymbolRefExpr::VK_TLSLDM_FDPIC, "tlsldm_fdpic"},
-    {MCSymbolRefExpr::VK_TPOFF, "TPOFF"},
+    {ARMMCExpr::VK_TLSCALL, "tlscall"},
+    {ARMMCExpr::VK_TLSDESC, "tlsdesc"},
+    {ARMMCExpr::VK_TLSGD, "TLSGD"},
+    {ARMMCExpr::VK_TLSGD_FDPIC, "tlsgd_fdpic"},
+    {ARMMCExpr::VK_TLSLDM, "TLSLDM"},
+    {ARMMCExpr::VK_TLSLDM_FDPIC, "tlsldm_fdpic"},
+    {ARMMCExpr::VK_TPOFF, "TPOFF"},
 };
 
 void ARMMCAsmInfoDarwin::anchor() { }

diff  --git a/llvm/lib/Target/ARM/MCTargetDesc/ARMMCExpr.h b/llvm/lib/Target/ARM/MCTargetDesc/ARMMCExpr.h
index b75515388772d..9b959ce12f644 100644
--- a/llvm/lib/Target/ARM/MCTargetDesc/ARMMCExpr.h
+++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMMCExpr.h
@@ -30,6 +30,30 @@ class ARMMCExpr : public MCTargetExpr {
                 // the .s file)
     VK_LO_0_7,  // The R_ARM_THM_ALU_ABS_G0_NC relocation (:lower0_7: in the
                 // .s file)
+
+    VK_ARM_NONE,
+    VK_FUNCDESC,
+    VK_GOT,
+    VK_GOTFUNCDESC,
+    VK_GOTOFF,
+    VK_GOTOFFFUNCDESC,
+    VK_GOTTPOFF,
+    VK_GOTTPOFF_FDPIC,
+    VK_GOT_PREL,
+    VK_PLT,
+    VK_PREL31,
+    VK_SBREL,
+    VK_TARGET1,
+    VK_TARGET2,
+    VK_TLSCALL,
+    VK_TLSDESC,
+    VK_TLSDESCSEQ,
+    VK_TLSGD,
+    VK_TLSGD_FDPIC,
+    VK_TLSLDM,
+    VK_TLSLDM_FDPIC,
+    VK_TLSLDO,
+    VK_TPOFF,
   };
 
 private:
@@ -93,6 +117,10 @@ class ARMMCExpr : public MCTargetExpr {
     return E->getKind() == MCExpr::Target;
   }
 };
+
+static inline ARMMCExpr::Specifier getSpecifier(const MCSymbolRefExpr *SRE) {
+  return ARMMCExpr::Specifier(SRE->getKind());
+}
 } // end namespace llvm
 
 #endif

diff  --git a/llvm/lib/Target/ARM/MCTargetDesc/ARMWinCOFFObjectWriter.cpp b/llvm/lib/Target/ARM/MCTargetDesc/ARMWinCOFFObjectWriter.cpp
index 34d9e5a910636..0a605df41891e 100644
--- a/llvm/lib/Target/ARM/MCTargetDesc/ARMWinCOFFObjectWriter.cpp
+++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMWinCOFFObjectWriter.cpp
@@ -44,8 +44,9 @@ unsigned ARMWinCOFFObjectWriter::getRelocType(MCContext &Ctx,
                                               const MCFixup &Fixup,
                                               bool IsCrossSection,
                                               const MCAsmBackend &MAB) const {
-  MCSymbolRefExpr::VariantKind Modifier =
-    Target.isAbsolute() ? MCSymbolRefExpr::VK_None : Target.getSymA()->getKind();
+  MCSymbolRefExpr::VariantKind Modifier = Target.isAbsolute()
+                                              ? MCSymbolRefExpr::VK_None
+                                              : Target.getSymA()->getKind();
 
   unsigned FixupKind = Fixup.getKind();
   if (IsCrossSection) {


        


More information about the llvm-commits mailing list