[llvm] f23b841 - MIPS: Move MipsMCExpr functions to MipsMCAsmInfo
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Sun Jun 15 18:35:12 PDT 2025
Author: Fangrui Song
Date: 2025-06-15T18:35:07-07:00
New Revision: f23b841f0fa7576b90fe226e66192b861a8cf1cf
URL: https://github.com/llvm/llvm-project/commit/f23b841f0fa7576b90fe226e66192b861a8cf1cf
DIFF: https://github.com/llvm/llvm-project/commit/f23b841f0fa7576b90fe226e66192b861a8cf1cf.diff
LOG: MIPS: Move MipsMCExpr functions to MipsMCAsmInfo
Added:
Modified:
llvm/lib/Target/Mips/MCTargetDesc/MipsMCAsmInfo.cpp
llvm/lib/Target/Mips/MCTargetDesc/MipsMCAsmInfo.h
llvm/lib/Target/Mips/MCTargetDesc/MipsMCCodeEmitter.cpp
llvm/lib/Target/Mips/MCTargetDesc/MipsMCExpr.cpp
llvm/lib/Target/Mips/MCTargetDesc/MipsMCExpr.h
Removed:
################################################################################
diff --git a/llvm/lib/Target/Mips/MCTargetDesc/MipsMCAsmInfo.cpp b/llvm/lib/Target/Mips/MCTargetDesc/MipsMCAsmInfo.cpp
index 97c173618167b..9b2b25c60c946 100644
--- a/llvm/lib/Target/Mips/MCTargetDesc/MipsMCAsmInfo.cpp
+++ b/llvm/lib/Target/Mips/MCTargetDesc/MipsMCAsmInfo.cpp
@@ -59,10 +59,11 @@ MipsCOFFMCAsmInfo::MipsCOFFMCAsmInfo() {
AllowAtInName = true;
}
-void MipsMCExpr::printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const {
+static void printImpl(const MCAsmInfo &MAI, raw_ostream &OS,
+ const MCSpecifierExpr &Expr) {
int64_t AbsVal;
- switch (specifier) {
+ switch (Expr.getSpecifier()) {
case Mips::S_None:
case Mips::S_Special:
llvm_unreachable("Mips::S_None and MEK_Special are invalid");
@@ -70,7 +71,7 @@ void MipsMCExpr::printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const {
case Mips::S_DTPREL:
// Mips::S_DTPREL is used for marking TLS DIEExpr only
// and contains a regular sub-expression.
- MAI->printExpr(OS, *getSubExpr());
+ MAI.printExpr(OS, *Expr.getSubExpr());
return;
case Mips::S_CALL_HI16:
OS << "%call_hi";
@@ -147,20 +148,20 @@ void MipsMCExpr::printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const {
}
OS << '(';
- if (Expr->evaluateAsAbsolute(AbsVal))
+ if (Expr.evaluateAsAbsolute(AbsVal))
OS << AbsVal;
else
- Expr->print(OS, MAI);
+ MAI.printExpr(OS, *Expr.getSubExpr());
OS << ')';
}
-bool MipsMCExpr::isGpOff(Specifier &S) const {
- if (getSpecifier() == Mips::S_HI || getSpecifier() == Mips::S_LO) {
- if (const MipsMCExpr *S1 = dyn_cast<const MipsMCExpr>(getSubExpr())) {
+bool Mips::isGpOff(const MCSpecifierExpr &E) {
+ if (E.getSpecifier() == Mips::S_HI || E.getSpecifier() == Mips::S_LO) {
+ if (const MipsMCExpr *S1 = dyn_cast<const MipsMCExpr>(E.getSubExpr())) {
if (const MipsMCExpr *S2 = dyn_cast<const MipsMCExpr>(S1->getSubExpr())) {
if (S1->getSpecifier() == Mips::S_NEG &&
S2->getSpecifier() == Mips::S_GPREL) {
- S = getSpecifier();
+ // S = E.getSpecifier();
return true;
}
}
@@ -169,13 +170,13 @@ bool MipsMCExpr::isGpOff(Specifier &S) const {
return false;
}
-bool MipsMCExpr::evaluateAsRelocatableImpl(MCValue &Res,
- const MCAssembler *Asm) const {
+static bool evaluate(const MCSpecifierExpr &Expr, MCValue &Res,
+ const MCAssembler *Asm) {
// Look for the %hi(%neg(%gp_rel(X))) and %lo(%neg(%gp_rel(X)))
// special cases.
- if (isGpOff()) {
+ if (Mips::isGpOff(Expr)) {
const MCExpr *SubExpr =
- cast<MipsMCExpr>(cast<MipsMCExpr>(getSubExpr())->getSubExpr())
+ cast<MipsMCExpr>(cast<MipsMCExpr>(Expr.getSubExpr())->getSubExpr())
->getSubExpr();
if (!SubExpr->evaluateAsRelocatable(Res, Asm))
return false;
@@ -184,8 +185,29 @@ bool MipsMCExpr::evaluateAsRelocatableImpl(MCValue &Res,
return true;
}
- if (!getSubExpr()->evaluateAsRelocatable(Res, Asm))
+ if (!Expr.getSubExpr()->evaluateAsRelocatable(Res, Asm))
return false;
- Res.setSpecifier(specifier);
+ Res.setSpecifier(Expr.getSpecifier());
return !Res.getSubSym();
}
+
+void MipsELFMCAsmInfo::printSpecifierExpr(raw_ostream &OS,
+ const MCSpecifierExpr &Expr) const {
+ printImpl(*this, OS, Expr);
+}
+
+bool MipsELFMCAsmInfo::evaluateAsRelocatableImpl(const MCSpecifierExpr &Expr,
+ MCValue &Res,
+ const MCAssembler *Asm) const {
+ return evaluate(Expr, Res, Asm);
+}
+
+void MipsCOFFMCAsmInfo::printSpecifierExpr(raw_ostream &OS,
+ const MCSpecifierExpr &Expr) const {
+ printImpl(*this, OS, Expr);
+}
+
+bool MipsCOFFMCAsmInfo::evaluateAsRelocatableImpl(
+ const MCSpecifierExpr &Expr, MCValue &Res, const MCAssembler *Asm) const {
+ return evaluate(Expr, Res, Asm);
+}
diff --git a/llvm/lib/Target/Mips/MCTargetDesc/MipsMCAsmInfo.h b/llvm/lib/Target/Mips/MCTargetDesc/MipsMCAsmInfo.h
index d8b96f8b568c7..39699fdb98272 100644
--- a/llvm/lib/Target/Mips/MCTargetDesc/MipsMCAsmInfo.h
+++ b/llvm/lib/Target/Mips/MCTargetDesc/MipsMCAsmInfo.h
@@ -27,6 +27,10 @@ class MipsELFMCAsmInfo : public MCAsmInfoELF {
public:
explicit MipsELFMCAsmInfo(const Triple &TheTriple,
const MCTargetOptions &Options);
+ void printSpecifierExpr(raw_ostream &OS,
+ const MCSpecifierExpr &Expr) const override;
+ bool evaluateAsRelocatableImpl(const MCSpecifierExpr &Expr, MCValue &Res,
+ const MCAssembler *Asm) const override;
};
class MipsCOFFMCAsmInfo : public MCAsmInfoGNUCOFF {
@@ -34,6 +38,10 @@ class MipsCOFFMCAsmInfo : public MCAsmInfoGNUCOFF {
public:
explicit MipsCOFFMCAsmInfo();
+ void printSpecifierExpr(raw_ostream &OS,
+ const MCSpecifierExpr &Expr) const override;
+ bool evaluateAsRelocatableImpl(const MCSpecifierExpr &Expr, MCValue &Res,
+ const MCAssembler *Asm) const override;
};
namespace Mips {
@@ -66,6 +74,8 @@ enum {
S_TPREL_LO,
S_Special,
};
+
+bool isGpOff(const MCSpecifierExpr &E);
}
} // namespace llvm
diff --git a/llvm/lib/Target/Mips/MCTargetDesc/MipsMCCodeEmitter.cpp b/llvm/lib/Target/Mips/MCTargetDesc/MipsMCCodeEmitter.cpp
index 4035618e02526..d2981c4ad4d20 100644
--- a/llvm/lib/Target/Mips/MCTargetDesc/MipsMCCodeEmitter.cpp
+++ b/llvm/lib/Target/Mips/MCTargetDesc/MipsMCCodeEmitter.cpp
@@ -642,7 +642,7 @@ getExprOpValue(const MCExpr *Expr, SmallVectorImpl<MCFixup> &Fixups,
break;
case Mips::S_LO:
// Check for %lo(%neg(%gp_rel(X)))
- if (MipsExpr->isGpOff())
+ if (Mips::isGpOff(*MipsExpr))
FixupKind = isMicroMips(STI) ? Mips::fixup_MICROMIPS_GPOFF_LO
: Mips::fixup_Mips_GPOFF_LO;
else
@@ -659,7 +659,7 @@ getExprOpValue(const MCExpr *Expr, SmallVectorImpl<MCFixup> &Fixups,
break;
case Mips::S_HI:
// Check for %hi(%neg(%gp_rel(X)))
- if (MipsExpr->isGpOff())
+ if (Mips::isGpOff(*MipsExpr))
FixupKind = isMicroMips(STI) ? Mips::fixup_MICROMIPS_GPOFF_HI
: Mips::fixup_Mips_GPOFF_HI;
else
diff --git a/llvm/lib/Target/Mips/MCTargetDesc/MipsMCExpr.cpp b/llvm/lib/Target/Mips/MCTargetDesc/MipsMCExpr.cpp
index 821f662f0cbfb..280d944f2fbb3 100644
--- a/llvm/lib/Target/Mips/MCTargetDesc/MipsMCExpr.cpp
+++ b/llvm/lib/Target/Mips/MCTargetDesc/MipsMCExpr.cpp
@@ -37,3 +37,10 @@ const MipsMCExpr *MipsMCExpr::createGpOff(MipsMCExpr::Specifier S,
return create(S, create(Mips::S_NEG, create(Mips::S_GPREL, Expr, Ctx), Ctx),
Ctx);
}
+
+void MipsMCExpr::printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const {
+ if (MAI)
+ MAI->printExpr(OS, *this);
+ else // llc -asm-show-inst
+ MipsELFMCAsmInfo(Triple(), MCTargetOptions()).printExpr(OS, *this);
+}
diff --git a/llvm/lib/Target/Mips/MCTargetDesc/MipsMCExpr.h b/llvm/lib/Target/Mips/MCTargetDesc/MipsMCExpr.h
index 216077a1aa489..91ec094821857 100644
--- a/llvm/lib/Target/Mips/MCTargetDesc/MipsMCExpr.h
+++ b/llvm/lib/Target/Mips/MCTargetDesc/MipsMCExpr.h
@@ -31,14 +31,6 @@ class MipsMCExpr : public MCSpecifierExpr {
MCContext &Ctx);
void printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const override;
- bool evaluateAsRelocatableImpl(MCValue &Res,
- const MCAssembler *Asm) const override;
-
- bool isGpOff(Specifier &S) const;
- bool isGpOff() const {
- Specifier S;
- return isGpOff(S);
- }
};
} // end namespace llvm
More information about the llvm-commits
mailing list