[llvm] 20a1b35 - AArch64: Move AArch64MCExpr functions to AArch64MCAsmInfo
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 16 09:57:14 PDT 2025
Author: Fangrui Song
Date: 2025-06-16T09:57:10-07:00
New Revision: 20a1b357c0ff3c3f71de45bae42cb2dead7b66c9
URL: https://github.com/llvm/llvm-project/commit/20a1b357c0ff3c3f71de45bae42cb2dead7b66c9
DIFF: https://github.com/llvm/llvm-project/commit/20a1b357c0ff3c3f71de45bae42cb2dead7b66c9.diff
LOG: AArch64: Move AArch64MCExpr functions to AArch64MCAsmInfo
To migrate away from the legacy
XXXMCExpr::printImpl/evaluateAsRelocatableImpl overrides and align with
other targets.
While the AArch64MCAsmInfoXXX hooks introduce some duplication, they
enable better separation for object file formats.
Note: While AArch64MCAsmInfoDarwin uses the `@specifier` notation, it
might use AArch64MCExpr with specifier VK_ABS.
test/tools/llvm-mca/AArch64/Exynos/zero-latency-move.s abuses a parser
behavior that :lo12: is also parsed for Mach-O (though it will fail for
-filetype=obj).
Added:
Modified:
llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCAsmInfo.cpp
llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCAsmInfo.h
llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCExpr.cpp
llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCExpr.h
llvm/lib/Target/AArch64/MCTargetDesc/AArch64WinCOFFObjectWriter.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCAsmInfo.cpp b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCAsmInfo.cpp
index 31965d85d9eb4..b2cd1d0f4156e 100644
--- a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCAsmInfo.cpp
+++ b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCAsmInfo.cpp
@@ -15,6 +15,7 @@
#include "llvm/MC/MCContext.h"
#include "llvm/MC/MCExpr.h"
#include "llvm/MC/MCStreamer.h"
+#include "llvm/MC/MCValue.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/TargetParser/Triple.h"
using namespace llvm;
@@ -53,6 +54,80 @@ const MCAsmInfo::AtSpecifier MachOAtSpecifiers[] = {
{AArch64MCExpr::M_TLVPPAGEOFF, "TLVPPAGEOFF"},
};
+StringRef AArch64::getSpecifierName(const MCSpecifierExpr &Expr) {
+ // clang-format off
+ switch (static_cast<uint32_t>(Expr.getSpecifier())) {
+ case AArch64MCExpr::VK_CALL: return "";
+ case AArch64MCExpr::VK_LO12: return ":lo12:";
+ case AArch64MCExpr::VK_ABS_G3: return ":abs_g3:";
+ case AArch64MCExpr::VK_ABS_G2: return ":abs_g2:";
+ case AArch64MCExpr::VK_ABS_G2_S: return ":abs_g2_s:";
+ case AArch64MCExpr::VK_ABS_G2_NC: return ":abs_g2_nc:";
+ case AArch64MCExpr::VK_ABS_G1: return ":abs_g1:";
+ case AArch64MCExpr::VK_ABS_G1_S: return ":abs_g1_s:";
+ case AArch64MCExpr::VK_ABS_G1_NC: return ":abs_g1_nc:";
+ case AArch64MCExpr::VK_ABS_G0: return ":abs_g0:";
+ case AArch64MCExpr::VK_ABS_G0_S: return ":abs_g0_s:";
+ case AArch64MCExpr::VK_ABS_G0_NC: return ":abs_g0_nc:";
+ case AArch64MCExpr::VK_PREL_G3: return ":prel_g3:";
+ case AArch64MCExpr::VK_PREL_G2: return ":prel_g2:";
+ case AArch64MCExpr::VK_PREL_G2_NC: return ":prel_g2_nc:";
+ case AArch64MCExpr::VK_PREL_G1: return ":prel_g1:";
+ case AArch64MCExpr::VK_PREL_G1_NC: return ":prel_g1_nc:";
+ case AArch64MCExpr::VK_PREL_G0: return ":prel_g0:";
+ case AArch64MCExpr::VK_PREL_G0_NC: return ":prel_g0_nc:";
+ case AArch64MCExpr::VK_DTPREL_G2: return ":dtprel_g2:";
+ case AArch64MCExpr::VK_DTPREL_G1: return ":dtprel_g1:";
+ case AArch64MCExpr::VK_DTPREL_G1_NC: return ":dtprel_g1_nc:";
+ case AArch64MCExpr::VK_DTPREL_G0: return ":dtprel_g0:";
+ case AArch64MCExpr::VK_DTPREL_G0_NC: return ":dtprel_g0_nc:";
+ case AArch64MCExpr::VK_DTPREL_HI12: return ":dtprel_hi12:";
+ case AArch64MCExpr::VK_DTPREL_LO12: return ":dtprel_lo12:";
+ case AArch64MCExpr::VK_DTPREL_LO12_NC: return ":dtprel_lo12_nc:";
+ case AArch64MCExpr::VK_TPREL_G2: return ":tprel_g2:";
+ case AArch64MCExpr::VK_TPREL_G1: return ":tprel_g1:";
+ case AArch64MCExpr::VK_TPREL_G1_NC: return ":tprel_g1_nc:";
+ case AArch64MCExpr::VK_TPREL_G0: return ":tprel_g0:";
+ case AArch64MCExpr::VK_TPREL_G0_NC: return ":tprel_g0_nc:";
+ case AArch64MCExpr::VK_TPREL_HI12: return ":tprel_hi12:";
+ case AArch64MCExpr::VK_TPREL_LO12: return ":tprel_lo12:";
+ case AArch64MCExpr::VK_TPREL_LO12_NC: return ":tprel_lo12_nc:";
+ case AArch64MCExpr::VK_TLSDESC_LO12: return ":tlsdesc_lo12:";
+ case AArch64MCExpr::VK_TLSDESC_AUTH_LO12: return ":tlsdesc_auth_lo12:";
+ case AArch64MCExpr::VK_ABS_PAGE: return "";
+ case AArch64MCExpr::VK_ABS_PAGE_NC: return ":pg_hi21_nc:";
+ case AArch64MCExpr::VK_GOT: return ":got:";
+ case AArch64MCExpr::VK_GOT_PAGE: return ":got:";
+ case AArch64MCExpr::VK_GOT_PAGE_LO15: return ":gotpage_lo15:";
+ case AArch64MCExpr::VK_GOT_LO12: return ":got_lo12:";
+ case AArch64MCExpr::VK_GOTTPREL: return ":gottprel:";
+ case AArch64MCExpr::VK_GOTTPREL_PAGE: return ":gottprel:";
+ case AArch64MCExpr::VK_GOTTPREL_LO12_NC: return ":gottprel_lo12:";
+ case AArch64MCExpr::VK_GOTTPREL_G1: return ":gottprel_g1:";
+ case AArch64MCExpr::VK_GOTTPREL_G0_NC: return ":gottprel_g0_nc:";
+ case AArch64MCExpr::VK_TLSDESC: return "";
+ case AArch64MCExpr::VK_TLSDESC_PAGE: return ":tlsdesc:";
+ case AArch64MCExpr::VK_TLSDESC_AUTH: return "";
+ case AArch64MCExpr::VK_TLSDESC_AUTH_PAGE: return ":tlsdesc_auth:";
+ case AArch64MCExpr::VK_SECREL_LO12: return ":secrel_lo12:";
+ case AArch64MCExpr::VK_SECREL_HI12: return ":secrel_hi12:";
+ case AArch64MCExpr::VK_GOT_AUTH: return ":got_auth:";
+ case AArch64MCExpr::VK_GOT_AUTH_PAGE: return ":got_auth:";
+ case AArch64MCExpr::VK_GOT_AUTH_LO12: return ":got_auth_lo12:";
+ default:
+ llvm_unreachable("Invalid relocation specifier");
+ }
+ // clang-format on
+}
+
+static bool evaluate(const MCSpecifierExpr &Expr, MCValue &Res,
+ const MCAssembler *Asm) {
+ if (!Expr.getSubExpr()->evaluateAsRelocatable(Res, Asm))
+ return false;
+ Res.setSpecifier(Expr.getSpecifier());
+ return true;
+}
+
AArch64MCAsmInfoDarwin::AArch64MCAsmInfoDarwin(bool IsILP32) {
// We prefer NEON instructions to be printed in the short, Apple-specific
// form when targeting Darwin.
@@ -91,6 +166,33 @@ const MCExpr *AArch64MCAsmInfoDarwin::getExprForPersonalitySymbol(
return MCBinaryExpr::createSub(Res, PC, Context);
}
+void AArch64AuthMCExpr::print(raw_ostream &OS, const MCAsmInfo *MAI) const {
+ bool WrapSubExprInParens = !isa<MCSymbolRefExpr>(getSubExpr());
+ if (WrapSubExprInParens)
+ OS << '(';
+ getSubExpr()->print(OS, MAI);
+ if (WrapSubExprInParens)
+ OS << ')';
+
+ OS << "@AUTH(" << AArch64PACKeyIDToString(Key) << ',' << Discriminator;
+ if (hasAddressDiversity())
+ OS << ",addr";
+ OS << ')';
+}
+
+void AArch64MCAsmInfoDarwin::printSpecifierExpr(
+ raw_ostream &OS, const MCSpecifierExpr &Expr) const {
+ if (auto *AE = dyn_cast<AArch64AuthMCExpr>(&Expr))
+ return AE->print(OS, this);
+ OS << AArch64::getSpecifierName(Expr);
+ printExpr(OS, *Expr.getSubExpr());
+}
+
+bool AArch64MCAsmInfoDarwin::evaluateAsRelocatableImpl(
+ const MCSpecifierExpr &Expr, MCValue &Res, const MCAssembler *Asm) const {
+ return evaluate(Expr, Res, Asm);
+}
+
AArch64MCAsmInfoELF::AArch64MCAsmInfoELF(const Triple &T) {
if (T.getArch() == Triple::aarch64_be)
IsLittleEndian = false;
@@ -127,6 +229,19 @@ AArch64MCAsmInfoELF::AArch64MCAsmInfoELF(const Triple &T) {
initializeVariantKinds(ELFAtSpecifiers);
}
+void AArch64MCAsmInfoELF::printSpecifierExpr(
+ raw_ostream &OS, const MCSpecifierExpr &Expr) const {
+ if (auto *AE = dyn_cast<AArch64AuthMCExpr>(&Expr))
+ return AE->print(OS, this);
+ OS << AArch64::getSpecifierName(Expr);
+ printExpr(OS, *Expr.getSubExpr());
+}
+
+bool AArch64MCAsmInfoELF::evaluateAsRelocatableImpl(
+ const MCSpecifierExpr &Expr, MCValue &Res, const MCAssembler *Asm) const {
+ return evaluate(Expr, Res, Asm);
+}
+
AArch64MCAsmInfoMicrosoftCOFF::AArch64MCAsmInfoMicrosoftCOFF() {
PrivateGlobalPrefix = ".L";
PrivateLabelPrefix = ".L";
@@ -146,6 +261,17 @@ AArch64MCAsmInfoMicrosoftCOFF::AArch64MCAsmInfoMicrosoftCOFF() {
initializeVariantKinds(COFFAtSpecifiers);
}
+void AArch64MCAsmInfoMicrosoftCOFF::printSpecifierExpr(
+ raw_ostream &OS, const MCSpecifierExpr &Expr) const {
+ OS << AArch64::getSpecifierName(Expr);
+ printExpr(OS, *Expr.getSubExpr());
+}
+
+bool AArch64MCAsmInfoMicrosoftCOFF::evaluateAsRelocatableImpl(
+ const MCSpecifierExpr &Expr, MCValue &Res, const MCAssembler *Asm) const {
+ return evaluate(Expr, Res, Asm);
+}
+
AArch64MCAsmInfoGNUCOFF::AArch64MCAsmInfoGNUCOFF() {
PrivateGlobalPrefix = ".L";
PrivateLabelPrefix = ".L";
@@ -164,3 +290,14 @@ AArch64MCAsmInfoGNUCOFF::AArch64MCAsmInfoGNUCOFF() {
initializeVariantKinds(COFFAtSpecifiers);
}
+
+void AArch64MCAsmInfoGNUCOFF::printSpecifierExpr(
+ raw_ostream &OS, const MCSpecifierExpr &Expr) const {
+ OS << AArch64::getSpecifierName(Expr);
+ printExpr(OS, *Expr.getSubExpr());
+}
+
+bool AArch64MCAsmInfoGNUCOFF::evaluateAsRelocatableImpl(
+ const MCSpecifierExpr &Expr, MCValue &Res, const MCAssembler *Asm) const {
+ return evaluate(Expr, Res, Asm);
+}
diff --git a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCAsmInfo.h b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCAsmInfo.h
index 225e0c8e55fca..bc02586d73884 100644
--- a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCAsmInfo.h
+++ b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCAsmInfo.h
@@ -13,6 +13,7 @@
#ifndef LLVM_LIB_TARGET_AARCH64_MCTARGETDESC_AARCH64MCASMINFO_H
#define LLVM_LIB_TARGET_AARCH64_MCTARGETDESC_AARCH64MCASMINFO_H
+#include "MCTargetDesc/AArch64MCExpr.h"
#include "llvm/MC/MCAsmInfoCOFF.h"
#include "llvm/MC/MCAsmInfoDarwin.h"
#include "llvm/MC/MCAsmInfoELF.h"
@@ -26,20 +27,42 @@ struct AArch64MCAsmInfoDarwin : public MCAsmInfoDarwin {
const MCExpr *
getExprForPersonalitySymbol(const MCSymbol *Sym, unsigned Encoding,
MCStreamer &Streamer) const override;
+ void printSpecifierExpr(raw_ostream &OS,
+ const MCSpecifierExpr &Expr) const override;
+ bool evaluateAsRelocatableImpl(const MCSpecifierExpr &Expr, MCValue &Res,
+ const MCAssembler *Asm) const override;
};
struct AArch64MCAsmInfoELF : public MCAsmInfoELF {
explicit AArch64MCAsmInfoELF(const Triple &T);
+ void printSpecifierExpr(raw_ostream &OS,
+ const MCSpecifierExpr &Expr) const override;
+ bool evaluateAsRelocatableImpl(const MCSpecifierExpr &Expr, MCValue &Res,
+ const MCAssembler *Asm) const override;
};
struct AArch64MCAsmInfoMicrosoftCOFF : public MCAsmInfoMicrosoft {
explicit AArch64MCAsmInfoMicrosoftCOFF();
+ void printSpecifierExpr(raw_ostream &OS,
+ const MCSpecifierExpr &Expr) const override;
+ bool evaluateAsRelocatableImpl(const MCSpecifierExpr &Expr, MCValue &Res,
+ const MCAssembler *Asm) const override;
};
struct AArch64MCAsmInfoGNUCOFF : public MCAsmInfoGNUCOFF {
explicit AArch64MCAsmInfoGNUCOFF();
+ void printSpecifierExpr(raw_ostream &OS,
+ const MCSpecifierExpr &Expr) const override;
+ bool evaluateAsRelocatableImpl(const MCSpecifierExpr &Expr, MCValue &Res,
+ const MCAssembler *Asm) const override;
};
+namespace AArch64 {
+/// Return the string representation of the ELF relocation specifier
+/// (e.g. ":got:", ":lo12:").
+StringRef getSpecifierName(const MCSpecifierExpr &Expr);
+} // namespace AArch64
+
} // namespace llvm
#endif
diff --git a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCExpr.cpp b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCExpr.cpp
index d934af91b9ff5..7a7c6f7effd9f 100644
--- a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCExpr.cpp
+++ b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCExpr.cpp
@@ -12,100 +12,19 @@
//===----------------------------------------------------------------------===//
#include "AArch64MCExpr.h"
+#include "AArch64MCAsmInfo.h"
#include "llvm/MC/MCContext.h"
#include "llvm/MC/MCStreamer.h"
-#include "llvm/MC/MCValue.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/ErrorHandling.h"
using namespace llvm;
-#define DEBUG_TYPE "aarch64symbolrefexpr"
-
const AArch64MCExpr *AArch64MCExpr::create(const MCExpr *Expr, Specifier S,
MCContext &Ctx) {
return new (Ctx) AArch64MCExpr(Expr, S);
}
-StringRef AArch64MCExpr::getSpecifierName() const {
- // clang-format off
- switch (static_cast<uint32_t>(getSpecifier())) {
- case VK_CALL: return "";
- case VK_LO12: return ":lo12:";
- case VK_ABS_G3: return ":abs_g3:";
- case VK_ABS_G2: return ":abs_g2:";
- case VK_ABS_G2_S: return ":abs_g2_s:";
- case VK_ABS_G2_NC: return ":abs_g2_nc:";
- case VK_ABS_G1: return ":abs_g1:";
- case VK_ABS_G1_S: return ":abs_g1_s:";
- case VK_ABS_G1_NC: return ":abs_g1_nc:";
- case VK_ABS_G0: return ":abs_g0:";
- case VK_ABS_G0_S: return ":abs_g0_s:";
- case VK_ABS_G0_NC: return ":abs_g0_nc:";
- case VK_PREL_G3: return ":prel_g3:";
- case VK_PREL_G2: return ":prel_g2:";
- case VK_PREL_G2_NC: return ":prel_g2_nc:";
- case VK_PREL_G1: return ":prel_g1:";
- case VK_PREL_G1_NC: return ":prel_g1_nc:";
- case VK_PREL_G0: return ":prel_g0:";
- case VK_PREL_G0_NC: return ":prel_g0_nc:";
- case VK_DTPREL_G2: return ":dtprel_g2:";
- case VK_DTPREL_G1: return ":dtprel_g1:";
- case VK_DTPREL_G1_NC: return ":dtprel_g1_nc:";
- case VK_DTPREL_G0: return ":dtprel_g0:";
- case VK_DTPREL_G0_NC: return ":dtprel_g0_nc:";
- case VK_DTPREL_HI12: return ":dtprel_hi12:";
- case VK_DTPREL_LO12: return ":dtprel_lo12:";
- case VK_DTPREL_LO12_NC: return ":dtprel_lo12_nc:";
- case VK_TPREL_G2: return ":tprel_g2:";
- case VK_TPREL_G1: return ":tprel_g1:";
- case VK_TPREL_G1_NC: return ":tprel_g1_nc:";
- case VK_TPREL_G0: return ":tprel_g0:";
- case VK_TPREL_G0_NC: return ":tprel_g0_nc:";
- case VK_TPREL_HI12: return ":tprel_hi12:";
- case VK_TPREL_LO12: return ":tprel_lo12:";
- case VK_TPREL_LO12_NC: return ":tprel_lo12_nc:";
- case VK_TLSDESC_LO12: return ":tlsdesc_lo12:";
- case VK_TLSDESC_AUTH_LO12: return ":tlsdesc_auth_lo12:";
- case VK_ABS_PAGE: return "";
- case VK_ABS_PAGE_NC: return ":pg_hi21_nc:";
- case VK_GOT: return ":got:";
- case VK_GOT_PAGE: return ":got:";
- case VK_GOT_PAGE_LO15: return ":gotpage_lo15:";
- case VK_GOT_LO12: return ":got_lo12:";
- case VK_GOTTPREL: return ":gottprel:";
- case VK_GOTTPREL_PAGE: return ":gottprel:";
- case VK_GOTTPREL_LO12_NC: return ":gottprel_lo12:";
- case VK_GOTTPREL_G1: return ":gottprel_g1:";
- case VK_GOTTPREL_G0_NC: return ":gottprel_g0_nc:";
- case VK_TLSDESC: return "";
- case VK_TLSDESC_PAGE: return ":tlsdesc:";
- case VK_TLSDESC_AUTH: return "";
- case VK_TLSDESC_AUTH_PAGE: return ":tlsdesc_auth:";
- case VK_SECREL_LO12: return ":secrel_lo12:";
- case VK_SECREL_HI12: return ":secrel_hi12:";
- case VK_GOT_AUTH: return ":got_auth:";
- case VK_GOT_AUTH_PAGE: return ":got_auth:";
- case VK_GOT_AUTH_LO12: return ":got_auth_lo12:";
- default:
- llvm_unreachable("Invalid relocation specifier");
- }
- // clang-format on
-}
-
-void AArch64MCExpr::printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const {
- OS << getSpecifierName();
- Expr->print(OS, MAI);
-}
-
-bool AArch64MCExpr::evaluateAsRelocatableImpl(MCValue &Res,
- const MCAssembler *Asm) const {
- if (!getSubExpr()->evaluateAsRelocatable(Res, Asm))
- return false;
- Res.setSpecifier(getSpecifier());
- return true;
-}
-
const AArch64AuthMCExpr *AArch64AuthMCExpr::create(const MCExpr *Expr,
uint16_t Discriminator,
AArch64PACKey::ID Key,
@@ -114,17 +33,3 @@ const AArch64AuthMCExpr *AArch64AuthMCExpr::create(const MCExpr *Expr,
return new (Ctx)
AArch64AuthMCExpr(Expr, Discriminator, Key, HasAddressDiversity);
}
-
-void AArch64AuthMCExpr::printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const {
- bool WrapSubExprInParens = !isa<MCSymbolRefExpr>(getSubExpr());
- if (WrapSubExprInParens)
- OS << '(';
- getSubExpr()->print(OS, MAI);
- if (WrapSubExprInParens)
- OS << ')';
-
- OS << "@AUTH(" << AArch64PACKeyIDToString(Key) << ',' << Discriminator;
- if (hasAddressDiversity())
- OS << ",addr";
- OS << ')';
-}
diff --git a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCExpr.h b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCExpr.h
index 9c383894c7f54..541f24c943a15 100644
--- a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCExpr.h
+++ b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCExpr.h
@@ -147,8 +147,6 @@ class AArch64MCExpr : public MCSpecifierExpr {
public:
static const AArch64MCExpr *create(const MCExpr *Expr, Specifier,
MCContext &Ctx);
- /// @name VariantKind information extractors.
- /// @{
static Specifier getSymbolLoc(Specifier S) {
return static_cast<Specifier>(S & VK_SymLocBits);
@@ -159,16 +157,6 @@ class AArch64MCExpr : public MCSpecifierExpr {
}
static bool isNotChecked(Specifier S) { return S & VK_NC; }
-
- /// @}
-
- /// Return the string representation of the ELF relocation specifier
- /// (e.g. ":got:", ":lo12:").
- StringRef getSpecifierName() const;
-
- void printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const override;
- bool evaluateAsRelocatableImpl(MCValue &Res,
- const MCAssembler *Asm) const override;
};
class AArch64AuthMCExpr final : public AArch64MCExpr {
@@ -189,7 +177,7 @@ class AArch64AuthMCExpr final : public AArch64MCExpr {
uint16_t getDiscriminator() const { return Discriminator; }
bool hasAddressDiversity() const { return getSpecifier() == VK_AUTHADDR; }
- void printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const override;
+ void print(raw_ostream &OS, const MCAsmInfo *MAI) const;
static bool classof(const MCExpr *E) {
return isa<AArch64MCExpr>(E) && classof(cast<AArch64MCExpr>(E));
diff --git a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64WinCOFFObjectWriter.cpp b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64WinCOFFObjectWriter.cpp
index 3009bd2ca2758..2e997631655ed 100644
--- a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64WinCOFFObjectWriter.cpp
+++ b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64WinCOFFObjectWriter.cpp
@@ -8,7 +8,7 @@
#include "AArch64MCTargetDesc.h"
#include "MCTargetDesc/AArch64FixupKinds.h"
-#include "MCTargetDesc/AArch64MCExpr.h"
+#include "MCTargetDesc/AArch64MCAsmInfo.h"
#include "llvm/ADT/Twine.h"
#include "llvm/BinaryFormat/COFF.h"
#include "llvm/MC/MCAsmBackend.h"
@@ -73,7 +73,7 @@ unsigned AArch64WinCOFFObjectWriter::getRelocType(
break;
default:
Ctx.reportError(Fixup.getLoc(), "relocation specifier " +
- A64E->getSpecifierName() +
+ AArch64::getSpecifierName(*A64E) +
" unsupported on COFF targets");
return COFF::IMAGE_REL_ARM64_ABSOLUTE; // Dummy return value
}
@@ -83,7 +83,7 @@ unsigned AArch64WinCOFFObjectWriter::getRelocType(
default: {
if (const AArch64MCExpr *A64E = dyn_cast<AArch64MCExpr>(Expr)) {
Ctx.reportError(Fixup.getLoc(), "relocation specifier " +
- A64E->getSpecifierName() +
+ AArch64::getSpecifierName(*A64E) +
" unsupported on COFF targets");
} else {
MCFixupKindInfo Info = MAB.getFixupKindInfo(Fixup.getKind());
More information about the llvm-commits
mailing list