[llvm] 32f1fe3 - ARM: Move calling conv config to RuntimeLibcalls (#152065)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 13 16:36:07 PDT 2025
Author: Matt Arsenault
Date: 2025-08-14T08:36:03+09:00
New Revision: 32f1fe3770412981c3ede189417d2b9d4dc2d522
URL: https://github.com/llvm/llvm-project/commit/32f1fe3770412981c3ede189417d2b9d4dc2d522
DIFF: https://github.com/llvm/llvm-project/commit/32f1fe3770412981c3ede189417d2b9d4dc2d522.diff
LOG: ARM: Move calling conv config to RuntimeLibcalls (#152065)
Consolidate module level ABI into RuntimeLibcalls
Added:
Modified:
llvm/lib/IR/RuntimeLibcalls.cpp
llvm/lib/Target/ARM/ARMISelLowering.cpp
Removed:
################################################################################
diff --git a/llvm/lib/IR/RuntimeLibcalls.cpp b/llvm/lib/IR/RuntimeLibcalls.cpp
index a8e6c7938cf54..d794c49e56c34 100644
--- a/llvm/lib/IR/RuntimeLibcalls.cpp
+++ b/llvm/lib/IR/RuntimeLibcalls.cpp
@@ -9,6 +9,7 @@
#include "llvm/IR/RuntimeLibcalls.h"
#include "llvm/ADT/StringTable.h"
#include "llvm/Support/Debug.h"
+#include "llvm/TargetParser/ARMTargetParser.h"
#define DEBUG_TYPE "runtime-libcalls-info"
@@ -22,8 +23,39 @@ using namespace RTLIB;
#undef GET_SET_TARGET_RUNTIME_LIBCALL_SETS
static void setARMLibcallNames(RuntimeLibcallsInfo &Info, const Triple &TT,
- FloatABI::ABIType FloatABIType,
- EABI EABIVersion) {
+ FloatABI::ABIType FloatABIType, EABI EABIVersion,
+ StringRef ABIName) {
+ // The half <-> float conversion functions are always soft-float on
+ // non-watchos platforms, but are needed for some targets which use a
+ // hard-float calling convention by default.
+ if (!TT.isWatchABI()) {
+ ARM::ARMABI TargetABI = ARM::computeTargetABI(TT, ABIName);
+
+ if (TargetABI == ARM::ARM_ABI_AAPCS || TargetABI == ARM::ARM_ABI_AAPCS16) {
+ Info.setLibcallImplCallingConv(RTLIB::__truncsfhf2,
+ CallingConv::ARM_AAPCS);
+ Info.setLibcallImplCallingConv(RTLIB::__truncdfhf2,
+ CallingConv::ARM_AAPCS);
+ Info.setLibcallImplCallingConv(RTLIB::__extendhfsf2,
+ CallingConv::ARM_AAPCS);
+ Info.setLibcallImplCallingConv(RTLIB::__gnu_h2f_ieee,
+ CallingConv::ARM_AAPCS);
+ Info.setLibcallImplCallingConv(RTLIB::__gnu_f2h_ieee,
+ CallingConv::ARM_AAPCS);
+ } else {
+ Info.setLibcallImplCallingConv(RTLIB::__truncsfhf2,
+ CallingConv::ARM_APCS);
+ Info.setLibcallImplCallingConv(RTLIB::__truncdfhf2,
+ CallingConv::ARM_APCS);
+ Info.setLibcallImplCallingConv(RTLIB::__extendhfsf2,
+ CallingConv::ARM_APCS);
+ Info.setLibcallImplCallingConv(RTLIB::__gnu_h2f_ieee,
+ CallingConv::ARM_APCS);
+ Info.setLibcallImplCallingConv(RTLIB::__gnu_f2h_ieee,
+ CallingConv::ARM_APCS);
+ }
+ }
+
static const RTLIB::LibcallImpl AAPCS_Libcalls[] = {
RTLIB::__aeabi_dadd, RTLIB::__aeabi_ddiv,
RTLIB::__aeabi_dmul, RTLIB::__aeabi_dsub,
@@ -75,7 +107,7 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT,
setLibcallImpl(RTLIB::UNWIND_RESUME, RTLIB::_Unwind_SjLj_Resume);
if (TT.isARM() || TT.isThumb()) {
- setARMLibcallNames(*this, TT, FloatABI, EABIVersion);
+ setARMLibcallNames(*this, TT, FloatABI, EABIVersion, ABIName);
return;
}
diff --git a/llvm/lib/Target/ARM/ARMISelLowering.cpp b/llvm/lib/Target/ARM/ARMISelLowering.cpp
index ef5ba4fdfd114..686efb30eb6ed 100644
--- a/llvm/lib/Target/ARM/ARMISelLowering.cpp
+++ b/llvm/lib/Target/ARM/ARMISelLowering.cpp
@@ -707,25 +707,6 @@ ARMTargetLowering::ARMTargetLowering(const TargetMachine &TM_,
}
}
- // The half <-> float conversion functions are always soft-float on
- // non-watchos platforms, but are needed for some targets which use a
- // hard-float calling convention by default.
- if (!TT.isWatchABI()) {
- if (TM.isAAPCS_ABI()) {
- setLibcallImplCallingConv(RTLIB::__truncsfhf2, CallingConv::ARM_AAPCS);
- setLibcallImplCallingConv(RTLIB::__truncdfhf2, CallingConv::ARM_AAPCS);
- setLibcallImplCallingConv(RTLIB::__extendhfsf2, CallingConv::ARM_AAPCS);
- setLibcallImplCallingConv(RTLIB::__gnu_h2f_ieee, CallingConv::ARM_AAPCS);
- setLibcallImplCallingConv(RTLIB::__gnu_f2h_ieee, CallingConv::ARM_AAPCS);
- } else {
- setLibcallImplCallingConv(RTLIB::__truncsfhf2, CallingConv::ARM_APCS);
- setLibcallImplCallingConv(RTLIB::__truncdfhf2, CallingConv::ARM_APCS);
- setLibcallImplCallingConv(RTLIB::__extendhfsf2, CallingConv::ARM_APCS);
- setLibcallImplCallingConv(RTLIB::__gnu_h2f_ieee, CallingConv::ARM_APCS);
- setLibcallImplCallingConv(RTLIB::__gnu_f2h_ieee, CallingConv::ARM_APCS);
- }
- }
-
// In EABI, these functions have an __aeabi_ prefix, but in GNUEABI they have
// a __gnu_ prefix (which is the default).
if (TT.isTargetAEABI()) {
More information about the llvm-commits
mailing list