[llvm] 418c5de - PowerPC: Move PPCMCExpr into PPCMCAsmInfo
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Thu Jun 26 00:11:09 PDT 2025
Author: Fangrui Song
Date: 2025-06-26T00:11:04-07:00
New Revision: 418c5de19bbda6cc4dfdd8625465e2385561d75f
URL: https://github.com/llvm/llvm-project/commit/418c5de19bbda6cc4dfdd8625465e2385561d75f
DIFF: https://github.com/llvm/llvm-project/commit/418c5de19bbda6cc4dfdd8625465e2385561d75f.diff
LOG: PowerPC: Move PPCMCExpr into PPCMCAsmInfo
to align with targets that have made the transition.
Added:
Modified:
llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp
llvm/lib/Target/PowerPC/MCTargetDesc/CMakeLists.txt
llvm/lib/Target/PowerPC/MCTargetDesc/PPCAsmBackend.cpp
llvm/lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp
llvm/lib/Target/PowerPC/MCTargetDesc/PPCELFStreamer.cpp
llvm/lib/Target/PowerPC/MCTargetDesc/PPCInstPrinter.cpp
llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCAsmInfo.cpp
llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCAsmInfo.h
llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCCodeEmitter.cpp
llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp
llvm/lib/Target/PowerPC/MCTargetDesc/PPCTargetStreamer.h
llvm/lib/Target/PowerPC/MCTargetDesc/PPCXCOFFObjectWriter.cpp
llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
llvm/lib/Target/PowerPC/PPCMCInstLower.cpp
llvm/utils/gn/secondary/llvm/lib/Target/PowerPC/MCTargetDesc/BUILD.gn
Removed:
llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCExpr.cpp
llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCExpr.h
################################################################################
diff --git a/llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp b/llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp
index 2b3727be644da..9674050caf921 100644
--- a/llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp
+++ b/llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-#include "MCTargetDesc/PPCMCExpr.h"
+#include "MCTargetDesc/PPCMCAsmInfo.h"
#include "MCTargetDesc/PPCMCTargetDesc.h"
#include "MCTargetDesc/PPCTargetStreamer.h"
#include "PPCInstrInfo.h"
diff --git a/llvm/lib/Target/PowerPC/MCTargetDesc/CMakeLists.txt b/llvm/lib/Target/PowerPC/MCTargetDesc/CMakeLists.txt
index 94b3c2f9abb17..8eb013d18616f 100644
--- a/llvm/lib/Target/PowerPC/MCTargetDesc/CMakeLists.txt
+++ b/llvm/lib/Target/PowerPC/MCTargetDesc/CMakeLists.txt
@@ -4,7 +4,6 @@ add_llvm_component_library(LLVMPowerPCDesc
PPCMCTargetDesc.cpp
PPCMCAsmInfo.cpp
PPCMCCodeEmitter.cpp
- PPCMCExpr.cpp
PPCPredicates.cpp
PPCELFObjectWriter.cpp
PPCXCOFFObjectWriter.cpp
diff --git a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCAsmBackend.cpp b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCAsmBackend.cpp
index d4b86d5e2811d..658089f9582d6 100644
--- a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCAsmBackend.cpp
+++ b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCAsmBackend.cpp
@@ -7,7 +7,7 @@
//===----------------------------------------------------------------------===//
#include "MCTargetDesc/PPCFixupKinds.h"
-#include "MCTargetDesc/PPCMCExpr.h"
+#include "MCTargetDesc/PPCMCAsmInfo.h"
#include "MCTargetDesc/PPCMCTargetDesc.h"
#include "llvm/BinaryFormat/ELF.h"
#include "llvm/BinaryFormat/MachO.h"
diff --git a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp
index 8e885c3d86a0e..53312e36fb9da 100644
--- a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp
+++ b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp
@@ -7,7 +7,7 @@
//===----------------------------------------------------------------------===//
#include "MCTargetDesc/PPCFixupKinds.h"
-#include "MCTargetDesc/PPCMCExpr.h"
+#include "MCTargetDesc/PPCMCAsmInfo.h"
#include "MCTargetDesc/PPCMCTargetDesc.h"
#include "llvm/MC/MCContext.h"
#include "llvm/MC/MCELFObjectWriter.h"
diff --git a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCELFStreamer.cpp b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCELFStreamer.cpp
index 78065541f0d03..8ffc92c8dd026 100644
--- a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCELFStreamer.cpp
+++ b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCELFStreamer.cpp
@@ -18,8 +18,8 @@
//===----------------------------------------------------------------------===//
#include "PPCELFStreamer.h"
+#include "PPCMCAsmInfo.h"
#include "PPCMCCodeEmitter.h"
-#include "PPCMCExpr.h"
#include "PPCMCTargetDesc.h"
#include "llvm/BinaryFormat/ELF.h"
#include "llvm/MC/MCAsmBackend.h"
diff --git a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCInstPrinter.cpp b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCInstPrinter.cpp
index d587e7d339e81..b27bc3bd49315 100644
--- a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCInstPrinter.cpp
+++ b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCInstPrinter.cpp
@@ -13,7 +13,7 @@
#include "MCTargetDesc/PPCInstPrinter.h"
#include "MCTargetDesc/PPCMCTargetDesc.h"
#include "MCTargetDesc/PPCPredicates.h"
-#include "PPCMCExpr.h"
+#include "PPCMCAsmInfo.h"
#include "llvm/MC/MCAsmInfo.h"
#include "llvm/MC/MCExpr.h"
#include "llvm/MC/MCInst.h"
diff --git a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCAsmInfo.cpp b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCAsmInfo.cpp
index 971b592643dc6..1da599a591dd5 100644
--- a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCAsmInfo.cpp
+++ b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCAsmInfo.cpp
@@ -10,8 +10,7 @@
//
//===----------------------------------------------------------------------===//
-#include "PPCMCAsmInfo.h"
-#include "PPCMCExpr.h"
+#include "MCTargetDesc/PPCMCAsmInfo.h"
#include "llvm/MC/MCExpr.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/TargetParser/Triple.h"
@@ -99,6 +98,66 @@ const MCAsmInfo::VariantKindDesc variantKindDescs[] = {
{PPC::S_U, "u"},
};
+static std::optional<int64_t> evaluateAsInt64(uint16_t specifier,
+ int64_t Value) {
+ switch (specifier) {
+ case PPC::S_LO:
+ return Value & 0xffff;
+ case PPC::S_HI:
+ return (Value >> 16) & 0xffff;
+ case PPC::S_HA:
+ return ((Value + 0x8000) >> 16) & 0xffff;
+ case PPC::S_HIGH:
+ return (Value >> 16) & 0xffff;
+ case PPC::S_HIGHA:
+ return ((Value + 0x8000) >> 16) & 0xffff;
+ case PPC::S_HIGHER:
+ return (Value >> 32) & 0xffff;
+ case PPC::S_HIGHERA:
+ return ((Value + 0x8000) >> 32) & 0xffff;
+ case PPC::S_HIGHEST:
+ return (Value >> 48) & 0xffff;
+ case PPC::S_HIGHESTA:
+ return ((Value + 0x8000) >> 48) & 0xffff;
+ default:
+ return {};
+ }
+}
+
+bool PPC::evaluateAsConstant(const MCSpecifierExpr &Expr, int64_t &Res) {
+ MCValue Value;
+
+ if (!Expr.getSubExpr()->evaluateAsRelocatable(Value, nullptr))
+ return false;
+
+ if (!Value.isAbsolute())
+ return false;
+ auto Tmp = evaluateAsInt64(Expr.getSpecifier(), Value.getConstant());
+ if (!Tmp)
+ return false;
+ Res = *Tmp;
+ return true;
+}
+
+static bool evaluateAsRelocatable(const MCSpecifierExpr &Expr, MCValue &Res,
+ const MCAssembler *Asm) {
+ if (!Expr.getSubExpr()->evaluateAsRelocatable(Res, Asm))
+ return false;
+
+ // The signedness of the result is dependent on the instruction operand. E.g.
+ // in addis 3,3,65535 at l, 65535 at l is signed. In the absence of information at
+ // parse time (!Asm), disable the folding.
+ std::optional<int64_t> MaybeInt =
+ evaluateAsInt64(Expr.getSpecifier(), Res.getConstant());
+ if (Res.isAbsolute() && MaybeInt) {
+ Res = MCValue::get(*MaybeInt);
+ } else {
+ Res.setSpecifier(Expr.getSpecifier());
+ }
+
+ return true;
+}
+
PPCELFMCAsmInfo::PPCELFMCAsmInfo(bool is64Bit, const Triple& T) {
// FIXME: This is not always needed. For example, it is not needed in the
// v2 abi.
@@ -146,7 +205,7 @@ void PPCELFMCAsmInfo::printSpecifierExpr(raw_ostream &OS,
bool PPCELFMCAsmInfo::evaluateAsRelocatableImpl(const MCSpecifierExpr &Expr,
MCValue &Res,
const MCAssembler *Asm) const {
- return PPC::evaluateAsRelocatableImpl(Expr, Res, Asm);
+ return evaluateAsRelocatable(Expr, Res, Asm);
}
void PPCXCOFFMCAsmInfo::anchor() {}
@@ -181,5 +240,5 @@ void PPCXCOFFMCAsmInfo::printSpecifierExpr(raw_ostream &OS,
bool PPCXCOFFMCAsmInfo::evaluateAsRelocatableImpl(
const MCSpecifierExpr &Expr, MCValue &Res, const MCAssembler *Asm) const {
- return PPC::evaluateAsRelocatableImpl(Expr, Res, Asm);
+ return evaluateAsRelocatable(Expr, Res, Asm);
}
diff --git a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCAsmInfo.h b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCAsmInfo.h
index 172fe81c2bce2..0f945b31d4397 100644
--- a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCAsmInfo.h
+++ b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCAsmInfo.h
@@ -15,6 +15,8 @@
#include "llvm/MC/MCAsmInfoELF.h"
#include "llvm/MC/MCAsmInfoXCOFF.h"
+#include "llvm/MC/MCExpr.h"
+#include "llvm/MC/MCValue.h"
namespace llvm {
class Triple;
@@ -123,8 +125,17 @@ enum Specifier {
S_TPREL_LO, // symbol at tprel@l
S_U, // symbol at u
};
+
+bool evaluateAsConstant(const MCSpecifierExpr &Expr, int64_t &Res);
+}
+
+namespace PPCMCExpr {
+using Specifier = uint16_t;
}
+static inline uint16_t getSpecifier(const MCSymbolRefExpr *SRE) {
+ return SRE->getKind();
+}
} // namespace llvm
#endif
diff --git a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCCodeEmitter.cpp b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCCodeEmitter.cpp
index b1b1c5280f2ae..6be1f1c701c0a 100644
--- a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCCodeEmitter.cpp
+++ b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCCodeEmitter.cpp
@@ -12,7 +12,7 @@
#include "PPCMCCodeEmitter.h"
#include "MCTargetDesc/PPCFixupKinds.h"
-#include "PPCMCExpr.h"
+#include "PPCMCAsmInfo.h"
#include "PPCMCTargetDesc.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/Statistic.h"
diff --git a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCExpr.cpp b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCExpr.cpp
deleted file mode 100644
index 8d9c0892ae16f..0000000000000
--- a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCExpr.cpp
+++ /dev/null
@@ -1,77 +0,0 @@
-//===-- PPCMCExpr.cpp - PPC specific MC expression classes ----------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#include "PPCMCExpr.h"
-#include "llvm/MC/MCAsmInfo.h"
-#include "llvm/MC/MCAssembler.h"
-#include "llvm/MC/MCContext.h"
-#include "llvm/MC/MCObjectStreamer.h"
-
-using namespace llvm;
-
-#define DEBUG_TYPE "ppcmcexpr"
-
-static std::optional<int64_t> evaluateAsInt64(uint16_t specifier,
- int64_t Value) {
- switch (specifier) {
- case PPC::S_LO:
- return Value & 0xffff;
- case PPC::S_HI:
- return (Value >> 16) & 0xffff;
- case PPC::S_HA:
- return ((Value + 0x8000) >> 16) & 0xffff;
- case PPC::S_HIGH:
- return (Value >> 16) & 0xffff;
- case PPC::S_HIGHA:
- return ((Value + 0x8000) >> 16) & 0xffff;
- case PPC::S_HIGHER:
- return (Value >> 32) & 0xffff;
- case PPC::S_HIGHERA:
- return ((Value + 0x8000) >> 32) & 0xffff;
- case PPC::S_HIGHEST:
- return (Value >> 48) & 0xffff;
- case PPC::S_HIGHESTA:
- return ((Value + 0x8000) >> 48) & 0xffff;
- default:
- return {};
- }
-}
-
-bool PPC::evaluateAsConstant(const MCSpecifierExpr &Expr, int64_t &Res) {
- MCValue Value;
-
- if (!Expr.getSubExpr()->evaluateAsRelocatable(Value, nullptr))
- return false;
-
- if (!Value.isAbsolute())
- return false;
- auto Tmp = evaluateAsInt64(Expr.getSpecifier(), Value.getConstant());
- if (!Tmp)
- return false;
- Res = *Tmp;
- return true;
-}
-
-bool PPC::evaluateAsRelocatableImpl(const MCSpecifierExpr &Expr, MCValue &Res,
- const MCAssembler *Asm) {
- if (!Expr.getSubExpr()->evaluateAsRelocatable(Res, Asm))
- return false;
-
- // The signedness of the result is dependent on the instruction operand. E.g.
- // in addis 3,3,65535 at l, 65535 at l is signed. In the absence of information at
- // parse time (!Asm), disable the folding.
- std::optional<int64_t> MaybeInt =
- evaluateAsInt64(Expr.getSpecifier(), Res.getConstant());
- if (Res.isAbsolute() && MaybeInt) {
- Res = MCValue::get(*MaybeInt);
- } else {
- Res.setSpecifier(Expr.getSpecifier());
- }
-
- return true;
-}
diff --git a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCExpr.h b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCExpr.h
deleted file mode 100644
index d97a1204efbca..0000000000000
--- a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCExpr.h
+++ /dev/null
@@ -1,35 +0,0 @@
-//===-- PPCMCExpr.h - PPC specific MC expression classes --------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_LIB_TARGET_POWERPC_MCTARGETDESC_PPCMCEXPR_H
-#define LLVM_LIB_TARGET_POWERPC_MCTARGETDESC_PPCMCEXPR_H
-
-#include "PPCMCAsmInfo.h"
-#include "llvm/MC/MCExpr.h"
-#include "llvm/MC/MCValue.h"
-#include <optional>
-
-namespace llvm {
-
-namespace PPCMCExpr {
-using Specifier = uint16_t;
-}
-
-static inline PPCMCExpr::Specifier getSpecifier(const MCSymbolRefExpr *SRE) {
- return PPCMCExpr::Specifier(SRE->getKind());
-}
-
-namespace PPC {
-bool evaluateAsConstant(const MCSpecifierExpr &Expr, int64_t &Res);
-bool evaluateAsRelocatableImpl(const MCSpecifierExpr &Expr, MCValue &Res,
- const MCAssembler *Asm);
-} // namespace PPC
-
-} // end namespace llvm
-
-#endif
diff --git a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp
index dd2756a1a8238..cd874e810f78d 100644
--- a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp
+++ b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp
@@ -14,7 +14,7 @@
#include "MCTargetDesc/PPCInstPrinter.h"
#include "MCTargetDesc/PPCMCAsmInfo.h"
#include "PPCELFStreamer.h"
-#include "PPCMCExpr.h"
+#include "PPCMCAsmInfo.h"
#include "PPCTargetStreamer.h"
#include "PPCXCOFFStreamer.h"
#include "TargetInfo/PowerPCTargetInfo.h"
diff --git a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCTargetStreamer.h b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCTargetStreamer.h
index d1d3d9dde9355..3da034d4909ff 100644
--- a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCTargetStreamer.h
+++ b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCTargetStreamer.h
@@ -9,7 +9,7 @@
#ifndef LLVM_LIB_TARGET_POWERPC_PPCTARGETSTREAMER_H
#define LLVM_LIB_TARGET_POWERPC_PPCTARGETSTREAMER_H
-#include "PPCMCExpr.h"
+#include "PPCMCAsmInfo.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/MC/MCExpr.h"
#include "llvm/MC/MCStreamer.h"
diff --git a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCXCOFFObjectWriter.cpp b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCXCOFFObjectWriter.cpp
index 8532f537e2d6e..f75ab62fe95c5 100644
--- a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCXCOFFObjectWriter.cpp
+++ b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCXCOFFObjectWriter.cpp
@@ -9,7 +9,7 @@
#include "MCTargetDesc/PPCFixupKinds.h"
#include "MCTargetDesc/PPCMCTargetDesc.h"
-#include "PPCMCExpr.h"
+#include "PPCMCAsmInfo.h"
#include "llvm/BinaryFormat/XCOFF.h"
#include "llvm/MC/MCFixup.h"
#include "llvm/MC/MCValue.h"
diff --git a/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp b/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
index 9e42011c0c746..1a3fbe5c3ad63 100644
--- a/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
+++ b/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
@@ -16,7 +16,7 @@
//===----------------------------------------------------------------------===//
#include "MCTargetDesc/PPCInstPrinter.h"
-#include "MCTargetDesc/PPCMCExpr.h"
+#include "MCTargetDesc/PPCMCAsmInfo.h"
#include "MCTargetDesc/PPCMCTargetDesc.h"
#include "MCTargetDesc/PPCPredicates.h"
#include "MCTargetDesc/PPCTargetStreamer.h"
diff --git a/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp b/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp
index cbd53651bbbfc..52bc49fa81383 100644
--- a/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp
+++ b/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp
@@ -11,7 +11,7 @@
//
//===----------------------------------------------------------------------===//
-#include "MCTargetDesc/PPCMCExpr.h"
+#include "MCTargetDesc/PPCMCAsmInfo.h"
#include "PPC.h"
#include "PPCMachineFunctionInfo.h"
#include "PPCSubtarget.h"
diff --git a/llvm/utils/gn/secondary/llvm/lib/Target/PowerPC/MCTargetDesc/BUILD.gn b/llvm/utils/gn/secondary/llvm/lib/Target/PowerPC/MCTargetDesc/BUILD.gn
index 97b21360b02bd..00033a7b65720 100644
--- a/llvm/utils/gn/secondary/llvm/lib/Target/PowerPC/MCTargetDesc/BUILD.gn
+++ b/llvm/utils/gn/secondary/llvm/lib/Target/PowerPC/MCTargetDesc/BUILD.gn
@@ -58,7 +58,6 @@ static_library("MCTargetDesc") {
"PPCInstPrinter.cpp",
"PPCMCAsmInfo.cpp",
"PPCMCCodeEmitter.cpp",
- "PPCMCExpr.cpp",
"PPCMCTargetDesc.cpp",
"PPCPredicates.cpp",
"PPCXCOFFObjectWriter.cpp",
More information about the llvm-commits
mailing list