[llvm] ffc5f79 - LoongArch: Replace most Specifier members with raw relocation types
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Mon May 5 22:03:27 PDT 2025
Author: Fangrui Song
Date: 2025-05-05T22:03:22-07:00
New Revision: ffc5f79e2aeda12d8c185d9e838f2c8bfd45a01d
URL: https://github.com/llvm/llvm-project/commit/ffc5f79e2aeda12d8c185d9e838f2c8bfd45a01d
DIFF: https://github.com/llvm/llvm-project/commit/ffc5f79e2aeda12d8c185d9e838f2c8bfd45a01d.diff
LOG: LoongArch: Replace most Specifier members with raw relocation types
Follow Sparc.
Added:
Modified:
llvm/lib/Target/LoongArch/AsmParser/LoongArchAsmParser.cpp
llvm/lib/Target/LoongArch/LoongArchMCInstLower.cpp
llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchELFObjectWriter.cpp
llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchMCCodeEmitter.cpp
llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchMCExpr.cpp
llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchMCExpr.h
Removed:
################################################################################
diff --git a/llvm/lib/Target/LoongArch/AsmParser/LoongArchAsmParser.cpp b/llvm/lib/Target/LoongArch/AsmParser/LoongArchAsmParser.cpp
index fe83e8f600d8c..faac1a221cb59 100644
--- a/llvm/lib/Target/LoongArch/AsmParser/LoongArchAsmParser.cpp
+++ b/llvm/lib/Target/LoongArch/AsmParser/LoongArchAsmParser.cpp
@@ -13,6 +13,7 @@
#include "MCTargetDesc/LoongArchMatInt.h"
#include "MCTargetDesc/LoongArchTargetStreamer.h"
#include "TargetInfo/LoongArchTargetInfo.h"
+#include "llvm/BinaryFormat/ELF.h"
#include "llvm/MC/MCContext.h"
#include "llvm/MC/MCInstBuilder.h"
#include "llvm/MC/MCInstrInfo.h"
@@ -45,9 +46,8 @@ class LoongArchAsmParser : public MCTargetAsmParser {
struct Inst {
unsigned Opc;
- LoongArchMCExpr::Specifier VK;
- Inst(unsigned Opc, LoongArchMCExpr::Specifier VK = LoongArchMCExpr::VK_None)
- : Opc(Opc), VK(VK) {}
+ uint16_t Specifier;
+ Inst(unsigned Opc, uint16_t VK = 0) : Opc(Opc), Specifier(VK) {}
};
using InstSeq = SmallVector<Inst>;
@@ -294,7 +294,7 @@ class LoongArchOperand : public MCParsedAsmOperand {
if (!isImm() || evaluateConstantImm(getImm(), Imm, VK))
return false;
return LoongArchAsmParser::classifySymbolRef(getImm(), VK) &&
- VK == LoongArchMCExpr::VK_TLS_LE_ADD_R;
+ VK == ELF::R_LARCH_TLS_LE_ADD_R;
}
bool isUImm1() const { return isUImm<1>(); }
@@ -324,13 +324,11 @@ class LoongArchOperand : public MCParsedAsmOperand {
int64_t Imm;
LoongArchMCExpr::Specifier VK = LoongArchMCExpr::VK_None;
bool IsConstantImm = evaluateConstantImm(getImm(), Imm, VK);
- bool IsValidKind = VK == LoongArchMCExpr::VK_None ||
- VK == LoongArchMCExpr::VK_PCALA_LO12 ||
- VK == LoongArchMCExpr::VK_GOT_PC_LO12 ||
- VK == LoongArchMCExpr::VK_TLS_IE_PC_LO12 ||
- VK == LoongArchMCExpr::VK_TLS_LE_LO12_R ||
- VK == LoongArchMCExpr::VK_TLS_DESC_PC_LO12 ||
- VK == LoongArchMCExpr::VK_TLS_DESC_LD;
+ bool IsValidKind =
+ VK == LoongArchMCExpr::VK_None || VK == ELF::R_LARCH_PCALA_LO12 ||
+ VK == ELF::R_LARCH_GOT_PC_LO12 || VK == ELF::R_LARCH_TLS_IE_PC_LO12 ||
+ VK == ELF::R_LARCH_TLS_LE_LO12_R ||
+ VK == ELF::R_LARCH_TLS_DESC_PC_LO12 || VK == ELF::R_LARCH_TLS_DESC_LD;
return IsConstantImm
? isInt<12>(Imm) && IsValidKind
: LoongArchAsmParser::classifySymbolRef(getImm(), VK) &&
@@ -344,16 +342,14 @@ class LoongArchOperand : public MCParsedAsmOperand {
int64_t Imm;
LoongArchMCExpr::Specifier VK = LoongArchMCExpr::VK_None;
bool IsConstantImm = evaluateConstantImm(getImm(), Imm, VK);
- bool IsValidKind = VK == LoongArchMCExpr::VK_None ||
- VK == LoongArchMCExpr::VK_ABS64_HI12 ||
- VK == LoongArchMCExpr::VK_PCALA64_HI12 ||
- VK == LoongArchMCExpr::VK_GOT64_HI12 ||
- VK == LoongArchMCExpr::VK_GOT64_PC_HI12 ||
- VK == LoongArchMCExpr::VK_TLS_LE64_HI12 ||
- VK == LoongArchMCExpr::VK_TLS_IE64_HI12 ||
- VK == LoongArchMCExpr::VK_TLS_IE64_PC_HI12 ||
- VK == LoongArchMCExpr::VK_TLS_DESC64_HI12 ||
- VK == LoongArchMCExpr::VK_TLS_DESC64_PC_HI12;
+ bool IsValidKind =
+ VK == LoongArchMCExpr::VK_None || VK == ELF::R_LARCH_ABS64_HI12 ||
+ VK == ELF::R_LARCH_PCALA64_HI12 || VK == ELF::R_LARCH_GOT64_HI12 ||
+ VK == ELF::R_LARCH_GOT64_PC_HI12 || VK == ELF::R_LARCH_TLS_LE64_HI12 ||
+ VK == ELF::R_LARCH_TLS_IE64_HI12 ||
+ VK == ELF::R_LARCH_TLS_IE64_PC_HI12 ||
+ VK == ELF::R_LARCH_TLS_DESC64_HI12 ||
+ VK == ELF::R_LARCH_TLS_DESC64_PC_HI12;
return IsConstantImm
? isInt<12>(Imm) && IsValidKind
: LoongArchAsmParser::classifySymbolRef(getImm(), VK) &&
@@ -369,15 +365,12 @@ class LoongArchOperand : public MCParsedAsmOperand {
int64_t Imm;
LoongArchMCExpr::Specifier VK = LoongArchMCExpr::VK_None;
bool IsConstantImm = evaluateConstantImm(getImm(), Imm, VK);
- bool IsValidKind = VK == LoongArchMCExpr::VK_None ||
- VK == LoongArchMCExpr::VK_ABS_LO12 ||
- VK == LoongArchMCExpr::VK_PCALA_LO12 ||
- VK == LoongArchMCExpr::VK_GOT_LO12 ||
- VK == LoongArchMCExpr::VK_GOT_PC_LO12 ||
- VK == LoongArchMCExpr::VK_TLS_LE_LO12 ||
- VK == LoongArchMCExpr::VK_TLS_IE_LO12 ||
- VK == LoongArchMCExpr::VK_TLS_IE_PC_LO12 ||
- VK == LoongArchMCExpr::VK_TLS_DESC_LO12;
+ bool IsValidKind =
+ VK == LoongArchMCExpr::VK_None || VK == ELF::R_LARCH_ABS_LO12 ||
+ VK == ELF::R_LARCH_PCALA_LO12 || VK == ELF::R_LARCH_GOT_LO12 ||
+ VK == ELF::R_LARCH_GOT_PC_LO12 || VK == ELF::R_LARCH_TLS_LE_LO12 ||
+ VK == ELF::R_LARCH_TLS_IE_LO12 || VK == ELF::R_LARCH_TLS_IE_PC_LO12 ||
+ VK == ELF::R_LARCH_TLS_DESC_LO12;
return IsConstantImm
? isUInt<12>(Imm) && IsValidKind
: LoongArchAsmParser::classifySymbolRef(getImm(), VK) &&
@@ -398,10 +391,9 @@ class LoongArchOperand : public MCParsedAsmOperand {
int64_t Imm;
LoongArchMCExpr::Specifier VK = LoongArchMCExpr::VK_None;
bool IsConstantImm = evaluateConstantImm(getImm(), Imm, VK);
- bool IsValidKind = VK == LoongArchMCExpr::VK_None ||
- VK == LoongArchMCExpr::VK_B16 ||
- VK == LoongArchMCExpr::VK_PCALA_LO12 ||
- VK == LoongArchMCExpr::VK_TLS_DESC_CALL;
+ bool IsValidKind =
+ VK == LoongArchMCExpr::VK_None || VK == ELF::R_LARCH_B16 ||
+ VK == ELF::R_LARCH_PCALA_LO12 || VK == ELF::R_LARCH_TLS_DESC_CALL;
return IsConstantImm
? isShiftedInt<16, 2>(Imm) && IsValidKind
: LoongArchAsmParser::classifySymbolRef(getImm(), VK) &&
@@ -417,13 +409,12 @@ class LoongArchOperand : public MCParsedAsmOperand {
int64_t Imm;
LoongArchMCExpr::Specifier VK = LoongArchMCExpr::VK_None;
bool IsConstantImm = evaluateConstantImm(getImm(), Imm, VK);
- bool IsValidKind = VK == LoongArchMCExpr::VK_None ||
- VK == LoongArchMCExpr::VK_PCALA_HI20 ||
- VK == LoongArchMCExpr::VK_GOT_PC_HI20 ||
- VK == LoongArchMCExpr::VK_TLS_IE_PC_HI20 ||
- VK == LoongArchMCExpr::VK_TLS_LD_PC_HI20 ||
- VK == LoongArchMCExpr::VK_TLS_GD_PC_HI20 ||
- VK == LoongArchMCExpr::VK_TLS_DESC_PC_HI20;
+ bool IsValidKind =
+ VK == LoongArchMCExpr::VK_None || VK == ELF::R_LARCH_PCALA_HI20 ||
+ VK == ELF::R_LARCH_GOT_PC_HI20 || VK == ELF::R_LARCH_TLS_IE_PC_HI20 ||
+ VK == ELF::R_LARCH_TLS_LD_PC_HI20 ||
+ VK == ELF::R_LARCH_TLS_GD_PC_HI20 ||
+ VK == ELF::R_LARCH_TLS_DESC_PC_HI20;
return IsConstantImm
? isInt<20>(Imm) && IsValidKind
: LoongArchAsmParser::classifySymbolRef(getImm(), VK) &&
@@ -437,15 +428,12 @@ class LoongArchOperand : public MCParsedAsmOperand {
int64_t Imm;
LoongArchMCExpr::Specifier VK = LoongArchMCExpr::VK_None;
bool IsConstantImm = evaluateConstantImm(getImm(), Imm, VK);
- bool IsValidKind = VK == LoongArchMCExpr::VK_None ||
- VK == LoongArchMCExpr::VK_ABS_HI20 ||
- VK == LoongArchMCExpr::VK_GOT_HI20 ||
- VK == LoongArchMCExpr::VK_TLS_GD_HI20 ||
- VK == LoongArchMCExpr::VK_TLS_LD_HI20 ||
- VK == LoongArchMCExpr::VK_TLS_IE_HI20 ||
- VK == LoongArchMCExpr::VK_TLS_LE_HI20 ||
- VK == LoongArchMCExpr::VK_TLS_LE_HI20_R ||
- VK == LoongArchMCExpr::VK_TLS_DESC_HI20;
+ bool IsValidKind =
+ VK == LoongArchMCExpr::VK_None || VK == ELF::R_LARCH_ABS_HI20 ||
+ VK == ELF::R_LARCH_GOT_HI20 || VK == ELF::R_LARCH_TLS_GD_HI20 ||
+ VK == ELF::R_LARCH_TLS_LD_HI20 || VK == ELF::R_LARCH_TLS_IE_HI20 ||
+ VK == ELF::R_LARCH_TLS_LE_HI20 || VK == ELF::R_LARCH_TLS_LE_HI20_R ||
+ VK == ELF::R_LARCH_TLS_DESC_HI20;
return IsConstantImm
? isInt<20>(Imm) && IsValidKind
: LoongArchAsmParser::classifySymbolRef(getImm(), VK) &&
@@ -459,16 +447,14 @@ class LoongArchOperand : public MCParsedAsmOperand {
int64_t Imm;
LoongArchMCExpr::Specifier VK = LoongArchMCExpr::VK_None;
bool IsConstantImm = evaluateConstantImm(getImm(), Imm, VK);
- bool IsValidKind = VK == LoongArchMCExpr::VK_None ||
- VK == LoongArchMCExpr::VK_ABS64_LO20 ||
- VK == LoongArchMCExpr::VK_PCALA64_LO20 ||
- VK == LoongArchMCExpr::VK_GOT64_LO20 ||
- VK == LoongArchMCExpr::VK_GOT64_PC_LO20 ||
- VK == LoongArchMCExpr::VK_TLS_IE64_LO20 ||
- VK == LoongArchMCExpr::VK_TLS_IE64_PC_LO20 ||
- VK == LoongArchMCExpr::VK_TLS_LE64_LO20 ||
- VK == LoongArchMCExpr::VK_TLS_DESC64_PC_LO20 ||
- VK == LoongArchMCExpr::VK_TLS_DESC64_LO20;
+ bool IsValidKind =
+ VK == LoongArchMCExpr::VK_None || VK == ELF::R_LARCH_ABS64_LO20 ||
+ VK == ELF::R_LARCH_PCALA64_LO20 || VK == ELF::R_LARCH_GOT64_LO20 ||
+ VK == ELF::R_LARCH_GOT64_PC_LO20 || VK == ELF::R_LARCH_TLS_IE64_LO20 ||
+ VK == ELF::R_LARCH_TLS_IE64_PC_LO20 ||
+ VK == ELF::R_LARCH_TLS_LE64_LO20 ||
+ VK == ELF::R_LARCH_TLS_DESC64_PC_LO20 ||
+ VK == ELF::R_LARCH_TLS_DESC64_LO20;
return IsConstantImm
? isInt<20>(Imm) && IsValidKind
@@ -484,7 +470,7 @@ class LoongArchOperand : public MCParsedAsmOperand {
LoongArchMCExpr::Specifier VK = LoongArchMCExpr::VK_None;
bool IsConstantImm = evaluateConstantImm(getImm(), Imm, VK);
bool IsValidKind =
- VK == LoongArchMCExpr::VK_None || VK == LoongArchMCExpr::VK_CALL36;
+ VK == LoongArchMCExpr::VK_None || VK == ELF::R_LARCH_CALL36;
return IsConstantImm
? isInt<20>(Imm) && IsValidKind
@@ -500,10 +486,10 @@ class LoongArchOperand : public MCParsedAsmOperand {
LoongArchMCExpr::Specifier VK = LoongArchMCExpr::VK_None;
bool IsConstantImm = evaluateConstantImm(getImm(), Imm, VK);
bool IsValidKind = VK == LoongArchMCExpr::VK_None ||
- VK == LoongArchMCExpr::VK_PCREL20_S2 ||
- VK == LoongArchMCExpr::VK_TLS_LD_PCREL20_S2 ||
- VK == LoongArchMCExpr::VK_TLS_GD_PCREL20_S2 ||
- VK == LoongArchMCExpr::VK_TLS_DESC_PCREL20_S2;
+ VK == ELF::R_LARCH_PCREL20_S2 ||
+ VK == ELF::R_LARCH_TLS_LD_PCREL20_S2 ||
+ VK == ELF::R_LARCH_TLS_GD_PCREL20_S2 ||
+ VK == ELF::R_LARCH_TLS_DESC_PCREL20_S2;
return IsConstantImm
? isInt<20>(Imm) && IsValidKind
: LoongArchAsmParser::classifySymbolRef(getImm(), VK) &&
@@ -517,8 +503,7 @@ class LoongArchOperand : public MCParsedAsmOperand {
int64_t Imm;
LoongArchMCExpr::Specifier VK = LoongArchMCExpr::VK_None;
bool IsConstantImm = evaluateConstantImm(getImm(), Imm, VK);
- bool IsValidKind =
- VK == LoongArchMCExpr::VK_None || VK == LoongArchMCExpr::VK_B21;
+ bool IsValidKind = VK == LoongArchMCExpr::VK_None || VK == ELF::R_LARCH_B21;
return IsConstantImm
? isShiftedInt<21, 2>(Imm) && IsValidKind
: LoongArchAsmParser::classifySymbolRef(getImm(), VK) &&
@@ -534,7 +519,7 @@ class LoongArchOperand : public MCParsedAsmOperand {
bool IsConstantImm = evaluateConstantImm(getImm(), Imm, VK);
bool IsValidKind =
VK == LoongArchMCExpr::VK_None || VK == LoongArchMCExpr::VK_CALL ||
- VK == LoongArchMCExpr::VK_CALL_PLT || VK == LoongArchMCExpr::VK_B26;
+ VK == LoongArchMCExpr::VK_CALL_PLT || VK == ELF::R_LARCH_B26;
return IsConstantImm
? isShiftedInt<26, 2>(Imm) && IsValidKind
: LoongArchAsmParser::classifySymbolRef(getImm(), VK) &&
@@ -888,7 +873,7 @@ void LoongArchAsmParser::emitLAInstSeq(MCRegister DestReg, MCRegister TmpReg,
MCContext &Ctx = getContext();
for (LoongArchAsmParser::Inst &Inst : Insts) {
unsigned Opc = Inst.Opc;
- LoongArchMCExpr::Specifier VK = Inst.VK;
+ auto VK = LoongArchMCExpr::Specifier(Inst.Specifier);
const LoongArchMCExpr *LE =
LoongArchMCExpr::create(Symbol, VK, Ctx, RelaxHint);
switch (Opc) {
@@ -908,7 +893,7 @@ void LoongArchAsmParser::emitLAInstSeq(MCRegister DestReg, MCRegister TmpReg,
MCInstBuilder(Opc).addReg(DestReg).addReg(DestReg).addImm(0),
getSTI());
continue;
- } else if (VK == LoongArchMCExpr::VK_TLS_DESC_LD) {
+ } else if (VK == ELF::R_LARCH_TLS_DESC_LD) {
Out.emitInstruction(MCInstBuilder(Opc)
.addReg(LoongArch::R1)
.addReg(DestReg)
@@ -974,16 +959,16 @@ void LoongArchAsmParser::emitLoadAddressAbs(MCInst &Inst, SMLoc IDLoc,
: Inst.getOperand(2).getExpr();
InstSeq Insts;
- Insts.push_back(LoongArchAsmParser::Inst(LoongArch::LU12I_W,
- LoongArchMCExpr::VK_ABS_HI20));
Insts.push_back(
- LoongArchAsmParser::Inst(LoongArch::ORI, LoongArchMCExpr::VK_ABS_LO12));
+ LoongArchAsmParser::Inst(LoongArch::LU12I_W, ELF::R_LARCH_ABS_HI20));
+ Insts.push_back(
+ LoongArchAsmParser::Inst(LoongArch::ORI, ELF::R_LARCH_ABS_LO12));
if (is64Bit()) {
- Insts.push_back(LoongArchAsmParser::Inst(LoongArch::LU32I_D,
- LoongArchMCExpr::VK_ABS64_LO20));
- Insts.push_back(LoongArchAsmParser::Inst(LoongArch::LU52I_D,
- LoongArchMCExpr::VK_ABS64_HI12));
+ Insts.push_back(
+ LoongArchAsmParser::Inst(LoongArch::LU32I_D, ELF::R_LARCH_ABS64_LO20));
+ Insts.push_back(
+ LoongArchAsmParser::Inst(LoongArch::LU52I_D, ELF::R_LARCH_ABS64_HI12));
}
emitLAInstSeq(DestReg, DestReg, Symbol, Insts, IDLoc, Out);
@@ -1000,10 +985,9 @@ void LoongArchAsmParser::emitLoadAddressPcrel(MCInst &Inst, SMLoc IDLoc,
InstSeq Insts;
unsigned ADDI = is64Bit() ? LoongArch::ADDI_D : LoongArch::ADDI_W;
- Insts.push_back(LoongArchAsmParser::Inst(LoongArch::PCALAU12I,
- LoongArchMCExpr::VK_PCALA_HI20));
Insts.push_back(
- LoongArchAsmParser::Inst(ADDI, LoongArchMCExpr::VK_PCALA_LO12));
+ LoongArchAsmParser::Inst(LoongArch::PCALAU12I, ELF::R_LARCH_PCALA_HI20));
+ Insts.push_back(LoongArchAsmParser::Inst(ADDI, ELF::R_LARCH_PCALA_LO12));
emitLAInstSeq(DestReg, DestReg, Symbol, Insts, IDLoc, Out,
/*RelaxHint=*/true);
@@ -1023,14 +1007,14 @@ void LoongArchAsmParser::emitLoadAddressPcrelLarge(MCInst &Inst, SMLoc IDLoc,
const MCExpr *Symbol = Inst.getOperand(2).getExpr();
InstSeq Insts;
- Insts.push_back(LoongArchAsmParser::Inst(LoongArch::PCALAU12I,
- LoongArchMCExpr::VK_PCALA_HI20));
- Insts.push_back(LoongArchAsmParser::Inst(LoongArch::ADDI_D,
- LoongArchMCExpr::VK_PCALA_LO12));
- Insts.push_back(LoongArchAsmParser::Inst(LoongArch::LU32I_D,
- LoongArchMCExpr::VK_PCALA64_LO20));
- Insts.push_back(LoongArchAsmParser::Inst(LoongArch::LU52I_D,
- LoongArchMCExpr::VK_PCALA64_HI12));
+ Insts.push_back(
+ LoongArchAsmParser::Inst(LoongArch::PCALAU12I, ELF::R_LARCH_PCALA_HI20));
+ Insts.push_back(
+ LoongArchAsmParser::Inst(LoongArch::ADDI_D, ELF::R_LARCH_PCALA_LO12));
+ Insts.push_back(
+ LoongArchAsmParser::Inst(LoongArch::LU32I_D, ELF::R_LARCH_PCALA64_LO20));
+ Insts.push_back(
+ LoongArchAsmParser::Inst(LoongArch::LU52I_D, ELF::R_LARCH_PCALA64_HI12));
Insts.push_back(LoongArchAsmParser::Inst(LoongArch::ADD_D));
emitLAInstSeq(DestReg, TmpReg, Symbol, Insts, IDLoc, Out);
@@ -1057,16 +1041,16 @@ void LoongArchAsmParser::emitLoadAddressGot(MCInst &Inst, SMLoc IDLoc,
// lu32i.d $rd, %got64_lo20(sym)
// lu52i.d $rd, $rd, %got64_hi12(sym)
// ld.d $rd, $rd, 0
- Insts.push_back(LoongArchAsmParser::Inst(LoongArch::LU12I_W,
- LoongArchMCExpr::VK_GOT_HI20));
Insts.push_back(
- LoongArchAsmParser::Inst(LoongArch::ORI, LoongArchMCExpr::VK_GOT_LO12));
+ LoongArchAsmParser::Inst(LoongArch::LU12I_W, ELF::R_LARCH_GOT_HI20));
+ Insts.push_back(
+ LoongArchAsmParser::Inst(LoongArch::ORI, ELF::R_LARCH_GOT_LO12));
if (is64Bit()) {
Insts.push_back(LoongArchAsmParser::Inst(LoongArch::LU32I_D,
- LoongArchMCExpr::VK_GOT64_LO20));
+ ELF::R_LARCH_GOT64_LO20));
Insts.push_back(LoongArchAsmParser::Inst(LoongArch::LU52I_D,
- LoongArchMCExpr::VK_GOT64_HI12));
+ ELF::R_LARCH_GOT64_HI12));
}
Insts.push_back(LoongArchAsmParser::Inst(LD));
emitLAInstSeq(DestReg, DestReg, Symbol, Insts, IDLoc, Out);
@@ -1075,10 +1059,9 @@ void LoongArchAsmParser::emitLoadAddressGot(MCInst &Inst, SMLoc IDLoc,
// expands to:
// pcalau12i $rd, %got_pc_hi20(sym)
// ld.w/d $rd, $rd, %got_pc_lo12(sym)
- Insts.push_back(LoongArchAsmParser::Inst(LoongArch::PCALAU12I,
- LoongArchMCExpr::VK_GOT_PC_HI20));
Insts.push_back(
- LoongArchAsmParser::Inst(LD, LoongArchMCExpr::VK_GOT_PC_LO12));
+ LoongArchAsmParser::Inst(LoongArch::PCALAU12I, ELF::R_LARCH_GOT_PC_HI20));
+ Insts.push_back(LoongArchAsmParser::Inst(LD, ELF::R_LARCH_GOT_PC_LO12));
emitLAInstSeq(DestReg, DestReg, Symbol, Insts, IDLoc, Out,
/*RelaxHint=*/true);
@@ -1098,14 +1081,14 @@ void LoongArchAsmParser::emitLoadAddressGotLarge(MCInst &Inst, SMLoc IDLoc,
const MCExpr *Symbol = Inst.getOperand(2).getExpr();
InstSeq Insts;
- Insts.push_back(LoongArchAsmParser::Inst(LoongArch::PCALAU12I,
- LoongArchMCExpr::VK_GOT_PC_HI20));
- Insts.push_back(LoongArchAsmParser::Inst(LoongArch::ADDI_D,
- LoongArchMCExpr::VK_GOT_PC_LO12));
- Insts.push_back(LoongArchAsmParser::Inst(LoongArch::LU32I_D,
- LoongArchMCExpr::VK_GOT64_PC_LO20));
- Insts.push_back(LoongArchAsmParser::Inst(LoongArch::LU52I_D,
- LoongArchMCExpr::VK_GOT64_PC_HI12));
+ Insts.push_back(
+ LoongArchAsmParser::Inst(LoongArch::PCALAU12I, ELF::R_LARCH_GOT_PC_HI20));
+ Insts.push_back(
+ LoongArchAsmParser::Inst(LoongArch::ADDI_D, ELF::R_LARCH_GOT_PC_LO12));
+ Insts.push_back(
+ LoongArchAsmParser::Inst(LoongArch::LU32I_D, ELF::R_LARCH_GOT64_PC_LO20));
+ Insts.push_back(
+ LoongArchAsmParser::Inst(LoongArch::LU52I_D, ELF::R_LARCH_GOT64_PC_HI12));
Insts.push_back(LoongArchAsmParser::Inst(LoongArch::LDX_D));
emitLAInstSeq(DestReg, TmpReg, Symbol, Insts, IDLoc, Out);
@@ -1121,10 +1104,10 @@ void LoongArchAsmParser::emitLoadAddressTLSLE(MCInst &Inst, SMLoc IDLoc,
const MCExpr *Symbol = Inst.getOperand(1).getExpr();
InstSeq Insts;
- Insts.push_back(LoongArchAsmParser::Inst(LoongArch::LU12I_W,
- LoongArchMCExpr::VK_TLS_LE_HI20));
- Insts.push_back(LoongArchAsmParser::Inst(LoongArch::ORI,
- LoongArchMCExpr::VK_TLS_LE_LO12));
+ Insts.push_back(
+ LoongArchAsmParser::Inst(LoongArch::LU12I_W, ELF::R_LARCH_TLS_LE_HI20));
+ Insts.push_back(
+ LoongArchAsmParser::Inst(LoongArch::ORI, ELF::R_LARCH_TLS_LE_LO12));
emitLAInstSeq(DestReg, DestReg, Symbol, Insts, IDLoc, Out);
}
@@ -1150,16 +1133,16 @@ void LoongArchAsmParser::emitLoadAddressTLSIE(MCInst &Inst, SMLoc IDLoc,
// lu32i.d $rd, %ie64_lo20(sym)
// lu52i.d $rd, $rd, %ie64_hi12(sym)
// ld.d $rd, $rd, 0
- Insts.push_back(LoongArchAsmParser::Inst(LoongArch::LU12I_W,
- LoongArchMCExpr::VK_TLS_IE_HI20));
- Insts.push_back(LoongArchAsmParser::Inst(LoongArch::ORI,
- LoongArchMCExpr::VK_TLS_IE_LO12));
+ Insts.push_back(
+ LoongArchAsmParser::Inst(LoongArch::LU12I_W, ELF::R_LARCH_TLS_IE_HI20));
+ Insts.push_back(
+ LoongArchAsmParser::Inst(LoongArch::ORI, ELF::R_LARCH_TLS_IE_LO12));
if (is64Bit()) {
- Insts.push_back(LoongArchAsmParser::Inst(
- LoongArch::LU32I_D, LoongArchMCExpr::VK_TLS_IE64_LO20));
- Insts.push_back(LoongArchAsmParser::Inst(
- LoongArch::LU52I_D, LoongArchMCExpr::VK_TLS_IE64_HI12));
+ Insts.push_back(LoongArchAsmParser::Inst(LoongArch::LU32I_D,
+ ELF::R_LARCH_TLS_IE64_LO20));
+ Insts.push_back(LoongArchAsmParser::Inst(LoongArch::LU52I_D,
+ ELF::R_LARCH_TLS_IE64_HI12));
}
Insts.push_back(LoongArchAsmParser::Inst(LD));
emitLAInstSeq(DestReg, DestReg, Symbol, Insts, IDLoc, Out);
@@ -1170,9 +1153,8 @@ void LoongArchAsmParser::emitLoadAddressTLSIE(MCInst &Inst, SMLoc IDLoc,
// pcalau12i $rd, %ie_pc_hi20(sym)
// ld.w/d $rd, $rd, %ie_pc_lo12(sym)
Insts.push_back(LoongArchAsmParser::Inst(LoongArch::PCALAU12I,
- LoongArchMCExpr::VK_TLS_IE_PC_HI20));
- Insts.push_back(
- LoongArchAsmParser::Inst(LD, LoongArchMCExpr::VK_TLS_IE_PC_LO12));
+ ELF::R_LARCH_TLS_IE_PC_HI20));
+ Insts.push_back(LoongArchAsmParser::Inst(LD, ELF::R_LARCH_TLS_IE_PC_LO12));
emitLAInstSeq(DestReg, DestReg, Symbol, Insts, IDLoc, Out,
/*RelaxHint=*/true);
@@ -1193,13 +1175,13 @@ void LoongArchAsmParser::emitLoadAddressTLSIELarge(MCInst &Inst, SMLoc IDLoc,
InstSeq Insts;
Insts.push_back(LoongArchAsmParser::Inst(LoongArch::PCALAU12I,
- LoongArchMCExpr::VK_TLS_IE_PC_HI20));
- Insts.push_back(LoongArchAsmParser::Inst(LoongArch::ADDI_D,
- LoongArchMCExpr::VK_TLS_IE_PC_LO12));
- Insts.push_back(LoongArchAsmParser::Inst(
- LoongArch::LU32I_D, LoongArchMCExpr::VK_TLS_IE64_PC_LO20));
- Insts.push_back(LoongArchAsmParser::Inst(
- LoongArch::LU52I_D, LoongArchMCExpr::VK_TLS_IE64_PC_HI12));
+ ELF::R_LARCH_TLS_IE_PC_HI20));
+ Insts.push_back(
+ LoongArchAsmParser::Inst(LoongArch::ADDI_D, ELF::R_LARCH_TLS_IE_PC_LO12));
+ Insts.push_back(LoongArchAsmParser::Inst(LoongArch::LU32I_D,
+ ELF::R_LARCH_TLS_IE64_PC_LO20));
+ Insts.push_back(LoongArchAsmParser::Inst(LoongArch::LU52I_D,
+ ELF::R_LARCH_TLS_IE64_PC_HI12));
Insts.push_back(LoongArchAsmParser::Inst(LoongArch::LDX_D));
emitLAInstSeq(DestReg, TmpReg, Symbol, Insts, IDLoc, Out);
@@ -1224,16 +1206,16 @@ void LoongArchAsmParser::emitLoadAddressTLSLD(MCInst &Inst, SMLoc IDLoc,
// ori $rd, $rd, %got_lo12(sym)
// lu32i.d $rd, %got64_lo20(sym)
// lu52i.d $rd, $rd, %got64_hi12(sym)
- Insts.push_back(LoongArchAsmParser::Inst(LoongArch::LU12I_W,
- LoongArchMCExpr::VK_TLS_LD_HI20));
Insts.push_back(
- LoongArchAsmParser::Inst(LoongArch::ORI, LoongArchMCExpr::VK_GOT_LO12));
+ LoongArchAsmParser::Inst(LoongArch::LU12I_W, ELF::R_LARCH_TLS_LD_HI20));
+ Insts.push_back(
+ LoongArchAsmParser::Inst(LoongArch::ORI, ELF::R_LARCH_GOT_LO12));
if (is64Bit()) {
Insts.push_back(LoongArchAsmParser::Inst(LoongArch::LU32I_D,
- LoongArchMCExpr::VK_GOT64_LO20));
+ ELF::R_LARCH_GOT64_LO20));
Insts.push_back(LoongArchAsmParser::Inst(LoongArch::LU52I_D,
- LoongArchMCExpr::VK_GOT64_HI12));
+ ELF::R_LARCH_GOT64_HI12));
}
emitLAInstSeq(DestReg, DestReg, Symbol, Insts, IDLoc, Out);
return;
@@ -1243,9 +1225,8 @@ void LoongArchAsmParser::emitLoadAddressTLSLD(MCInst &Inst, SMLoc IDLoc,
// pcalau12i $rd, %ld_pc_hi20(sym)
// addi.w/d $rd, $rd, %got_pc_lo12(sym)
Insts.push_back(LoongArchAsmParser::Inst(LoongArch::PCALAU12I,
- LoongArchMCExpr::VK_TLS_LD_PC_HI20));
- Insts.push_back(
- LoongArchAsmParser::Inst(ADDI, LoongArchMCExpr::VK_GOT_PC_LO12));
+ ELF::R_LARCH_TLS_LD_PC_HI20));
+ Insts.push_back(LoongArchAsmParser::Inst(ADDI, ELF::R_LARCH_GOT_PC_LO12));
emitLAInstSeq(DestReg, DestReg, Symbol, Insts, IDLoc, Out,
/*RelaxHint=*/true);
@@ -1266,13 +1247,13 @@ void LoongArchAsmParser::emitLoadAddressTLSLDLarge(MCInst &Inst, SMLoc IDLoc,
InstSeq Insts;
Insts.push_back(LoongArchAsmParser::Inst(LoongArch::PCALAU12I,
- LoongArchMCExpr::VK_TLS_LD_PC_HI20));
- Insts.push_back(LoongArchAsmParser::Inst(LoongArch::ADDI_D,
- LoongArchMCExpr::VK_GOT_PC_LO12));
- Insts.push_back(LoongArchAsmParser::Inst(LoongArch::LU32I_D,
- LoongArchMCExpr::VK_GOT64_PC_LO20));
- Insts.push_back(LoongArchAsmParser::Inst(LoongArch::LU52I_D,
- LoongArchMCExpr::VK_GOT64_PC_HI12));
+ ELF::R_LARCH_TLS_LD_PC_HI20));
+ Insts.push_back(
+ LoongArchAsmParser::Inst(LoongArch::ADDI_D, ELF::R_LARCH_GOT_PC_LO12));
+ Insts.push_back(
+ LoongArchAsmParser::Inst(LoongArch::LU32I_D, ELF::R_LARCH_GOT64_PC_LO20));
+ Insts.push_back(
+ LoongArchAsmParser::Inst(LoongArch::LU52I_D, ELF::R_LARCH_GOT64_PC_HI12));
Insts.push_back(LoongArchAsmParser::Inst(LoongArch::ADD_D));
emitLAInstSeq(DestReg, TmpReg, Symbol, Insts, IDLoc, Out);
@@ -1297,16 +1278,16 @@ void LoongArchAsmParser::emitLoadAddressTLSGD(MCInst &Inst, SMLoc IDLoc,
// ori $rd, $rd, %got_lo12(sym)
// lu32i.d $rd, %got64_lo20(sym)
// lu52i.d $rd, $rd, %got64_hi12(sym)
- Insts.push_back(LoongArchAsmParser::Inst(LoongArch::LU12I_W,
- LoongArchMCExpr::VK_TLS_GD_HI20));
Insts.push_back(
- LoongArchAsmParser::Inst(LoongArch::ORI, LoongArchMCExpr::VK_GOT_LO12));
+ LoongArchAsmParser::Inst(LoongArch::LU12I_W, ELF::R_LARCH_TLS_GD_HI20));
+ Insts.push_back(
+ LoongArchAsmParser::Inst(LoongArch::ORI, ELF::R_LARCH_GOT_LO12));
if (is64Bit()) {
Insts.push_back(LoongArchAsmParser::Inst(LoongArch::LU32I_D,
- LoongArchMCExpr::VK_GOT64_LO20));
+ ELF::R_LARCH_GOT64_LO20));
Insts.push_back(LoongArchAsmParser::Inst(LoongArch::LU52I_D,
- LoongArchMCExpr::VK_GOT64_HI12));
+ ELF::R_LARCH_GOT64_HI12));
}
emitLAInstSeq(DestReg, DestReg, Symbol, Insts, IDLoc, Out);
return;
@@ -1316,9 +1297,8 @@ void LoongArchAsmParser::emitLoadAddressTLSGD(MCInst &Inst, SMLoc IDLoc,
// pcalau12i $rd, %gd_pc_hi20(sym)
// addi.w/d $rd, $rd, %got_pc_lo12(sym)
Insts.push_back(LoongArchAsmParser::Inst(LoongArch::PCALAU12I,
- LoongArchMCExpr::VK_TLS_GD_PC_HI20));
- Insts.push_back(
- LoongArchAsmParser::Inst(ADDI, LoongArchMCExpr::VK_GOT_PC_LO12));
+ ELF::R_LARCH_TLS_GD_PC_HI20));
+ Insts.push_back(LoongArchAsmParser::Inst(ADDI, ELF::R_LARCH_GOT_PC_LO12));
emitLAInstSeq(DestReg, DestReg, Symbol, Insts, IDLoc, Out,
/*RelaxHint=*/true);
@@ -1339,13 +1319,13 @@ void LoongArchAsmParser::emitLoadAddressTLSGDLarge(MCInst &Inst, SMLoc IDLoc,
InstSeq Insts;
Insts.push_back(LoongArchAsmParser::Inst(LoongArch::PCALAU12I,
- LoongArchMCExpr::VK_TLS_GD_PC_HI20));
- Insts.push_back(LoongArchAsmParser::Inst(LoongArch::ADDI_D,
- LoongArchMCExpr::VK_GOT_PC_LO12));
- Insts.push_back(LoongArchAsmParser::Inst(LoongArch::LU32I_D,
- LoongArchMCExpr::VK_GOT64_PC_LO20));
- Insts.push_back(LoongArchAsmParser::Inst(LoongArch::LU52I_D,
- LoongArchMCExpr::VK_GOT64_PC_HI12));
+ ELF::R_LARCH_TLS_GD_PC_HI20));
+ Insts.push_back(
+ LoongArchAsmParser::Inst(LoongArch::ADDI_D, ELF::R_LARCH_GOT_PC_LO12));
+ Insts.push_back(
+ LoongArchAsmParser::Inst(LoongArch::LU32I_D, ELF::R_LARCH_GOT64_PC_LO20));
+ Insts.push_back(
+ LoongArchAsmParser::Inst(LoongArch::LU52I_D, ELF::R_LARCH_GOT64_PC_HI12));
Insts.push_back(LoongArchAsmParser::Inst(LoongArch::ADD_D));
emitLAInstSeq(DestReg, TmpReg, Symbol, Insts, IDLoc, Out);
@@ -1375,22 +1355,21 @@ void LoongArchAsmParser::emitLoadAddressTLSDesc(MCInst &Inst, SMLoc IDLoc,
// lu52i.d $rd, $rd, %desc64_hi12(sym)
// ld.d $ra, $rd, %desc_ld(sym)
// jirl $ra, $ra, %desc_call(sym)
- Insts.push_back(LoongArchAsmParser::Inst(
- LoongArch::LU12I_W, LoongArchMCExpr::VK_TLS_DESC_HI20));
- Insts.push_back(LoongArchAsmParser::Inst(
- LoongArch::ORI, LoongArchMCExpr::VK_TLS_DESC_LO12));
+ Insts.push_back(LoongArchAsmParser::Inst(LoongArch::LU12I_W,
+ ELF::R_LARCH_TLS_DESC_HI20));
+ Insts.push_back(
+ LoongArchAsmParser::Inst(LoongArch::ORI, ELF::R_LARCH_TLS_DESC_LO12));
if (is64Bit()) {
- Insts.push_back(LoongArchAsmParser::Inst(
- LoongArch::LU32I_D, LoongArchMCExpr::VK_TLS_DESC64_LO20));
- Insts.push_back(LoongArchAsmParser::Inst(
- LoongArch::LU52I_D, LoongArchMCExpr::VK_TLS_DESC64_HI12));
+ Insts.push_back(LoongArchAsmParser::Inst(LoongArch::LU32I_D,
+ ELF::R_LARCH_TLS_DESC64_LO20));
+ Insts.push_back(LoongArchAsmParser::Inst(LoongArch::LU52I_D,
+ ELF::R_LARCH_TLS_DESC64_HI12));
}
+ Insts.push_back(LoongArchAsmParser::Inst(LD, ELF::R_LARCH_TLS_DESC_LD));
Insts.push_back(
- LoongArchAsmParser::Inst(LD, LoongArchMCExpr::VK_TLS_DESC_LD));
- Insts.push_back(LoongArchAsmParser::Inst(
- LoongArch::JIRL, LoongArchMCExpr::VK_TLS_DESC_CALL));
+ LoongArchAsmParser::Inst(LoongArch::JIRL, ELF::R_LARCH_TLS_DESC_CALL));
emitLAInstSeq(DestReg, DestReg, Symbol, Insts, IDLoc, Out);
return;
@@ -1401,14 +1380,13 @@ void LoongArchAsmParser::emitLoadAddressTLSDesc(MCInst &Inst, SMLoc IDLoc,
// addi.w/d $rd, $rd, %desc_pc_lo12(sym)
// ld.w/d $ra, $rd, %desc_ld(sym)
// jirl $ra, $ra, %desc_call(sym)
- Insts.push_back(LoongArchAsmParser::Inst(
- LoongArch::PCALAU12I, LoongArchMCExpr::VK_TLS_DESC_PC_HI20));
+ Insts.push_back(LoongArchAsmParser::Inst(LoongArch::PCALAU12I,
+ ELF::R_LARCH_TLS_DESC_PC_HI20));
Insts.push_back(
- LoongArchAsmParser::Inst(ADDI, LoongArchMCExpr::VK_TLS_DESC_PC_LO12));
+ LoongArchAsmParser::Inst(ADDI, ELF::R_LARCH_TLS_DESC_PC_LO12));
+ Insts.push_back(LoongArchAsmParser::Inst(LD, ELF::R_LARCH_TLS_DESC_LD));
Insts.push_back(
- LoongArchAsmParser::Inst(LD, LoongArchMCExpr::VK_TLS_DESC_LD));
- Insts.push_back(LoongArchAsmParser::Inst(LoongArch::JIRL,
- LoongArchMCExpr::VK_TLS_DESC_CALL));
+ LoongArchAsmParser::Inst(LoongArch::JIRL, ELF::R_LARCH_TLS_DESC_CALL));
emitLAInstSeq(DestReg, DestReg, Symbol, Insts, IDLoc, Out,
/*RelaxHint=*/true);
@@ -1430,19 +1408,19 @@ void LoongArchAsmParser::emitLoadAddressTLSDescLarge(MCInst &Inst, SMLoc IDLoc,
const MCExpr *Symbol = Inst.getOperand(2).getExpr();
InstSeq Insts;
- Insts.push_back(LoongArchAsmParser::Inst(
- LoongArch::PCALAU12I, LoongArchMCExpr::VK_TLS_DESC_PC_HI20));
- Insts.push_back(LoongArchAsmParser::Inst(
- LoongArch::ADDI_D, LoongArchMCExpr::VK_TLS_DESC_PC_LO12));
- Insts.push_back(LoongArchAsmParser::Inst(
- LoongArch::LU32I_D, LoongArchMCExpr::VK_TLS_DESC64_PC_LO20));
- Insts.push_back(LoongArchAsmParser::Inst(
- LoongArch::LU52I_D, LoongArchMCExpr::VK_TLS_DESC64_PC_HI12));
+ Insts.push_back(LoongArchAsmParser::Inst(LoongArch::PCALAU12I,
+ ELF::R_LARCH_TLS_DESC_PC_HI20));
+ Insts.push_back(LoongArchAsmParser::Inst(LoongArch::ADDI_D,
+ ELF::R_LARCH_TLS_DESC_PC_LO12));
+ Insts.push_back(LoongArchAsmParser::Inst(LoongArch::LU32I_D,
+ ELF::R_LARCH_TLS_DESC64_PC_LO20));
+ Insts.push_back(LoongArchAsmParser::Inst(LoongArch::LU52I_D,
+ ELF::R_LARCH_TLS_DESC64_PC_HI12));
Insts.push_back(LoongArchAsmParser::Inst(LoongArch::ADD_D));
- Insts.push_back(LoongArchAsmParser::Inst(LoongArch::LD_D,
- LoongArchMCExpr::VK_TLS_DESC_LD));
- Insts.push_back(LoongArchAsmParser::Inst(LoongArch::JIRL,
- LoongArchMCExpr::VK_TLS_DESC_CALL));
+ Insts.push_back(
+ LoongArchAsmParser::Inst(LoongArch::LD_D, ELF::R_LARCH_TLS_DESC_LD));
+ Insts.push_back(
+ LoongArchAsmParser::Inst(LoongArch::JIRL, ELF::R_LARCH_TLS_DESC_CALL));
emitLAInstSeq(DestReg, TmpReg, Symbol, Insts, IDLoc, Out);
}
@@ -1503,7 +1481,7 @@ void LoongArchAsmParser::emitFuncCall36(MCInst &Inst, SMLoc IDLoc,
const MCExpr *Sym =
IsTailCall ? Inst.getOperand(1).getExpr() : Inst.getOperand(0).getExpr();
const LoongArchMCExpr *LE = LoongArchMCExpr::create(
- Sym, LoongArchMCExpr::VK_CALL36, getContext(), /*RelaxHint=*/true);
+ Sym, ELF::R_LARCH_CALL36, getContext(), /*RelaxHint=*/true);
Out.emitInstruction(
MCInstBuilder(LoongArch::PCADDU18I).addReg(ScratchReg).addExpr(LE),
diff --git a/llvm/lib/Target/LoongArch/LoongArchMCInstLower.cpp b/llvm/lib/Target/LoongArch/LoongArchMCInstLower.cpp
index 5632859f73786..ae76463e7ebc8 100644
--- a/llvm/lib/Target/LoongArch/LoongArchMCInstLower.cpp
+++ b/llvm/lib/Target/LoongArch/LoongArchMCInstLower.cpp
@@ -14,6 +14,7 @@
#include "LoongArch.h"
#include "MCTargetDesc/LoongArchBaseInfo.h"
#include "MCTargetDesc/LoongArchMCExpr.h"
+#include "llvm/BinaryFormat/ELF.h"
#include "llvm/CodeGen/AsmPrinter.h"
#include "llvm/CodeGen/MachineBasicBlock.h"
#include "llvm/CodeGen/MachineInstr.h"
@@ -25,7 +26,7 @@ using namespace llvm;
static MCOperand lowerSymbolOperand(const MachineOperand &MO, MCSymbol *Sym,
const AsmPrinter &AP) {
MCContext &Ctx = AP.OutContext;
- LoongArchMCExpr::Specifier Kind;
+ uint16_t Kind = 0;
switch (LoongArchII::getDirectFlags(MO)) {
default:
@@ -40,88 +41,88 @@ static MCOperand lowerSymbolOperand(const MachineOperand &MO, MCSymbol *Sym,
Kind = LoongArchMCExpr::VK_CALL_PLT;
break;
case LoongArchII::MO_PCREL_HI:
- Kind = LoongArchMCExpr::VK_PCALA_HI20;
+ Kind = ELF::R_LARCH_PCALA_HI20;
break;
case LoongArchII::MO_PCREL_LO:
- Kind = LoongArchMCExpr::VK_PCALA_LO12;
+ Kind = ELF::R_LARCH_PCALA_LO12;
break;
case LoongArchII::MO_PCREL64_LO:
- Kind = LoongArchMCExpr::VK_PCALA64_LO20;
+ Kind = ELF::R_LARCH_PCALA64_LO20;
break;
case LoongArchII::MO_PCREL64_HI:
- Kind = LoongArchMCExpr::VK_PCALA64_HI12;
+ Kind = ELF::R_LARCH_PCALA64_HI12;
break;
case LoongArchII::MO_GOT_PC_HI:
- Kind = LoongArchMCExpr::VK_GOT_PC_HI20;
+ Kind = ELF::R_LARCH_GOT_PC_HI20;
break;
case LoongArchII::MO_GOT_PC_LO:
- Kind = LoongArchMCExpr::VK_GOT_PC_LO12;
+ Kind = ELF::R_LARCH_GOT_PC_LO12;
break;
case LoongArchII::MO_GOT_PC64_LO:
- Kind = LoongArchMCExpr::VK_GOT64_PC_LO20;
+ Kind = ELF::R_LARCH_GOT64_PC_LO20;
break;
case LoongArchII::MO_GOT_PC64_HI:
- Kind = LoongArchMCExpr::VK_GOT64_PC_HI12;
+ Kind = ELF::R_LARCH_GOT64_PC_HI12;
break;
case LoongArchII::MO_LE_HI:
- Kind = LoongArchMCExpr::VK_TLS_LE_HI20;
+ Kind = ELF::R_LARCH_TLS_LE_HI20;
break;
case LoongArchII::MO_LE_LO:
- Kind = LoongArchMCExpr::VK_TLS_LE_LO12;
+ Kind = ELF::R_LARCH_TLS_LE_LO12;
break;
case LoongArchII::MO_LE64_LO:
- Kind = LoongArchMCExpr::VK_TLS_LE64_LO20;
+ Kind = ELF::R_LARCH_TLS_LE64_LO20;
break;
case LoongArchII::MO_LE64_HI:
- Kind = LoongArchMCExpr::VK_TLS_LE64_HI12;
+ Kind = ELF::R_LARCH_TLS_LE64_HI12;
break;
case LoongArchII::MO_IE_PC_HI:
- Kind = LoongArchMCExpr::VK_TLS_IE_PC_HI20;
+ Kind = ELF::R_LARCH_TLS_IE_PC_HI20;
break;
case LoongArchII::MO_IE_PC_LO:
- Kind = LoongArchMCExpr::VK_TLS_IE_PC_LO12;
+ Kind = ELF::R_LARCH_TLS_IE_PC_LO12;
break;
case LoongArchII::MO_IE_PC64_LO:
- Kind = LoongArchMCExpr::VK_TLS_IE64_PC_LO20;
+ Kind = ELF::R_LARCH_TLS_IE64_PC_LO20;
break;
case LoongArchII::MO_IE_PC64_HI:
- Kind = LoongArchMCExpr::VK_TLS_IE64_PC_HI12;
+ Kind = ELF::R_LARCH_TLS_IE64_PC_HI12;
break;
case LoongArchII::MO_LD_PC_HI:
- Kind = LoongArchMCExpr::VK_TLS_LD_PC_HI20;
+ Kind = ELF::R_LARCH_TLS_LD_PC_HI20;
break;
case LoongArchII::MO_GD_PC_HI:
- Kind = LoongArchMCExpr::VK_TLS_GD_PC_HI20;
+ Kind = ELF::R_LARCH_TLS_GD_PC_HI20;
break;
case LoongArchII::MO_CALL36:
- Kind = LoongArchMCExpr::VK_CALL36;
+ Kind = ELF::R_LARCH_CALL36;
break;
case LoongArchII::MO_DESC_PC_HI:
- Kind = LoongArchMCExpr::VK_TLS_DESC_PC_HI20;
+ Kind = ELF::R_LARCH_TLS_DESC_PC_HI20;
break;
case LoongArchII::MO_DESC_PC_LO:
- Kind = LoongArchMCExpr::VK_TLS_DESC_PC_LO12;
+ Kind = ELF::R_LARCH_TLS_DESC_PC_LO12;
break;
case LoongArchII::MO_DESC64_PC_LO:
- Kind = LoongArchMCExpr::VK_TLS_DESC64_PC_LO20;
+ Kind = ELF::R_LARCH_TLS_DESC64_PC_LO20;
break;
case LoongArchII::MO_DESC64_PC_HI:
- Kind = LoongArchMCExpr::VK_TLS_DESC64_PC_HI12;
+ Kind = ELF::R_LARCH_TLS_DESC64_PC_HI12;
break;
case LoongArchII::MO_DESC_LD:
- Kind = LoongArchMCExpr::VK_TLS_DESC_LD;
+ Kind = ELF::R_LARCH_TLS_DESC_LD;
break;
case LoongArchII::MO_DESC_CALL:
- Kind = LoongArchMCExpr::VK_TLS_DESC_CALL;
+ Kind = ELF::R_LARCH_TLS_DESC_CALL;
break;
case LoongArchII::MO_LE_HI_R:
- Kind = LoongArchMCExpr::VK_TLS_LE_HI20_R;
+ Kind = ELF::R_LARCH_TLS_LE_HI20_R;
break;
case LoongArchII::MO_LE_ADD_R:
- Kind = LoongArchMCExpr::VK_TLS_LE_ADD_R;
+ Kind = ELF::R_LARCH_TLS_LE_ADD_R;
break;
case LoongArchII::MO_LE_LO_R:
- Kind = LoongArchMCExpr::VK_TLS_LE_LO12_R;
+ Kind = ELF::R_LARCH_TLS_LE_LO12_R;
break;
// TODO: Handle more target-flags.
}
diff --git a/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchELFObjectWriter.cpp b/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchELFObjectWriter.cpp
index 5b6ecc1e8bc1f..c6305d8693a26 100644
--- a/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchELFObjectWriter.cpp
+++ b/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchELFObjectWriter.cpp
@@ -51,19 +51,19 @@ unsigned LoongArchELFObjectWriter::getRelocType(MCContext &Ctx,
const MCFixup &Fixup,
bool IsPCRel) const {
switch (Target.getSpecifier()) {
- case LoongArchMCExpr::VK_TLS_LE_HI20:
- case LoongArchMCExpr::VK_TLS_IE_PC_HI20:
- case LoongArchMCExpr::VK_TLS_IE_HI20:
- case LoongArchMCExpr::VK_TLS_LD_PC_HI20:
- case LoongArchMCExpr::VK_TLS_LD_HI20:
- case LoongArchMCExpr::VK_TLS_GD_PC_HI20:
- case LoongArchMCExpr::VK_TLS_GD_HI20:
- case LoongArchMCExpr::VK_TLS_DESC_PC_HI20:
- case LoongArchMCExpr::VK_TLS_DESC_HI20:
- case LoongArchMCExpr::VK_TLS_LE_HI20_R:
- case LoongArchMCExpr::VK_TLS_LD_PCREL20_S2:
- case LoongArchMCExpr::VK_TLS_GD_PCREL20_S2:
- case LoongArchMCExpr::VK_TLS_DESC_PCREL20_S2:
+ case ELF::R_LARCH_TLS_LE_HI20:
+ case ELF::R_LARCH_TLS_IE_PC_HI20:
+ case ELF::R_LARCH_TLS_IE_HI20:
+ case ELF::R_LARCH_TLS_LD_PC_HI20:
+ case ELF::R_LARCH_TLS_LD_HI20:
+ case ELF::R_LARCH_TLS_GD_PC_HI20:
+ case ELF::R_LARCH_TLS_GD_HI20:
+ case ELF::R_LARCH_TLS_DESC_PC_HI20:
+ case ELF::R_LARCH_TLS_DESC_HI20:
+ case ELF::R_LARCH_TLS_LE_HI20_R:
+ case ELF::R_LARCH_TLS_LD_PCREL20_S2:
+ case ELF::R_LARCH_TLS_GD_PCREL20_S2:
+ case ELF::R_LARCH_TLS_DESC_PCREL20_S2:
if (auto *SA = Target.getAddSym())
cast<MCSymbolELF>(SA)->setType(ELF::STT_TLS);
break;
diff --git a/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchMCCodeEmitter.cpp b/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchMCCodeEmitter.cpp
index fa965d144b726..d16fb5c52b8e8 100644
--- a/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchMCCodeEmitter.cpp
+++ b/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchMCCodeEmitter.cpp
@@ -132,175 +132,42 @@ LoongArchMCCodeEmitter::getExprOpValue(const MCInst &MI, const MCOperand &MO,
unsigned FixupKind = LoongArch::fixup_loongarch_invalid;
if (Kind == MCExpr::Target) {
const LoongArchMCExpr *LAExpr = cast<LoongArchMCExpr>(Expr);
-
+ FixupKind = LAExpr->getSpecifier();
RelaxCandidate = LAExpr->getRelaxHint();
- switch (LAExpr->getSpecifier()) {
+ switch (uint16_t(LAExpr->getSpecifier())) {
case LoongArchMCExpr::VK_None:
llvm_unreachable("Unhandled fixup kind!");
- case LoongArchMCExpr::VK_TLS_LE_ADD_R:
- llvm_unreachable("VK_TLS_LE_ADD_R should not represent an "
+ case ELF::R_LARCH_TLS_LE_ADD_R:
+ llvm_unreachable("ELF::R_LARCH_TLS_LE_ADD_R should not represent an "
"instruction operand");
- case LoongArchMCExpr::VK_B16:
+ case ELF::R_LARCH_B16:
FixupKind = LoongArch::fixup_loongarch_b16;
break;
- case LoongArchMCExpr::VK_B21:
+ case ELF::R_LARCH_B21:
FixupKind = LoongArch::fixup_loongarch_b21;
break;
- case LoongArchMCExpr::VK_B26:
+ case ELF::R_LARCH_B26:
case LoongArchMCExpr::VK_CALL:
case LoongArchMCExpr::VK_CALL_PLT:
FixupKind = LoongArch::fixup_loongarch_b26;
break;
- case LoongArchMCExpr::VK_ABS_HI20:
+ case ELF::R_LARCH_ABS_HI20:
FixupKind = LoongArch::fixup_loongarch_abs_hi20;
break;
- case LoongArchMCExpr::VK_ABS_LO12:
+ case ELF::R_LARCH_ABS_LO12:
FixupKind = LoongArch::fixup_loongarch_abs_lo12;
break;
- case LoongArchMCExpr::VK_ABS64_LO20:
+ case ELF::R_LARCH_ABS64_LO20:
FixupKind = LoongArch::fixup_loongarch_abs64_lo20;
break;
- case LoongArchMCExpr::VK_ABS64_HI12:
+ case ELF::R_LARCH_ABS64_HI12:
FixupKind = LoongArch::fixup_loongarch_abs64_hi12;
break;
- case LoongArchMCExpr::VK_PCALA_HI20:
- FixupKind = ELF::R_LARCH_PCALA_HI20;
- break;
- case LoongArchMCExpr::VK_PCALA_LO12:
- FixupKind = ELF::R_LARCH_PCALA_LO12;
- break;
- case LoongArchMCExpr::VK_PCALA64_LO20:
- FixupKind = ELF::R_LARCH_PCALA64_LO20;
- break;
- case LoongArchMCExpr::VK_PCALA64_HI12:
- FixupKind = ELF::R_LARCH_PCALA64_HI12;
- break;
- case LoongArchMCExpr::VK_GOT_PC_HI20:
- FixupKind = ELF::R_LARCH_GOT_PC_HI20;
- break;
- case LoongArchMCExpr::VK_GOT_PC_LO12:
- FixupKind = ELF::R_LARCH_GOT_PC_LO12;
- break;
- case LoongArchMCExpr::VK_GOT64_PC_LO20:
- FixupKind = ELF::R_LARCH_GOT64_PC_LO20;
- break;
- case LoongArchMCExpr::VK_GOT64_PC_HI12:
- FixupKind = ELF::R_LARCH_GOT64_PC_HI12;
- break;
- case LoongArchMCExpr::VK_GOT_HI20:
- FixupKind = ELF::R_LARCH_GOT_HI20;
- break;
- case LoongArchMCExpr::VK_GOT_LO12:
- FixupKind = ELF::R_LARCH_GOT_LO12;
- break;
- case LoongArchMCExpr::VK_GOT64_LO20:
- FixupKind = ELF::R_LARCH_GOT64_LO20;
- break;
- case LoongArchMCExpr::VK_GOT64_HI12:
- FixupKind = ELF::R_LARCH_GOT64_HI12;
- break;
- case LoongArchMCExpr::VK_TLS_LE_HI20:
- FixupKind = ELF::R_LARCH_TLS_LE_HI20;
- break;
- case LoongArchMCExpr::VK_TLS_LE_LO12:
- FixupKind = ELF::R_LARCH_TLS_LE_LO12;
- break;
- case LoongArchMCExpr::VK_TLS_LE64_LO20:
- FixupKind = ELF::R_LARCH_TLS_LE64_LO20;
- break;
- case LoongArchMCExpr::VK_TLS_LE64_HI12:
- FixupKind = ELF::R_LARCH_TLS_LE64_HI12;
- break;
- case LoongArchMCExpr::VK_TLS_IE_PC_HI20:
- FixupKind = ELF::R_LARCH_TLS_IE_PC_HI20;
- break;
- case LoongArchMCExpr::VK_TLS_IE_PC_LO12:
- FixupKind = ELF::R_LARCH_TLS_IE_PC_LO12;
- break;
- case LoongArchMCExpr::VK_TLS_IE64_PC_LO20:
- FixupKind = ELF::R_LARCH_TLS_IE64_PC_LO20;
- break;
- case LoongArchMCExpr::VK_TLS_IE64_PC_HI12:
- FixupKind = ELF::R_LARCH_TLS_IE64_PC_HI12;
- break;
- case LoongArchMCExpr::VK_TLS_IE_HI20:
- FixupKind = ELF::R_LARCH_TLS_IE_HI20;
- break;
- case LoongArchMCExpr::VK_TLS_IE_LO12:
- FixupKind = ELF::R_LARCH_TLS_IE_LO12;
- break;
- case LoongArchMCExpr::VK_TLS_IE64_LO20:
- FixupKind = ELF::R_LARCH_TLS_IE64_LO20;
- break;
- case LoongArchMCExpr::VK_TLS_IE64_HI12:
- FixupKind = ELF::R_LARCH_TLS_IE64_HI12;
- break;
- case LoongArchMCExpr::VK_TLS_LD_PC_HI20:
- FixupKind = ELF::R_LARCH_TLS_LD_PC_HI20;
- break;
- case LoongArchMCExpr::VK_TLS_LD_HI20:
- FixupKind = ELF::R_LARCH_TLS_LD_HI20;
- break;
- case LoongArchMCExpr::VK_TLS_GD_PC_HI20:
- FixupKind = ELF::R_LARCH_TLS_GD_PC_HI20;
- break;
- case LoongArchMCExpr::VK_TLS_GD_HI20:
- FixupKind = ELF::R_LARCH_TLS_GD_HI20;
- break;
- case LoongArchMCExpr::VK_CALL36:
- FixupKind = ELF::R_LARCH_CALL36;
+ case ELF::R_LARCH_CALL36:
+ case ELF::R_LARCH_TLS_LE_HI20_R:
+ case ELF::R_LARCH_TLS_LE_LO12_R:
RelaxCandidate = true;
break;
- case LoongArchMCExpr::VK_TLS_DESC_PC_HI20:
- FixupKind = ELF::R_LARCH_TLS_DESC_PC_HI20;
- break;
- case LoongArchMCExpr::VK_TLS_DESC_PC_LO12:
- FixupKind = ELF::R_LARCH_TLS_DESC_PC_LO12;
- break;
- case LoongArchMCExpr::VK_TLS_DESC64_PC_LO20:
- FixupKind = ELF::R_LARCH_TLS_DESC64_PC_LO20;
- break;
- case LoongArchMCExpr::VK_TLS_DESC64_PC_HI12:
- FixupKind = ELF::R_LARCH_TLS_DESC64_PC_HI12;
- break;
- case LoongArchMCExpr::VK_TLS_DESC_HI20:
- FixupKind = ELF::R_LARCH_TLS_DESC_HI20;
- break;
- case LoongArchMCExpr::VK_TLS_DESC_LO12:
- FixupKind = ELF::R_LARCH_TLS_DESC_LO12;
- break;
- case LoongArchMCExpr::VK_TLS_DESC64_LO20:
- FixupKind = ELF::R_LARCH_TLS_DESC64_LO20;
- break;
- case LoongArchMCExpr::VK_TLS_DESC64_HI12:
- FixupKind = ELF::R_LARCH_TLS_DESC64_HI12;
- break;
- case LoongArchMCExpr::VK_TLS_DESC_LD:
- FixupKind = ELF::R_LARCH_TLS_DESC_LD;
- break;
- case LoongArchMCExpr::VK_TLS_DESC_CALL:
- FixupKind = ELF::R_LARCH_TLS_DESC_CALL;
- break;
- case LoongArchMCExpr::VK_TLS_LE_HI20_R:
- FixupKind = ELF::R_LARCH_TLS_LE_HI20_R;
- RelaxCandidate = true;
- break;
- case LoongArchMCExpr::VK_TLS_LE_LO12_R:
- FixupKind = ELF::R_LARCH_TLS_LE_LO12_R;
- RelaxCandidate = true;
- break;
- case LoongArchMCExpr::VK_PCREL20_S2:
- FixupKind = ELF::R_LARCH_PCREL20_S2;
- break;
- case LoongArchMCExpr::VK_TLS_LD_PCREL20_S2:
- FixupKind = ELF::R_LARCH_TLS_LD_PCREL20_S2;
- break;
- case LoongArchMCExpr::VK_TLS_GD_PCREL20_S2:
- FixupKind = ELF::R_LARCH_TLS_GD_PCREL20_S2;
- break;
- case LoongArchMCExpr::VK_TLS_DESC_PCREL20_S2:
- FixupKind = ELF::R_LARCH_TLS_DESC_PCREL20_S2;
- break;
}
} else if (Kind == MCExpr::SymbolRef &&
cast<MCSymbolRefExpr>(Expr)->getKind() ==
@@ -385,7 +252,7 @@ void LoongArchMCCodeEmitter::expandAddTPRel(const MCInst &MI,
"Expected expression as third input to TP-relative add");
const LoongArchMCExpr *Expr = dyn_cast<LoongArchMCExpr>(Symbol.getExpr());
- assert(Expr && Expr->getSpecifier() == LoongArchMCExpr::VK_TLS_LE_ADD_R &&
+ assert(Expr && Expr->getSpecifier() == ELF::R_LARCH_TLS_LE_ADD_R &&
"Expected %le_add_r relocation on TP-relative symbol");
// Emit the correct %le_add_r relocation for the symbol.
diff --git a/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchMCExpr.cpp b/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchMCExpr.cpp
index dceb62dcf4604..ac39b1fa411f2 100644
--- a/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchMCExpr.cpp
+++ b/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchMCExpr.cpp
@@ -13,6 +13,7 @@
#include "LoongArchMCExpr.h"
#include "LoongArchAsmBackend.h"
+#include "llvm/BinaryFormat/ELF.h"
#include "llvm/MC/MCContext.h"
#include "llvm/MC/MCStreamer.h"
#include "llvm/MC/MCSymbolELF.h"
@@ -24,9 +25,9 @@ using namespace llvm;
#define DEBUG_TYPE "loongarch-mcexpr"
-const LoongArchMCExpr *LoongArchMCExpr::create(const MCExpr *Expr, Specifier S,
+const LoongArchMCExpr *LoongArchMCExpr::create(const MCExpr *Expr, uint16_t S,
MCContext &Ctx, bool Hint) {
- return new (Ctx) LoongArchMCExpr(Expr, S, Hint);
+ return new (Ctx) LoongArchMCExpr(Expr, Specifier(S), Hint);
}
void LoongArchMCExpr::printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const {
@@ -58,117 +59,117 @@ void LoongArchMCExpr::visitUsedExpr(MCStreamer &Streamer) const {
Streamer.visitUsedExpr(*getSubExpr());
}
-StringRef LoongArchMCExpr::getSpecifierName(Specifier S) {
+StringRef LoongArchMCExpr::getSpecifierName(uint16_t S) {
switch (S) {
default:
llvm_unreachable("Invalid ELF symbol kind");
case VK_CALL_PLT:
return "plt";
- case VK_B16:
+ case ELF::R_LARCH_B16:
return "b16";
- case VK_B21:
+ case ELF::R_LARCH_B21:
return "b21";
- case VK_B26:
+ case ELF::R_LARCH_B26:
return "b26";
- case VK_ABS_HI20:
+ case ELF::R_LARCH_ABS_HI20:
return "abs_hi20";
- case VK_ABS_LO12:
+ case ELF::R_LARCH_ABS_LO12:
return "abs_lo12";
- case VK_ABS64_LO20:
+ case ELF::R_LARCH_ABS64_LO20:
return "abs64_lo20";
- case VK_ABS64_HI12:
+ case ELF::R_LARCH_ABS64_HI12:
return "abs64_hi12";
- case VK_PCALA_HI20:
+ case ELF::R_LARCH_PCALA_HI20:
return "pc_hi20";
- case VK_PCALA_LO12:
+ case ELF::R_LARCH_PCALA_LO12:
return "pc_lo12";
- case VK_PCALA64_LO20:
+ case ELF::R_LARCH_PCALA64_LO20:
return "pc64_lo20";
- case VK_PCALA64_HI12:
+ case ELF::R_LARCH_PCALA64_HI12:
return "pc64_hi12";
- case VK_GOT_PC_HI20:
+ case ELF::R_LARCH_GOT_PC_HI20:
return "got_pc_hi20";
- case VK_GOT_PC_LO12:
+ case ELF::R_LARCH_GOT_PC_LO12:
return "got_pc_lo12";
- case VK_GOT64_PC_LO20:
+ case ELF::R_LARCH_GOT64_PC_LO20:
return "got64_pc_lo20";
- case VK_GOT64_PC_HI12:
+ case ELF::R_LARCH_GOT64_PC_HI12:
return "got64_pc_hi12";
- case VK_GOT_HI20:
+ case ELF::R_LARCH_GOT_HI20:
return "got_hi20";
- case VK_GOT_LO12:
+ case ELF::R_LARCH_GOT_LO12:
return "got_lo12";
- case VK_GOT64_LO20:
+ case ELF::R_LARCH_GOT64_LO20:
return "got64_lo20";
- case VK_GOT64_HI12:
+ case ELF::R_LARCH_GOT64_HI12:
return "got64_hi12";
- case VK_TLS_LE_HI20:
+ case ELF::R_LARCH_TLS_LE_HI20:
return "le_hi20";
- case VK_TLS_LE_LO12:
+ case ELF::R_LARCH_TLS_LE_LO12:
return "le_lo12";
- case VK_TLS_LE64_LO20:
+ case ELF::R_LARCH_TLS_LE64_LO20:
return "le64_lo20";
- case VK_TLS_LE64_HI12:
+ case ELF::R_LARCH_TLS_LE64_HI12:
return "le64_hi12";
- case VK_TLS_IE_PC_HI20:
+ case ELF::R_LARCH_TLS_IE_PC_HI20:
return "ie_pc_hi20";
- case VK_TLS_IE_PC_LO12:
+ case ELF::R_LARCH_TLS_IE_PC_LO12:
return "ie_pc_lo12";
- case VK_TLS_IE64_PC_LO20:
+ case ELF::R_LARCH_TLS_IE64_PC_LO20:
return "ie64_pc_lo20";
- case VK_TLS_IE64_PC_HI12:
+ case ELF::R_LARCH_TLS_IE64_PC_HI12:
return "ie64_pc_hi12";
- case VK_TLS_IE_HI20:
+ case ELF::R_LARCH_TLS_IE_HI20:
return "ie_hi20";
- case VK_TLS_IE_LO12:
+ case ELF::R_LARCH_TLS_IE_LO12:
return "ie_lo12";
- case VK_TLS_IE64_LO20:
+ case ELF::R_LARCH_TLS_IE64_LO20:
return "ie64_lo20";
- case VK_TLS_IE64_HI12:
+ case ELF::R_LARCH_TLS_IE64_HI12:
return "ie64_hi12";
- case VK_TLS_LD_PC_HI20:
+ case ELF::R_LARCH_TLS_LD_PC_HI20:
return "ld_pc_hi20";
- case VK_TLS_LD_HI20:
+ case ELF::R_LARCH_TLS_LD_HI20:
return "ld_hi20";
- case VK_TLS_GD_PC_HI20:
+ case ELF::R_LARCH_TLS_GD_PC_HI20:
return "gd_pc_hi20";
- case VK_TLS_GD_HI20:
+ case ELF::R_LARCH_TLS_GD_HI20:
return "gd_hi20";
- case VK_CALL36:
+ case ELF::R_LARCH_CALL36:
return "call36";
- case VK_TLS_DESC_PC_HI20:
+ case ELF::R_LARCH_TLS_DESC_PC_HI20:
return "desc_pc_hi20";
- case VK_TLS_DESC_PC_LO12:
+ case ELF::R_LARCH_TLS_DESC_PC_LO12:
return "desc_pc_lo12";
- case VK_TLS_DESC64_PC_LO20:
+ case ELF::R_LARCH_TLS_DESC64_PC_LO20:
return "desc64_pc_lo20";
- case VK_TLS_DESC64_PC_HI12:
+ case ELF::R_LARCH_TLS_DESC64_PC_HI12:
return "desc64_pc_hi12";
- case VK_TLS_DESC_HI20:
+ case ELF::R_LARCH_TLS_DESC_HI20:
return "desc_hi20";
- case VK_TLS_DESC_LO12:
+ case ELF::R_LARCH_TLS_DESC_LO12:
return "desc_lo12";
- case VK_TLS_DESC64_LO20:
+ case ELF::R_LARCH_TLS_DESC64_LO20:
return "desc64_lo20";
- case VK_TLS_DESC64_HI12:
+ case ELF::R_LARCH_TLS_DESC64_HI12:
return "desc64_hi12";
- case VK_TLS_DESC_LD:
+ case ELF::R_LARCH_TLS_DESC_LD:
return "desc_ld";
- case VK_TLS_DESC_CALL:
+ case ELF::R_LARCH_TLS_DESC_CALL:
return "desc_call";
- case VK_TLS_LE_HI20_R:
+ case ELF::R_LARCH_TLS_LE_HI20_R:
return "le_hi20_r";
- case VK_TLS_LE_ADD_R:
+ case ELF::R_LARCH_TLS_LE_ADD_R:
return "le_add_r";
- case VK_TLS_LE_LO12_R:
+ case ELF::R_LARCH_TLS_LE_LO12_R:
return "le_lo12_r";
- case VK_PCREL20_S2:
+ case ELF::R_LARCH_PCREL20_S2:
return "pcrel_20";
- case VK_TLS_LD_PCREL20_S2:
+ case ELF::R_LARCH_TLS_LD_PCREL20_S2:
return "ld_pcrel_20";
- case VK_TLS_GD_PCREL20_S2:
+ case ELF::R_LARCH_TLS_GD_PCREL20_S2:
return "gd_pcrel_20";
- case VK_TLS_DESC_PCREL20_S2:
+ case ELF::R_LARCH_TLS_DESC_PCREL20_S2:
return "desc_pcrel_20";
}
}
@@ -176,58 +177,58 @@ StringRef LoongArchMCExpr::getSpecifierName(Specifier S) {
LoongArchMCExpr::Specifier LoongArchMCExpr::parseSpecifier(StringRef name) {
return StringSwitch<LoongArchMCExpr::Specifier>(name)
.Case("plt", VK_CALL_PLT)
- .Case("b16", VK_B16)
- .Case("b21", VK_B21)
- .Case("b26", VK_B26)
- .Case("abs_hi20", VK_ABS_HI20)
- .Case("abs_lo12", VK_ABS_LO12)
- .Case("abs64_lo20", VK_ABS64_LO20)
- .Case("abs64_hi12", VK_ABS64_HI12)
- .Case("pc_hi20", VK_PCALA_HI20)
- .Case("pc_lo12", VK_PCALA_LO12)
- .Case("pc64_lo20", VK_PCALA64_LO20)
- .Case("pc64_hi12", VK_PCALA64_HI12)
- .Case("got_pc_hi20", VK_GOT_PC_HI20)
- .Case("got_pc_lo12", VK_GOT_PC_LO12)
- .Case("got64_pc_lo20", VK_GOT64_PC_LO20)
- .Case("got64_pc_hi12", VK_GOT64_PC_HI12)
- .Case("got_hi20", VK_GOT_HI20)
- .Case("got_lo12", VK_GOT_LO12)
- .Case("got64_lo20", VK_GOT64_LO20)
- .Case("got64_hi12", VK_GOT64_HI12)
- .Case("le_hi20", VK_TLS_LE_HI20)
- .Case("le_lo12", VK_TLS_LE_LO12)
- .Case("le64_lo20", VK_TLS_LE64_LO20)
- .Case("le64_hi12", VK_TLS_LE64_HI12)
- .Case("ie_pc_hi20", VK_TLS_IE_PC_HI20)
- .Case("ie_pc_lo12", VK_TLS_IE_PC_LO12)
- .Case("ie64_pc_lo20", VK_TLS_IE64_PC_LO20)
- .Case("ie64_pc_hi12", VK_TLS_IE64_PC_HI12)
- .Case("ie_hi20", VK_TLS_IE_HI20)
- .Case("ie_lo12", VK_TLS_IE_LO12)
- .Case("ie64_lo20", VK_TLS_IE64_LO20)
- .Case("ie64_hi12", VK_TLS_IE64_HI12)
- .Case("ld_pc_hi20", VK_TLS_LD_PC_HI20)
- .Case("ld_hi20", VK_TLS_LD_HI20)
- .Case("gd_pc_hi20", VK_TLS_GD_PC_HI20)
- .Case("gd_hi20", VK_TLS_GD_HI20)
- .Case("call36", VK_CALL36)
- .Case("desc_pc_hi20", VK_TLS_DESC_PC_HI20)
- .Case("desc_pc_lo12", VK_TLS_DESC_PC_LO12)
- .Case("desc64_pc_lo20", VK_TLS_DESC64_PC_LO20)
- .Case("desc64_pc_hi12", VK_TLS_DESC64_PC_HI12)
- .Case("desc_hi20", VK_TLS_DESC_HI20)
- .Case("desc_lo12", VK_TLS_DESC_LO12)
- .Case("desc64_lo20", VK_TLS_DESC64_LO20)
- .Case("desc64_hi12", VK_TLS_DESC64_HI12)
- .Case("desc_ld", VK_TLS_DESC_LD)
- .Case("desc_call", VK_TLS_DESC_CALL)
- .Case("le_hi20_r", VK_TLS_LE_HI20_R)
- .Case("le_add_r", VK_TLS_LE_ADD_R)
- .Case("le_lo12_r", VK_TLS_LE_LO12_R)
- .Case("pcrel_20", VK_PCREL20_S2)
- .Case("ld_pcrel_20", VK_TLS_LD_PCREL20_S2)
- .Case("gd_pcrel_20", VK_TLS_GD_PCREL20_S2)
- .Case("desc_pcrel_20", VK_TLS_DESC_PCREL20_S2)
+ .Case("b16", ELF::R_LARCH_B16)
+ .Case("b21", ELF::R_LARCH_B21)
+ .Case("b26", ELF::R_LARCH_B26)
+ .Case("abs_hi20", ELF::R_LARCH_ABS_HI20)
+ .Case("abs_lo12", ELF::R_LARCH_ABS_LO12)
+ .Case("abs64_lo20", ELF::R_LARCH_ABS64_LO20)
+ .Case("abs64_hi12", ELF::R_LARCH_ABS64_HI12)
+ .Case("pc_hi20", ELF::R_LARCH_PCALA_HI20)
+ .Case("pc_lo12", ELF::R_LARCH_PCALA_LO12)
+ .Case("pc64_lo20", ELF::R_LARCH_PCALA64_LO20)
+ .Case("pc64_hi12", ELF::R_LARCH_PCALA64_HI12)
+ .Case("got_pc_hi20", ELF::R_LARCH_GOT_PC_HI20)
+ .Case("got_pc_lo12", ELF::R_LARCH_GOT_PC_LO12)
+ .Case("got64_pc_lo20", ELF::R_LARCH_GOT64_PC_LO20)
+ .Case("got64_pc_hi12", ELF::R_LARCH_GOT64_PC_HI12)
+ .Case("got_hi20", ELF::R_LARCH_GOT_HI20)
+ .Case("got_lo12", ELF::R_LARCH_GOT_LO12)
+ .Case("got64_lo20", ELF::R_LARCH_GOT64_LO20)
+ .Case("got64_hi12", ELF::R_LARCH_GOT64_HI12)
+ .Case("le_hi20", ELF::R_LARCH_TLS_LE_HI20)
+ .Case("le_lo12", ELF::R_LARCH_TLS_LE_LO12)
+ .Case("le64_lo20", ELF::R_LARCH_TLS_LE64_LO20)
+ .Case("le64_hi12", ELF::R_LARCH_TLS_LE64_HI12)
+ .Case("ie_pc_hi20", ELF::R_LARCH_TLS_IE_PC_HI20)
+ .Case("ie_pc_lo12", ELF::R_LARCH_TLS_IE_PC_LO12)
+ .Case("ie64_pc_lo20", ELF::R_LARCH_TLS_IE64_PC_LO20)
+ .Case("ie64_pc_hi12", ELF::R_LARCH_TLS_IE64_PC_HI12)
+ .Case("ie_hi20", ELF::R_LARCH_TLS_IE_HI20)
+ .Case("ie_lo12", ELF::R_LARCH_TLS_IE_LO12)
+ .Case("ie64_lo20", ELF::R_LARCH_TLS_IE64_LO20)
+ .Case("ie64_hi12", ELF::R_LARCH_TLS_IE64_HI12)
+ .Case("ld_pc_hi20", ELF::R_LARCH_TLS_LD_PC_HI20)
+ .Case("ld_hi20", ELF::R_LARCH_TLS_LD_HI20)
+ .Case("gd_pc_hi20", ELF::R_LARCH_TLS_GD_PC_HI20)
+ .Case("gd_hi20", ELF::R_LARCH_TLS_GD_HI20)
+ .Case("call36", ELF::R_LARCH_CALL36)
+ .Case("desc_pc_hi20", ELF::R_LARCH_TLS_DESC_PC_HI20)
+ .Case("desc_pc_lo12", ELF::R_LARCH_TLS_DESC_PC_LO12)
+ .Case("desc64_pc_lo20", ELF::R_LARCH_TLS_DESC64_PC_LO20)
+ .Case("desc64_pc_hi12", ELF::R_LARCH_TLS_DESC64_PC_HI12)
+ .Case("desc_hi20", ELF::R_LARCH_TLS_DESC_HI20)
+ .Case("desc_lo12", ELF::R_LARCH_TLS_DESC_LO12)
+ .Case("desc64_lo20", ELF::R_LARCH_TLS_DESC64_LO20)
+ .Case("desc64_hi12", ELF::R_LARCH_TLS_DESC64_HI12)
+ .Case("desc_ld", ELF::R_LARCH_TLS_DESC_LD)
+ .Case("desc_call", ELF::R_LARCH_TLS_DESC_CALL)
+ .Case("le_hi20_r", ELF::R_LARCH_TLS_LE_HI20_R)
+ .Case("le_add_r", ELF::R_LARCH_TLS_LE_ADD_R)
+ .Case("le_lo12_r", ELF::R_LARCH_TLS_LE_LO12_R)
+ .Case("pcrel_20", ELF::R_LARCH_PCREL20_S2)
+ .Case("ld_pcrel_20", ELF::R_LARCH_TLS_LD_PCREL20_S2)
+ .Case("gd_pcrel_20", ELF::R_LARCH_TLS_GD_PCREL20_S2)
+ .Case("desc_pcrel_20", ELF::R_LARCH_TLS_DESC_PCREL20_S2)
.Default(VK_None);
}
diff --git a/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchMCExpr.h b/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchMCExpr.h
index 4bc0b384bfe23..aac49979fb60a 100644
--- a/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchMCExpr.h
+++ b/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchMCExpr.h
@@ -22,63 +22,11 @@ class StringRef;
class LoongArchMCExpr : public MCTargetExpr {
public:
- enum Specifier {
+ using Specifier = uint16_t;
+ enum {
VK_None,
- VK_CALL,
+ VK_CALL = 1000, // larger than relocation types
VK_CALL_PLT,
- VK_B16,
- VK_B21,
- VK_B26,
- VK_ABS_HI20,
- VK_ABS_LO12,
- VK_ABS64_LO20,
- VK_ABS64_HI12,
- VK_PCALA_HI20,
- VK_PCALA_LO12,
- VK_PCALA64_LO20,
- VK_PCALA64_HI12,
- VK_GOT_PC_HI20,
- VK_GOT_PC_LO12,
- VK_GOT64_PC_LO20,
- VK_GOT64_PC_HI12,
- VK_GOT_HI20,
- VK_GOT_LO12,
- VK_GOT64_LO20,
- VK_GOT64_HI12,
- VK_TLS_LE_HI20,
- VK_TLS_LE_LO12,
- VK_TLS_LE64_LO20,
- VK_TLS_LE64_HI12,
- VK_TLS_IE_PC_HI20,
- VK_TLS_IE_PC_LO12,
- VK_TLS_IE64_PC_LO20,
- VK_TLS_IE64_PC_HI12,
- VK_TLS_IE_HI20,
- VK_TLS_IE_LO12,
- VK_TLS_IE64_LO20,
- VK_TLS_IE64_HI12,
- VK_TLS_LD_PC_HI20,
- VK_TLS_LD_HI20,
- VK_TLS_GD_PC_HI20,
- VK_TLS_GD_HI20,
- VK_CALL36,
- VK_TLS_DESC_PC_HI20,
- VK_TLS_DESC_PC_LO12,
- VK_TLS_DESC64_PC_LO20,
- VK_TLS_DESC64_PC_HI12,
- VK_TLS_DESC_HI20,
- VK_TLS_DESC_LO12,
- VK_TLS_DESC64_LO20,
- VK_TLS_DESC64_HI12,
- VK_TLS_DESC_LD,
- VK_TLS_DESC_CALL,
- VK_TLS_LE_HI20_R,
- VK_TLS_LE_ADD_R,
- VK_TLS_LE_LO12_R,
- VK_PCREL20_S2,
- VK_TLS_LD_PCREL20_S2,
- VK_TLS_GD_PCREL20_S2,
- VK_TLS_DESC_PCREL20_S2,
};
private:
@@ -90,7 +38,7 @@ class LoongArchMCExpr : public MCTargetExpr {
: Expr(Expr), specifier(S), RelaxHint(Hint) {}
public:
- static const LoongArchMCExpr *create(const MCExpr *Expr, Specifier Kind,
+ static const LoongArchMCExpr *create(const MCExpr *Expr, uint16_t S,
MCContext &Ctx, bool Hint = false);
Specifier getSpecifier() const { return specifier; }
@@ -109,7 +57,7 @@ class LoongArchMCExpr : public MCTargetExpr {
return E->getKind() == MCExpr::Target;
}
- static StringRef getSpecifierName(Specifier Kind);
+ static StringRef getSpecifierName(uint16_t S);
static Specifier parseSpecifier(StringRef name);
};
More information about the llvm-commits
mailing list