[llvm] AArch64: Partially move setting of libcall names out of TargetLowering (PR #142985)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Jun 5 08:05:12 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-aarch64
Author: Matt Arsenault (arsenm)
<details>
<summary>Changes</summary>
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.
---
Full diff: https://github.com/llvm/llvm-project/pull/142985.diff
2 Files Affected:
- (modified) llvm/lib/IR/RuntimeLibcalls.cpp (+22)
- (modified) llvm/lib/Target/AArch64/AArch64ISelLowering.cpp (-12)
``````````diff
diff --git a/llvm/lib/IR/RuntimeLibcalls.cpp b/llvm/lib/IR/RuntimeLibcalls.cpp
index ca45cd4b7b13c..6ffe535242edd 100644
--- a/llvm/lib/IR/RuntimeLibcalls.cpp
+++ b/llvm/lib/IR/RuntimeLibcalls.cpp
@@ -11,6 +11,25 @@
using namespace llvm;
using namespace RTLIB;
+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) {
@@ -249,6 +268,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 9f51caef6d228..2019c9df0f271 100644
--- a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
+++ b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
@@ -1982,18 +1982,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) {
``````````
</details>
https://github.com/llvm/llvm-project/pull/142985
More information about the llvm-commits
mailing list