Skip to content

Commit e77db15

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 2b09c7b commit e77db15

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
@@ -1491,10 +1491,17 @@ def ARMHalfConvertLibcallCallingConv : LibcallCallingConv<
14911491
(isAAPCS_ABI(TT, ABIName) ? CallingConv::ARM_AAPCS : CallingConv::ARM_APCS)}]
14921492
>;
14931493

1494-
def GNUEABIHalfConvertCalls :
1495-
LibcallImpls<(add __gnu_f2h_ieee, __gnu_h2f_ieee),
1496-
RuntimeLibcallPredicate<[{!TT.isOSBinFormatMachO() &&
1497-
!TT.isTargetAEABI()}]>> {
1494+
def ARMLibgccHalfConvertCalls :
1495+
LibcallImpls<(add __truncsfhf2, __extendhfsf2),
1496+
RuntimeLibcallPredicate<[{!TT.isTargetAEABI() && TT.isOSBinFormatMachO()}]>> {
1497+
let CallingConv = ARMHalfConvertLibcallCallingConv;
1498+
}
1499+
1500+
// FIXME: These conditions are probably bugged. We're using the
1501+
// default libgcc call when the other cases are replaced.
1502+
def ARMDoubleToHalfCalls :
1503+
LibcallImpls<(add __truncdfhf2),
1504+
RuntimeLibcallPredicate<[{!TT.isTargetAEABI()}]>> {
14981505
let CallingConv = ARMHalfConvertLibcallCallingConv;
14991506
}
15001507

@@ -1505,6 +1512,13 @@ def EABIHalfConvertCalls : LibcallImpls<(add __aeabi_f2h, __aeabi_h2f),
15051512
let CallingConv = ARM_AAPCS;
15061513
}
15071514

1515+
def GNUEABIHalfConvertCalls :
1516+
LibcallImpls<(add __gnu_f2h_ieee, __gnu_h2f_ieee),
1517+
RuntimeLibcallPredicate<[{!TT.isOSBinFormatMachO() &&
1518+
!TT.isTargetAEABI()}]>> {
1519+
let CallingConv = ARMHalfConvertLibcallCallingConv;
1520+
}
1521+
15081522
def WindowARMDivRemCalls : LibcallImpls<
15091523
(add __rt_sdiv, __rt_sdiv64, __rt_udiv, __rt_udiv64),
15101524
isOSWindows> {
@@ -1624,7 +1638,9 @@ def isARMOrThumb : RuntimeLibcallPredicate<"TT.isARM() || TT.isThumb()">;
16241638

16251639
def ARMSystemLibrary
16261640
: SystemRuntimeLibrary<isARMOrThumb,
1627-
(add WinDefaultLibcallImpls,
1641+
(add (sub WinDefaultLibcallImpls, ARMLibgccHalfConvertCalls,
1642+
GNUEABIHalfConvertCalls,
1643+
ARMDoubleToHalfCalls),
16281644
LibcallImpls<(add __powisf2, __powidf2), isNotOSMSVCRT>,
16291645
LibmHasFrexpF32, LibmHasLdexpF32,
16301646
LibmHasFrexpF128, LibmHasLdexpF128,
@@ -1638,8 +1654,10 @@ def ARMSystemLibrary
16381654

16391655
AEABICalls,
16401656
AEABI45MemCalls,
1657+
ARMLibgccHalfConvertCalls,
16411658
EABIHalfConvertCalls,
16421659
GNUEABIHalfConvertCalls,
1660+
ARMDoubleToHalfCalls,
16431661

16441662
// Use divmod compiler-rt calls for iOS 5.0 and later.
16451663
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)