[llvm-branch-commits] [llvm] ARM: Avoid adding default libcalls overridden by AEABI functions (PR #164983)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Fri Oct 24 06:52:40 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-llvm-ir
Author: Matt Arsenault (arsenm)
<details>
<summary>Changes</summary>
Avoids adding alternative libcall impls for the same libcall.
I'm not sure if the default names exist or not, or are just not
preferred. compiler-rt appears to define aliases for all of these,
so I'm not sure why we bother distinguishing these in the first place.
---
Full diff: https://github.com/llvm/llvm-project/pull/164983.diff
1 Files Affected:
- (modified) llvm/include/llvm/IR/RuntimeLibcalls.td (+42-1)
``````````diff
diff --git a/llvm/include/llvm/IR/RuntimeLibcalls.td b/llvm/include/llvm/IR/RuntimeLibcalls.td
index 04e0ea3ee75a9..7be1b654ca727 100644
--- a/llvm/include/llvm/IR/RuntimeLibcalls.td
+++ b/llvm/include/llvm/IR/RuntimeLibcalls.td
@@ -1508,6 +1508,41 @@ def __aeabi_ddiv : RuntimeLibcallImpl<DIV_F64>; // CallingConv::ARM_AAPCS
def __aeabi_dmul : RuntimeLibcallImpl<MUL_F64>; // CallingConv::ARM_AAPCS
def __aeabi_dsub : RuntimeLibcallImpl<SUB_F64>; // CallingConv::ARM_AAPCS
+defvar AEABIOverrides = [
+ __eqsf2, __eqdf2,
+ __nesf2, __nedf2,
+ __ltsf2, __ltdf2,
+ __lesf2, __ledf2,
+ __gesf2, __gedf2,
+ __gtsf2, __gtdf2,
+ __unordsf2, __unorddf2,
+
+ __addsf3, __adddf3,
+ __divsf3, __divdf3,
+ __mulsf3, __muldf3,
+ __subsf3, __subdf3,
+
+ __fixdfsi, __fixunsdfsi,
+ __fixdfdi, __fixunsdfdi,
+ __fixsfsi, __fixunssfsi,
+ __fixsfdi, __fixunssfdi,
+
+ __floatsidf, __floatunsidf,
+ __floatdidf, __floatundidf,
+ __floatsisf, __floatunsisf,
+ __floatdisf, __floatundisf,
+
+ __muldi3, __ashldi3,
+ __lshrdi3, __ashrdi3,
+
+ __divsi3, __udivsi3
+
+ // Half conversion cases are a mess and handled separately.
+ // __truncdfsf2, __truncdfhf2,
+ // __extendsfdf2,
+ // __truncsfhf2, __extendhfsf2
+];
+
// Double-precision floating-point comparison helper functions
// RTABI chapter 4.1.2, Table 3
def __aeabi_dcmpeq__oeq : RuntimeLibcallImpl<OEQ_F64, "__aeabi_dcmpeq">; // CallingConv::ARM_AAPCS, CmpInst::ICMP_NE
@@ -1793,7 +1828,8 @@ def ARMSystemLibrary
: SystemRuntimeLibrary<isARMOrThumb,
(add (sub WinDefaultLibcallImpls, ARMLibgccHalfConvertCalls,
GNUEABIHalfConvertCalls,
- ARMDoubleToHalfCalls),
+ ARMDoubleToHalfCalls,
+ AEABIOverrides),
LibcallImpls<(add __powisf2, __powidf2), isNotOSMSVCRT>,
LibmHasFrexpF32, LibmHasLdexpF32,
LibmHasFrexpF128, LibmHasLdexpF128,
@@ -1812,6 +1848,11 @@ def ARMSystemLibrary
GNUEABIHalfConvertCalls,
ARMDoubleToHalfCalls,
+ LibcallImpls<(add AEABIOverrides),
+ RuntimeLibcallPredicate<[{
+ (!hasAEABILibcalls(TT) || !isAAPCS_ABI(TT, ABIName)) &&
+ !TT.isOSWindows()
+ }]>>,
// Use divmod compiler-rt calls for iOS 5.0 and later.
LibcallImpls<(add __divmodsi4, __udivmodsi4),
RuntimeLibcallPredicate<[{TT.isOSBinFormatMachO() &&
``````````
</details>
https://github.com/llvm/llvm-project/pull/164983
More information about the llvm-branch-commits
mailing list