https://github.com/arsenm updated https://github.com/llvm/llvm-project/pull/153408
>From 333abd7a754ece4bbf213ae17b43f094268b41d5 Mon Sep 17 00:00:00 2001 From: Matt Arsenault <matthew.arsena...@amd.com> Date: Wed, 13 Aug 2025 21:05:36 +0900 Subject: [PATCH] ARM: Remove remaining half convert libcall config into tablegen The __truncdfhf2 handling is kind of convoluted, but reproduces the existing, likely wrong, handling. --- llvm/include/llvm/IR/RuntimeLibcalls.td | 28 ++++++++++++++++++++----- llvm/lib/IR/RuntimeLibcalls.cpp | 19 ----------------- 2 files changed, 23 insertions(+), 24 deletions(-) diff --git a/llvm/include/llvm/IR/RuntimeLibcalls.td b/llvm/include/llvm/IR/RuntimeLibcalls.td index 04de19e257c9b..d6a3a8ccdb6e4 100644 --- a/llvm/include/llvm/IR/RuntimeLibcalls.td +++ b/llvm/include/llvm/IR/RuntimeLibcalls.td @@ -1491,10 +1491,17 @@ def ARMHalfConvertLibcallCallingConv : LibcallCallingConv< (isAAPCS_ABI(TT, ABIName) ? CallingConv::ARM_AAPCS : CallingConv::ARM_APCS)}] >; -def GNUEABIHalfConvertCalls : - LibcallImpls<(add __gnu_f2h_ieee, __gnu_h2f_ieee), - RuntimeLibcallPredicate<[{!TT.isOSBinFormatMachO() && - !TT.isTargetAEABI()}]>> { +def ARMLibgccHalfConvertCalls : + LibcallImpls<(add __truncsfhf2, __extendhfsf2), + RuntimeLibcallPredicate<[{!TT.isTargetAEABI() && TT.isOSBinFormatMachO()}]>> { + let CallingConv = ARMHalfConvertLibcallCallingConv; +} + +// FIXME: These conditions are probably bugged. We're using the +// default libgcc call when the other cases are replaced. +def ARMDoubleToHalfCalls : + LibcallImpls<(add __truncdfhf2), + RuntimeLibcallPredicate<[{!TT.isTargetAEABI()}]>> { let CallingConv = ARMHalfConvertLibcallCallingConv; } @@ -1505,6 +1512,13 @@ def EABIHalfConvertCalls : LibcallImpls<(add __aeabi_f2h, __aeabi_h2f), let CallingConv = ARM_AAPCS; } +def GNUEABIHalfConvertCalls : + LibcallImpls<(add __gnu_f2h_ieee, __gnu_h2f_ieee), + RuntimeLibcallPredicate<[{!TT.isOSBinFormatMachO() && + !TT.isTargetAEABI()}]>> { + let CallingConv = ARMHalfConvertLibcallCallingConv; +} + def WindowARMDivRemCalls : LibcallImpls< (add __rt_sdiv, __rt_sdiv64, __rt_udiv, __rt_udiv64), isOSWindows> { @@ -1624,7 +1638,9 @@ def isARMOrThumb : RuntimeLibcallPredicate<"TT.isARM() || TT.isThumb()">; def ARMSystemLibrary : SystemRuntimeLibrary<isARMOrThumb, - (add WinDefaultLibcallImpls, + (add (sub WinDefaultLibcallImpls, ARMLibgccHalfConvertCalls, + GNUEABIHalfConvertCalls, + ARMDoubleToHalfCalls), LibcallImpls<(add __powisf2, __powidf2), isNotOSMSVCRT>, LibmHasFrexpF32, LibmHasLdexpF32, LibmHasFrexpF128, LibmHasLdexpF128, @@ -1638,8 +1654,10 @@ def ARMSystemLibrary AEABICalls, AEABI45MemCalls, + ARMLibgccHalfConvertCalls, EABIHalfConvertCalls, GNUEABIHalfConvertCalls, + ARMDoubleToHalfCalls, // Use divmod compiler-rt calls for iOS 5.0 and later. LibcallImpls<(add __divmodsi4, __udivmodsi4), diff --git a/llvm/lib/IR/RuntimeLibcalls.cpp b/llvm/lib/IR/RuntimeLibcalls.cpp index ac845c4998783..83f7df5e9f587 100644 --- a/llvm/lib/IR/RuntimeLibcalls.cpp +++ b/llvm/lib/IR/RuntimeLibcalls.cpp @@ -33,25 +33,6 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT, if (ExceptionModel == ExceptionHandling::SjLj) setLibcallImpl(RTLIB::UNWIND_RESUME, RTLIB::_Unwind_SjLj_Resume); - if (TT.isARM() || TT.isThumb()) { - // 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 (isAAPCS_ABI(TT, ABIName)) { - setLibcallImplCallingConv(RTLIB::__truncsfhf2, CallingConv::ARM_AAPCS); - setLibcallImplCallingConv(RTLIB::__truncdfhf2, CallingConv::ARM_AAPCS); - setLibcallImplCallingConv(RTLIB::__extendhfsf2, CallingConv::ARM_AAPCS); - } else { - setLibcallImplCallingConv(RTLIB::__truncsfhf2, CallingConv::ARM_APCS); - setLibcallImplCallingConv(RTLIB::__truncdfhf2, CallingConv::ARM_APCS); - setLibcallImplCallingConv(RTLIB::__extendhfsf2, CallingConv::ARM_APCS); - } - } - - return; - } - if (TT.getArch() == Triple::ArchType::msp430) { setLibcallImplCallingConv(RTLIB::__mspabi_mpyll, CallingConv::MSP430_BUILTIN); _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits