Skip to content

Commit da9d432

Browse files
committed
ARM: Remove remaining half convert libcall config into tablegen
The __truncdfhf2 handling is kind of convoluted, but reproduces the existing, likely wrong, handling.
1 parent 283d03d commit da9d432

File tree

2 files changed

+23
-24
lines changed

2 files changed

+23
-24
lines changed

llvm/include/llvm/IR/RuntimeLibcalls.td

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1532,10 +1532,17 @@ def ARMHalfConvertLibcallCallingConv : LibcallCallingConv<
15321532
(isAAPCS_ABI(TT, ABIName) ? CallingConv::ARM_AAPCS : CallingConv::ARM_APCS)}]
15331533
>;
15341534

1535-
def GNUEABIHalfConvertCalls :
1536-
LibcallImpls<(add __gnu_f2h_ieee, __gnu_h2f_ieee),
1537-
RuntimeLibcallPredicate<[{!TT.isOSBinFormatMachO() &&
1538-
!TT.isTargetAEABI()}]>> {
1535+
def ARMLibgccHalfConvertCalls :
1536+
LibcallImpls<(add __truncsfhf2, __extendhfsf2),
1537+
RuntimeLibcallPredicate<[{!TT.isTargetAEABI() && TT.isOSBinFormatMachO()}]>> {
1538+
let CallingConv = ARMHalfConvertLibcallCallingConv;
1539+
}
1540+
1541+
// FIXME: These conditions are probably bugged. We're using the
1542+
// default libgcc call when the other cases are replaced.
1543+
def ARMDoubleToHalfCalls :
1544+
LibcallImpls<(add __truncdfhf2),
1545+
RuntimeLibcallPredicate<[{!TT.isTargetAEABI()}]>> {
15391546
let CallingConv = ARMHalfConvertLibcallCallingConv;
15401547
}
15411548

@@ -1546,6 +1553,13 @@ def EABIHalfConvertCalls : LibcallImpls<(add __aeabi_f2h, __aeabi_h2f),
15461553
let CallingConv = ARM_AAPCS;
15471554
}
15481555

1556+
def GNUEABIHalfConvertCalls :
1557+
LibcallImpls<(add __gnu_f2h_ieee, __gnu_h2f_ieee),
1558+
RuntimeLibcallPredicate<[{!TT.isOSBinFormatMachO() &&
1559+
!TT.isTargetAEABI()}]>> {
1560+
let CallingConv = ARMHalfConvertLibcallCallingConv;
1561+
}
1562+
15491563
def WindowARMDivRemCalls : LibcallImpls<
15501564
(add __rt_sdiv, __rt_sdiv64, __rt_udiv, __rt_udiv64),
15511565
isOSWindows> {
@@ -1665,7 +1679,9 @@ def isARMOrThumb : RuntimeLibcallPredicate<"TT.isARM() || TT.isThumb()">;
16651679

16661680
def ARMSystemLibrary
16671681
: SystemRuntimeLibrary<isARMOrThumb,
1668-
(add WinDefaultLibcallImpls,
1682+
(add (sub WinDefaultLibcallImpls, ARMLibgccHalfConvertCalls,
1683+
GNUEABIHalfConvertCalls,
1684+
ARMDoubleToHalfCalls),
16691685
LibcallImpls<(add __powisf2, __powidf2), isNotOSMSVCRT>,
16701686
LibmHasFrexpF32, LibmHasLdexpF32,
16711687
LibmHasFrexpF128, LibmHasLdexpF128,
@@ -1679,8 +1695,10 @@ def ARMSystemLibrary
16791695

16801696
AEABICalls,
16811697
AEABI45MemCalls,
1698+
ARMLibgccHalfConvertCalls,
16821699
EABIHalfConvertCalls,
16831700
GNUEABIHalfConvertCalls,
1701+
ARMDoubleToHalfCalls,
16841702

16851703
// Use divmod compiler-rt calls for iOS 5.0 and later.
16861704
LibcallImpls<(add __divmodsi4, __udivmodsi4),

llvm/lib/IR/RuntimeLibcalls.cpp

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -33,25 +33,6 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT,
3333
if (ExceptionModel == ExceptionHandling::SjLj)
3434
setLibcallImpl(RTLIB::UNWIND_RESUME, RTLIB::_Unwind_SjLj_Resume);
3535

36-
if (TT.isARM() || TT.isThumb()) {
37-
// The half <-> float conversion functions are always soft-float on
38-
// non-watchos platforms, but are needed for some targets which use a
39-
// hard-float calling convention by default.
40-
if (!TT.isWatchABI()) {
41-
if (isAAPCS_ABI(TT, ABIName)) {
42-
setLibcallImplCallingConv(RTLIB::__truncsfhf2, CallingConv::ARM_AAPCS);
43-
setLibcallImplCallingConv(RTLIB::__truncdfhf2, CallingConv::ARM_AAPCS);
44-
setLibcallImplCallingConv(RTLIB::__extendhfsf2, CallingConv::ARM_AAPCS);
45-
} else {
46-
setLibcallImplCallingConv(RTLIB::__truncsfhf2, CallingConv::ARM_APCS);
47-
setLibcallImplCallingConv(RTLIB::__truncdfhf2, CallingConv::ARM_APCS);
48-
setLibcallImplCallingConv(RTLIB::__extendhfsf2, CallingConv::ARM_APCS);
49-
}
50-
}
51-
52-
return;
53-
}
54-
5536
if (TT.getArch() == Triple::ArchType::msp430) {
5637
setLibcallImplCallingConv(RTLIB::__mspabi_mpyll,
5738
CallingConv::MSP430_BUILTIN);

0 commit comments

Comments
 (0)