Skip to content

Commit 0991435

Browse files
authored
RuntimeLibcalls: Mostly move x86 configuration into tablegen (#148575)
This is getting pretty ugly, but seems to be the worst of the cases. Opting out of the base set of calls for the various windows cases is really ugly. We need to apply that to the arm cases as well. It also may make sense to go back to transposing the architecture and operating system (i.e. make isOSWindows the SystemLibrary and then modify based on architecture).
1 parent acf07dc commit 0991435

File tree

3 files changed

+102
-139
lines changed

3 files changed

+102
-139
lines changed

llvm/include/llvm/IR/RuntimeLibcalls.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,10 @@ struct RuntimeLibcallsInfo {
174174
(TT.isAndroid() && !TT.isAndroidVersionLT(9));
175175
}
176176

177+
static bool hasSinCos_f32_f64(const Triple &TT) {
178+
return hasSinCos(TT) || TT.isPS();
179+
}
180+
177181
LLVM_ABI void initDefaultLibCallImpls();
178182

179183
/// Generated by tablegen.

llvm/include/llvm/IR/RuntimeLibcalls.td

Lines changed: 86 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,23 @@ class DuplicateLibcallImplWithPrefix<RuntimeLibcallImpl Impl, string prefix>
1717

1818
/// Libcall Predicates
1919
def isOSDarwin : RuntimeLibcallPredicate<"TT.isOSDarwin()">;
20+
def isOSOpenBSD : RuntimeLibcallPredicate<"TT.isOSOpenBSD()">;
2021
def isOSWindows : RuntimeLibcallPredicate<"TT.isOSWindows()">;
22+
def isNotOSWindows : RuntimeLibcallPredicate<"!TT.isOSWindows()">;
23+
def isNotOSMSVCRT : RuntimeLibcallPredicate<"!TT.isOSMSVCRT()">;
24+
def isPS : RuntimeLibcallPredicate<"TT.isPS()">;
25+
def isNotOSWindowsOrIsCygwinMinGW
26+
: RuntimeLibcallPredicate<"!TT.isOSWindows() || TT.isOSCygMing()">;
2127

28+
29+
def isGNUEnvironment : RuntimeLibcallPredicate<"TT.isGNUEnvironment()">;
2230
def darwinHasSinCosStret : RuntimeLibcallPredicate<"darwinHasSinCosStret(TT)">;
2331
def darwinHasExp10 : RuntimeLibcallPredicate<"darwinHasExp10(TT)">;
2432
def hasSinCos : RuntimeLibcallPredicate<"hasSinCos(TT)">;
2533

34+
// FIXME: Way to combine predicates
35+
def hasSinCos_f32_f64 : RuntimeLibcallPredicate<"hasSinCos_f32_f64(TT)">;
36+
2637
//--------------------------------------------------------------------
2738
// Declare all kinds of used libcalls
2839
//--------------------------------------------------------------------
@@ -514,11 +525,13 @@ def __divxf3 : RuntimeLibcallImpl<DIV_F80>;
514525
def __divtf3 : RuntimeLibcallImpl<DIV_F128>;
515526
def __gcc_qdiv : RuntimeLibcallImpl<DIV_PPCF128>;
516527

528+
defset list<RuntimeLibcallImpl> PowiLibcallImpls = {
517529
def __powisf2 : RuntimeLibcallImpl<POWI_F32>;
518530
def __powidf2 : RuntimeLibcallImpl<POWI_F64>;
519531
def __powixf2 : RuntimeLibcallImpl<POWI_F80>;
520532
def __powitf2_f128 : RuntimeLibcallImpl<POWI_F128, "__powitf2">;
521533
def __powitf2_ppc128 : RuntimeLibcallImpl<POWI_PPCF128, "__powitf2">;
534+
}
522535

523536
// Conversion
524537
def __extendbfsf2 : RuntimeLibcallImpl<FPEXT_BF16_F32>;
@@ -1084,6 +1097,29 @@ defvar LibmHasSinCosF80 = LibcallImpls<(add sincos_f80), hasSinCos>;
10841097
defvar LibmHasSinCosF128 = LibcallImpls<(add sincos_f128), hasSinCos>;
10851098
defvar LibmHasSinCosPPCF128 = LibcallImpls<(add sincos_ppcf128), hasSinCos>;
10861099

1100+
defvar WindowsMathRemovals = [
1101+
ldexpf, ldexp_f80, ldexp_f128, ldexp_ppcf128,
1102+
frexpf, frexp_f80, frexp_f128, frexp_ppcf128
1103+
];
1104+
1105+
defvar MostPowI = !listremove(PowiLibcallImpls, [__powitf2_f128, __powitf2_ppc128]);
1106+
defvar WindowsExclusions = !listconcat(WindowsMathRemovals, MostPowI);
1107+
1108+
// Targets which support windows should start with these as a base and
1109+
// add in calls for other OSes
1110+
defvar Win32DefaultLibcallImpls = !listremove(DefaultLibcallImpls32, WindowsExclusions);
1111+
defvar Win64DefaultLibcallImpls = !listremove(DefaultLibcallImpls64, WindowsExclusions);
1112+
1113+
defvar LibmHasFrexpF32 = LibcallImpls<(add frexpf), isNotOSWindowsOrIsCygwinMinGW>;
1114+
defvar LibmHasLdexpF32 = LibcallImpls<(add ldexpf), isNotOSWindowsOrIsCygwinMinGW>;
1115+
1116+
defvar LibmHasFrexpF80 = LibcallImpls<(add frexp_f80), isNotOSWindowsOrIsCygwinMinGW>;
1117+
defvar LibmHasLdexpF80 = LibcallImpls<(add ldexp_f80), isNotOSWindowsOrIsCygwinMinGW>;
1118+
1119+
defvar LibmHasFrexpF128 = LibcallImpls<(add frexp_f128), isNotOSWindowsOrIsCygwinMinGW>;
1120+
defvar LibmHasLdexpF128 = LibcallImpls<(add ldexp_f128), isNotOSWindowsOrIsCygwinMinGW>;
1121+
1122+
10871123
//===----------------------------------------------------------------------===//
10881124
// Objective-C Runtime Libcalls
10891125
//===----------------------------------------------------------------------===//
@@ -1151,7 +1187,10 @@ def isAArch64_ILP64 : RuntimeLibcallPredicate<"TT.isAArch64(64)">;
11511187

11521188
def AArch64SystemLibrary : SystemRuntimeLibrary<
11531189
isAArch64_ExceptArm64EC,
1154-
(add DefaultRuntimeLibcallImpls,
1190+
(add Win64DefaultLibcallImpls,
1191+
LibcallImpls<(add __powisf2, __powidf2), isNotOSMSVCRT>,
1192+
LibmHasFrexpF32, LibmHasLdexpF32,
1193+
LibmHasFrexpF128, LibmHasLdexpF128,
11551194
AArch64LibcallImpls,
11561195
LibcallImpls<(add Int128RTLibcalls), isAArch64_ILP64>,
11571196
LibcallImpls<(add bzero), isOSDarwin>,
@@ -1161,7 +1200,7 @@ def AArch64SystemLibrary : SystemRuntimeLibrary<
11611200

11621201
// Prepend a # to every name
11631202
defset list<RuntimeLibcallImpl> WinArm64ECDefaultRuntimeLibcallImpls = {
1164-
foreach libcall = DefaultLibcallImpls64 in {
1203+
foreach libcall = Win64DefaultLibcallImpls in {
11651204
def arm64ec_#libcall : DuplicateLibcallImplWithPrefix<libcall, "#">;
11661205
}
11671206

@@ -1418,11 +1457,15 @@ def isARMOrThumb : RuntimeLibcallPredicate<"TT.isARM() || TT.isThumb()">;
14181457

14191458
def ARMSystemLibrary
14201459
: SystemRuntimeLibrary<isARMOrThumb,
1421-
(add DefaultLibcallImpls32,
1460+
(add Win32DefaultLibcallImpls,
1461+
LibcallImpls<(add __powisf2, __powidf2), isNotOSMSVCRT>,
1462+
LibmHasFrexpF32, LibmHasLdexpF32,
1463+
LibmHasFrexpF128, LibmHasLdexpF128,
14221464
WindowARMDivRemCalls,
14231465
WindowARMFPIntCasts,
14241466
AEABIDivRemCalls,
14251467
DarwinSinCosStret, DarwinExp10,
1468+
LibmHasSinCosF32, LibmHasSinCosF64, LibmHasSinCosF128,
14261469

14271470
// Use divmod compiler-rt calls for iOS 5.0 and later.
14281471
LibcallImpls<(add __divmodsi4, __udivmodsi4),
@@ -1916,6 +1959,8 @@ def PPCSystemLibrary
19161959
__extendkftf2, __trunctfkf2,
19171960
DefaultRuntimeLibcallImpls_ppcf128,
19181961
LibmF128Libcalls, AIX32Calls, AIX64Calls,
1962+
LibmHasSinCosF32, LibmHasSinCosF64, LibmHasSinCosF128,
1963+
LibmHasSinCosPPCF128,
19191964
AvailableIf<memcpy, isNotAIX>,
19201965
LibcallImpls<(add Int128RTLibcalls), isPPC64>)>;
19211966

@@ -2003,28 +2048,62 @@ def SPARCSystemLibrary
20032048
// Windows Runtime Libcalls
20042049
//===----------------------------------------------------------------------===//
20052050

2006-
// TT.isWindowsMSVCEnvironment() || TT.isWindowsItaniumEnvironment()
2007-
2051+
defset list<RuntimeLibcallImpl> WindowsDivRemMulLibcalls = {
20082052
def _alldiv : RuntimeLibcallImpl<SDIV_I64>;
20092053
def _aulldiv : RuntimeLibcallImpl<UDIV_I64>;
20102054
def _allrem : RuntimeLibcallImpl<SREM_I64>;
20112055
def _aullrem : RuntimeLibcallImpl<UREM_I64>;
20122056
def _allmul : RuntimeLibcallImpl<MUL_I64>;
2057+
}
20132058

20142059
//===----------------------------------------------------------------------===//
20152060
// X86 Runtime Libcalls
20162061
//===----------------------------------------------------------------------===//
20172062

20182063
def isX86_32 : RuntimeLibcallPredicate<"TT.getArch() == Triple::x86">;
20192064
def isX86_64 : RuntimeLibcallPredicate<"TT.getArch() == Triple::x86_64">;
2065+
def isX86 : RuntimeLibcallPredicate<"TT.isX86()">;
2066+
2067+
// Some darwins have an optimized __bzero/bzero function.
2068+
def darwinHas__bzero : RuntimeLibcallPredicate<"TT.isMacOSX() && !TT.isMacOSXVersionLT(10, 6)">;
2069+
2070+
// FIXME: This is has ldexpl/frexpl plus use f128 for long double.
2071+
def hasFrexplLdexplF128
2072+
: RuntimeLibcallPredicate<[{(!TT.isOSWindows() || TT.isOSCygMing()) && !TT.isGNUEnvironment()}]>;
2073+
2074+
// Use the f128 variants of math functions on x86
2075+
defvar X86_F128_Libcalls = LibcallImpls<(add LibmF128Libcalls, LibmF128FiniteLibcalls), isGNUEnvironment>;
2076+
2077+
defvar SinCosF32F64Libcalls = LibcallImpls<(add sincosf, sincos), hasSinCos_f32_f64>;
2078+
2079+
defvar X86CommonLibcalls =
2080+
(add DarwinSinCosStret, DarwinExp10,
2081+
X86_F128_Libcalls,
2082+
LibmHasSinCosF80, // FIXME: Depends on long double
2083+
SinCosF32F64Libcalls,
2084+
LibcallImpls<(add __bzero), darwinHas__bzero>,
2085+
LibmHasFrexpF32, LibmHasLdexpF32,
2086+
LibmHasFrexpF80, LibmHasLdexpF80,
2087+
LibcallImpls<(add frexp_f128, ldexp_f128), hasFrexplLdexplF128>,
2088+
DefaultRuntimeLibcallImpls_f80,
2089+
// FIXME: MSVCRT doesn't have powi. The f128 case is added as a
2090+
// hack for one test relying on it.
2091+
__powitf2_f128,
2092+
LibcallImpls<(add MostPowI), isNotOSMSVCRT>
2093+
);
2094+
2095+
defvar Windows32DivRemMulCalls =
2096+
LibcallImpls<(add WindowsDivRemMulLibcalls),
2097+
RuntimeLibcallPredicate<"TT.isWindowsMSVCEnvironment() || TT.isWindowsItaniumEnvironment()">>;
20202098

20212099
def X86_32SystemLibrary
20222100
: SystemRuntimeLibrary<isX86_32,
2023-
(add DefaultLibcallImpls32, DefaultRuntimeLibcallImpls_f80)>;
2101+
(add X86CommonLibcalls,
2102+
Windows32DivRemMulCalls, Win32DefaultLibcallImpls)>;
20242103

20252104
def X86_64SystemLibrary
20262105
: SystemRuntimeLibrary<isX86_64,
2027-
(add DefaultLibcallImpls64, DefaultRuntimeLibcallImpls_f80)>;
2106+
(add X86CommonLibcalls, Win64DefaultLibcallImpls, Int128RTLibcalls)>;
20282107

20292108
//===----------------------------------------------------------------------===//
20302109
// XCore Runtime Libcalls

llvm/lib/IR/RuntimeLibcalls.cpp

Lines changed: 12 additions & 132 deletions
Original file line numberDiff line numberDiff line change
@@ -61,69 +61,6 @@ static void setARMLibcallNames(RuntimeLibcallsInfo &Info, const Triple &TT,
6161
Info.setLibcallImplCallingConv(Impl, CallingConv::ARM_AAPCS);
6262
}
6363

64-
static void setLongDoubleIsF128Libm(RuntimeLibcallsInfo &Info,
65-
bool FiniteOnlyFuncs = false) {
66-
Info.setLibcallImpl(RTLIB::REM_F128, RTLIB::fmodf128);
67-
Info.setLibcallImpl(RTLIB::FMA_F128, RTLIB::fmaf128);
68-
Info.setLibcallImpl(RTLIB::SQRT_F128, RTLIB::sqrtf128);
69-
Info.setLibcallImpl(RTLIB::CBRT_F128, RTLIB::cbrtf128);
70-
Info.setLibcallImpl(RTLIB::LOG_F128, RTLIB::logf128);
71-
Info.setLibcallImpl(RTLIB::LOG2_F128, RTLIB::log2f128);
72-
Info.setLibcallImpl(RTLIB::LOG10_F128, RTLIB::log10f128);
73-
Info.setLibcallImpl(RTLIB::EXP_F128, RTLIB::expf128);
74-
Info.setLibcallImpl(RTLIB::EXP2_F128, RTLIB::exp2f128);
75-
Info.setLibcallImpl(RTLIB::EXP10_F128, RTLIB::exp10f128);
76-
Info.setLibcallImpl(RTLIB::SIN_F128, RTLIB::sinf128);
77-
Info.setLibcallImpl(RTLIB::COS_F128, RTLIB::cosf128);
78-
Info.setLibcallImpl(RTLIB::TAN_F128, RTLIB::tanf128);
79-
Info.setLibcallImpl(RTLIB::SINCOS_F128, RTLIB::sincosf128);
80-
Info.setLibcallImpl(RTLIB::ASIN_F128, RTLIB::asinf128);
81-
Info.setLibcallImpl(RTLIB::ACOS_F128, RTLIB::acosf128);
82-
Info.setLibcallImpl(RTLIB::ATAN_F128, RTLIB::atanf128);
83-
Info.setLibcallImpl(RTLIB::ATAN2_F128, RTLIB::atan2f128);
84-
Info.setLibcallImpl(RTLIB::SINH_F128, RTLIB::sinhf128);
85-
Info.setLibcallImpl(RTLIB::COSH_F128, RTLIB::coshf128);
86-
Info.setLibcallImpl(RTLIB::TANH_F128, RTLIB::tanhf128);
87-
Info.setLibcallImpl(RTLIB::POW_F128, RTLIB::powf128);
88-
Info.setLibcallImpl(RTLIB::CEIL_F128, RTLIB::ceilf128);
89-
Info.setLibcallImpl(RTLIB::TRUNC_F128, RTLIB::truncf128);
90-
Info.setLibcallImpl(RTLIB::RINT_F128, RTLIB::rintf128);
91-
Info.setLibcallImpl(RTLIB::NEARBYINT_F128, RTLIB::nearbyintf128);
92-
Info.setLibcallImpl(RTLIB::ROUND_F128, RTLIB::roundf128);
93-
Info.setLibcallImpl(RTLIB::ROUNDEVEN_F128, RTLIB::roundevenf128);
94-
Info.setLibcallImpl(RTLIB::FLOOR_F128, RTLIB::floorf128);
95-
Info.setLibcallImpl(RTLIB::COPYSIGN_F128, RTLIB::copysignf128);
96-
Info.setLibcallImpl(RTLIB::FMIN_F128, RTLIB::fminf128);
97-
Info.setLibcallImpl(RTLIB::FMAX_F128, RTLIB::fmaxf128);
98-
Info.setLibcallImpl(RTLIB::FMINIMUM_F128, RTLIB::fminimumf128);
99-
Info.setLibcallImpl(RTLIB::FMAXIMUM_F128, RTLIB::fmaximumf128);
100-
Info.setLibcallImpl(RTLIB::FMINIMUM_NUM_F128, RTLIB::fminimum_numf128);
101-
Info.setLibcallImpl(RTLIB::FMAXIMUM_NUM_F128, RTLIB::fmaximum_numf128);
102-
Info.setLibcallImpl(RTLIB::LROUND_F128, RTLIB::lroundf128);
103-
Info.setLibcallImpl(RTLIB::LLROUND_F128, RTLIB::llroundf128);
104-
Info.setLibcallImpl(RTLIB::LRINT_F128, RTLIB::lrintf128);
105-
Info.setLibcallImpl(RTLIB::LLRINT_F128, RTLIB::llrintf128);
106-
Info.setLibcallImpl(RTLIB::LDEXP_F128, RTLIB::ldexpf128);
107-
Info.setLibcallImpl(RTLIB::FREXP_F128, RTLIB::frexpf128);
108-
Info.setLibcallImpl(RTLIB::MODF_F128, RTLIB::modff128);
109-
110-
if (FiniteOnlyFuncs) {
111-
Info.setLibcallImpl(RTLIB::LOG_FINITE_F128, RTLIB::__logf128_finite);
112-
Info.setLibcallImpl(RTLIB::LOG2_FINITE_F128, RTLIB::__log2f128_finite);
113-
Info.setLibcallImpl(RTLIB::LOG10_FINITE_F128, RTLIB::__log10f128_finite);
114-
Info.setLibcallImpl(RTLIB::EXP_FINITE_F128, RTLIB::__expf128_finite);
115-
Info.setLibcallImpl(RTLIB::EXP2_FINITE_F128, RTLIB::__exp2f128_finite);
116-
Info.setLibcallImpl(RTLIB::POW_FINITE_F128, RTLIB::__powf128_finite);
117-
} else {
118-
Info.setLibcallImpl(RTLIB::LOG_FINITE_F128, RTLIB::Unsupported);
119-
Info.setLibcallImpl(RTLIB::LOG2_FINITE_F128, RTLIB::Unsupported);
120-
Info.setLibcallImpl(RTLIB::LOG10_FINITE_F128, RTLIB::Unsupported);
121-
Info.setLibcallImpl(RTLIB::EXP_FINITE_F128, RTLIB::Unsupported);
122-
Info.setLibcallImpl(RTLIB::EXP2_FINITE_F128, RTLIB::Unsupported);
123-
Info.setLibcallImpl(RTLIB::POW_FINITE_F128, RTLIB::Unsupported);
124-
}
125-
}
126-
12764
void RTLIB::RuntimeLibcallsInfo::initDefaultLibCallImpls() {
12865
std::memcpy(LibcallImpls, DefaultLibcallImpls, sizeof(LibcallImpls));
12966
static_assert(sizeof(LibcallImpls) == sizeof(DefaultLibcallImpls),
@@ -142,10 +79,6 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT,
14279
if (TT.isAMDGPU() || TT.isNVPTX() || TT.isWasm())
14380
return;
14481

145-
// Use the f128 variants of math functions on x86
146-
if (TT.isX86() && TT.isGNUEnvironment())
147-
setLongDoubleIsF128Libm(*this, /*FiniteOnlyFuncs=*/true);
148-
14982
if (TT.isX86() || TT.isVE() || TT.isARM() || TT.isThumb()) {
15083
if (ExceptionModel == ExceptionHandling::SjLj)
15184
setLibcallImpl(RTLIB::UNWIND_RESUME, RTLIB::_Unwind_SjLj_Resume);
@@ -159,85 +92,32 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT,
15992
setLibcallImpl(RTLIB::FPEXT_F16_F32, RTLIB::__extendhfsf2);
16093
setLibcallImpl(RTLIB::FPROUND_F32_F16, RTLIB::__truncsfhf2);
16194

162-
// Some darwins have an optimized __bzero/bzero function.
163-
if (TT.isX86()) {
164-
if (TT.isMacOSX() && !TT.isMacOSXVersionLT(10, 6))
165-
setLibcallImpl(RTLIB::BZERO, RTLIB::__bzero);
166-
}
167-
168-
if (darwinHasSinCosStret(TT)) {
169-
setLibcallImpl(RTLIB::SINCOS_STRET_F32, RTLIB::__sincosf_stret);
170-
setLibcallImpl(RTLIB::SINCOS_STRET_F64, RTLIB::__sincos_stret);
171-
}
172-
173-
if (darwinHasExp10(TT)) {
174-
setLibcallImpl(RTLIB::EXP10_F32, RTLIB::__exp10f);
175-
setLibcallImpl(RTLIB::EXP10_F64, RTLIB::__exp10);
176-
} else {
95+
if (!darwinHasExp10(TT)) {
17796
setLibcallImpl(RTLIB::EXP10_F32, RTLIB::Unsupported);
17897
setLibcallImpl(RTLIB::EXP10_F64, RTLIB::Unsupported);
17998
}
18099
}
181100

182-
if (hasSinCos(TT)) {
183-
setLibcallImpl(RTLIB::SINCOS_F32, RTLIB::sincosf);
184-
setLibcallImpl(RTLIB::SINCOS_F64, RTLIB::sincos);
185-
setLibcallImpl(RTLIB::SINCOS_F80, RTLIB::sincos_f80);
186-
setLibcallImpl(RTLIB::SINCOS_F128, RTLIB::sincos_f128);
187-
setLibcallImpl(RTLIB::SINCOS_PPCF128, RTLIB::sincos_ppcf128);
188-
}
189-
190-
if (TT.isPS()) {
191-
setLibcallImpl(RTLIB::SINCOS_F32, RTLIB::sincosf);
192-
setLibcallImpl(RTLIB::SINCOS_F64, RTLIB::sincos);
193-
}
194-
195101
if (TT.isOSOpenBSD()) {
196102
setLibcallImpl(RTLIB::STACKPROTECTOR_CHECK_FAIL, RTLIB::Unsupported);
197103
}
198104

199-
if (TT.isOSWindows() && !TT.isOSCygMing()) {
200-
setLibcallImpl(RTLIB::LDEXP_F32, RTLIB::Unsupported);
201-
setLibcallImpl(RTLIB::LDEXP_F80, RTLIB::Unsupported);
202-
setLibcallImpl(RTLIB::LDEXP_F128, RTLIB::Unsupported);
203-
setLibcallImpl(RTLIB::LDEXP_PPCF128, RTLIB::Unsupported);
204-
205-
setLibcallImpl(RTLIB::FREXP_F32, RTLIB::Unsupported);
206-
setLibcallImpl(RTLIB::FREXP_F80, RTLIB::Unsupported);
207-
setLibcallImpl(RTLIB::FREXP_F128, RTLIB::Unsupported);
208-
setLibcallImpl(RTLIB::FREXP_PPCF128, RTLIB::Unsupported);
209-
}
105+
// Skip default manual processing for targets that have been fully ported to
106+
// tablegen for now. Eventually the rest of this should be deleted.
107+
if (TT.isX86() || TT.isAArch64() || TT.isWasm())
108+
return;
210109

211-
if (TT.isOSMSVCRT()) {
212-
// MSVCRT doesn't have powi; fall back to pow
213-
setLibcallImpl(RTLIB::POWI_F32, RTLIB::Unsupported);
214-
setLibcallImpl(RTLIB::POWI_F64, RTLIB::Unsupported);
110+
if (TT.isARM() || TT.isThumb()) {
111+
setARMLibcallNames(*this, TT, FloatABI, EABIVersion);
112+
return;
215113
}
216114

217-
// Setup Windows compiler runtime calls.
218-
if (TT.getArch() == Triple::x86 &&
219-
(TT.isWindowsMSVCEnvironment() || TT.isWindowsItaniumEnvironment())) {
220-
static const struct {
221-
const RTLIB::Libcall Op;
222-
const RTLIB::LibcallImpl Impl;
223-
const CallingConv::ID CC;
224-
} LibraryCalls[] = {
225-
{RTLIB::SDIV_I64, RTLIB::_alldiv, CallingConv::X86_StdCall},
226-
{RTLIB::UDIV_I64, RTLIB::_aulldiv, CallingConv::X86_StdCall},
227-
{RTLIB::SREM_I64, RTLIB::_allrem, CallingConv::X86_StdCall},
228-
{RTLIB::UREM_I64, RTLIB::_aullrem, CallingConv::X86_StdCall},
229-
{RTLIB::MUL_I64, RTLIB::_allmul, CallingConv::X86_StdCall},
230-
};
231-
232-
for (const auto &LC : LibraryCalls) {
233-
setLibcallImpl(LC.Op, LC.Impl);
234-
setLibcallImplCallingConv(LC.Impl, LC.CC);
235-
}
115+
if (hasSinCos(TT)) {
116+
setLibcallImpl(RTLIB::SINCOS_F32, RTLIB::sincosf);
117+
setLibcallImpl(RTLIB::SINCOS_F64, RTLIB::sincos);
118+
setLibcallImpl(RTLIB::SINCOS_F128, RTLIB::sincos_f128);
236119
}
237120

238-
if (TT.isARM() || TT.isThumb())
239-
setARMLibcallNames(*this, TT, FloatABI, EABIVersion);
240-
241121
// These libcalls are only available in compiler-rt, not libgcc.
242122
if (TT.isArch64Bit()) {
243123
setLibcallImpl(RTLIB::SHL_I128, RTLIB::__ashlti3);

0 commit comments

Comments
 (0)