[llvm] AArch64: Partially move setting of libcall names out of TargetLowering (PR #142985)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Fri Jun 6 07:17:51 PDT 2025
https://github.com/arsenm updated https://github.com/llvm/llvm-project/pull/142985
>From 262364d558be725de17614c6d70e62201208fd28 Mon Sep 17 00:00:00 2001
From: Matt Arsenault <Matthew.Arsenault at amd.com>
Date: Tue, 3 Jun 2025 02:45:03 +0200
Subject: [PATCH] AArch64: Partially move setting of libcall names out of
TargetLowering
Move the parts that aren't dependent on the subtarget into
RuntimeLibcallInfo, which should contain the superset of all possible
runtime calls and be accurate outside of codegen.
---
llvm/lib/IR/RuntimeLibcalls.cpp | 18 ++++++++++++++++++
.../lib/Target/AArch64/AArch64ISelLowering.cpp | 12 ------------
2 files changed, 18 insertions(+), 12 deletions(-)
diff --git a/llvm/lib/IR/RuntimeLibcalls.cpp b/llvm/lib/IR/RuntimeLibcalls.cpp
index 5ec5c72d3bf75..54227deddc53d 100644
--- a/llvm/lib/IR/RuntimeLibcalls.cpp
+++ b/llvm/lib/IR/RuntimeLibcalls.cpp
@@ -16,6 +16,21 @@ static cl::opt<bool>
HexagonEnableFastMathRuntimeCalls("hexagon-fast-math", cl::Hidden,
cl::desc("Enable Fast Math processing"));
+static void setAArch64LibcallNames(RuntimeLibcallsInfo &Info,
+ const Triple &TT) {
+ if (TT.isWindowsArm64EC()) {
+ // FIXME: are there calls we need to exclude from this?
+#define HANDLE_LIBCALL(code, name) \
+ { \
+ const char *libcallName = Info.getLibcallName(RTLIB::code); \
+ if (libcallName && libcallName[0] != '#') \
+ Info.setLibcallName(RTLIB::code, "#" #name); \
+ }
+#include "llvm/IR/RuntimeLibcalls.def"
+#undef HANDLE_LIBCALL
+ }
+}
+
/// Set default libcall names. If a target wants to opt-out of a libcall it
/// should be placed here.
void RuntimeLibcallsInfo::initLibcalls(const Triple &TT) {
@@ -247,6 +262,9 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT) {
}
}
+ if (TT.getArch() == Triple::ArchType::aarch64)
+ setAArch64LibcallNames(*this, TT);
+
if (TT.getArch() == Triple::ArchType::avr) {
// Division rtlib functions (not supported), use divmod functions instead
setLibcallName(RTLIB::SDIV_I8, nullptr);
diff --git a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
index b11e1553e8146..3dfa177f97ed7 100644
--- a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
+++ b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
@@ -1986,18 +1986,6 @@ AArch64TargetLowering::AArch64TargetLowering(const TargetMachine &TM,
for (ISD::NodeType Op : {ISD::FLDEXP, ISD::STRICT_FLDEXP, ISD::FFREXP})
if (isOperationExpand(Op, MVT::f16))
setOperationAction(Op, MVT::f16, Promote);
-
- if (Subtarget->isWindowsArm64EC()) {
- // FIXME: are there calls we need to exclude from this?
-#define HANDLE_LIBCALL(code, name) \
- { \
- const char *libcallName = getLibcallName(RTLIB::code); \
- if (libcallName && libcallName[0] != '#') \
- setLibcallName(RTLIB::code, "#" #name); \
- }
-#include "llvm/IR/RuntimeLibcalls.def"
-#undef HANDLE_LIBCALL
- }
}
void AArch64TargetLowering::addTypeForNEON(MVT VT) {
More information about the llvm-commits
mailing list