Skip to content

Commit 04e87bd

Browse files
committed
fixup! [IR] Change fp128 lowering to use f128 functions by default
1 parent 895ee6e commit 04e87bd

File tree

4 files changed

+69
-92
lines changed

4 files changed

+69
-92
lines changed

llvm/include/llvm/IR/RuntimeLibcalls.def

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ HANDLE_LIBCALL(EXP2_FINITE_PPCF128, "__exp2l_finite")
185185
HANDLE_LIBCALL(EXP10_F32, "exp10f")
186186
HANDLE_LIBCALL(EXP10_F64, "exp10")
187187
HANDLE_LIBCALL(EXP10_F80, "exp10l")
188-
HANDLE_LIBCALL(EXP10_F128, "exp10l")
188+
HANDLE_LIBCALL(EXP10_F128, "exp10f128")
189189
HANDLE_LIBCALL(EXP10_PPCF128, "exp10l")
190190
HANDLE_LIBCALL(SIN_F32, "sinf")
191191
HANDLE_LIBCALL(SIN_F64, "sin")
@@ -200,42 +200,42 @@ HANDLE_LIBCALL(COS_PPCF128, "cosl")
200200
HANDLE_LIBCALL(TAN_F32, "tanf")
201201
HANDLE_LIBCALL(TAN_F64, "tan")
202202
HANDLE_LIBCALL(TAN_F80, "tanl")
203-
HANDLE_LIBCALL(TAN_F128,"tanl")
203+
HANDLE_LIBCALL(TAN_F128,"tanf128")
204204
HANDLE_LIBCALL(TAN_PPCF128, "tanl")
205205
HANDLE_LIBCALL(SINH_F32, "sinhf")
206206
HANDLE_LIBCALL(SINH_F64, "sinh")
207207
HANDLE_LIBCALL(SINH_F80, "sinhl")
208-
HANDLE_LIBCALL(SINH_F128, "sinhl")
208+
HANDLE_LIBCALL(SINH_F128, "sinhf128")
209209
HANDLE_LIBCALL(SINH_PPCF128, "sinhl")
210210
HANDLE_LIBCALL(COSH_F32, "coshf")
211211
HANDLE_LIBCALL(COSH_F64, "cosh")
212212
HANDLE_LIBCALL(COSH_F80, "coshl")
213-
HANDLE_LIBCALL(COSH_F128, "coshl")
213+
HANDLE_LIBCALL(COSH_F128, "coshf128")
214214
HANDLE_LIBCALL(COSH_PPCF128, "coshl")
215215
HANDLE_LIBCALL(TANH_F32, "tanhf")
216216
HANDLE_LIBCALL(TANH_F64, "tanh")
217217
HANDLE_LIBCALL(TANH_F80, "tanhl")
218-
HANDLE_LIBCALL(TANH_F128,"tanhl")
218+
HANDLE_LIBCALL(TANH_F128,"tanhf128")
219219
HANDLE_LIBCALL(TANH_PPCF128, "tanhl")
220220
HANDLE_LIBCALL(ASIN_F32, "asinf")
221221
HANDLE_LIBCALL(ASIN_F64, "asin")
222222
HANDLE_LIBCALL(ASIN_F80, "asinl")
223-
HANDLE_LIBCALL(ASIN_F128, "asinl")
223+
HANDLE_LIBCALL(ASIN_F128, "asinf128")
224224
HANDLE_LIBCALL(ASIN_PPCF128, "asinl")
225225
HANDLE_LIBCALL(ACOS_F32, "acosf")
226226
HANDLE_LIBCALL(ACOS_F64, "acos")
227227
HANDLE_LIBCALL(ACOS_F80, "acosl")
228-
HANDLE_LIBCALL(ACOS_F128, "acosl")
228+
HANDLE_LIBCALL(ACOS_F128, "acosf128")
229229
HANDLE_LIBCALL(ACOS_PPCF128, "acosl")
230230
HANDLE_LIBCALL(ATAN_F32, "atanf")
231231
HANDLE_LIBCALL(ATAN_F64, "atan")
232232
HANDLE_LIBCALL(ATAN_F80, "atanl")
233-
HANDLE_LIBCALL(ATAN_F128,"atanl")
233+
HANDLE_LIBCALL(ATAN_F128,"atanf128")
234234
HANDLE_LIBCALL(ATAN_PPCF128, "atanl")
235235
HANDLE_LIBCALL(ATAN2_F32, "atan2f")
236236
HANDLE_LIBCALL(ATAN2_F64, "atan2")
237237
HANDLE_LIBCALL(ATAN2_F80, "atan2l")
238-
HANDLE_LIBCALL(ATAN2_F128,"atan2l")
238+
HANDLE_LIBCALL(ATAN2_F128,"atan2f128")
239239
HANDLE_LIBCALL(ATAN2_PPCF128, "atan2l")
240240
HANDLE_LIBCALL(SINCOS_F32, nullptr)
241241
HANDLE_LIBCALL(SINCOS_F64, nullptr)
@@ -307,22 +307,22 @@ HANDLE_LIBCALL(FMAX_PPCF128, "fmaxl")
307307
HANDLE_LIBCALL(FMINIMUM_F32, "fminimumf")
308308
HANDLE_LIBCALL(FMINIMUM_F64, "fminimum")
309309
HANDLE_LIBCALL(FMINIMUM_F80, "fminimuml")
310-
HANDLE_LIBCALL(FMINIMUM_F128, "fminimuml")
310+
HANDLE_LIBCALL(FMINIMUM_F128, "fminimumf128")
311311
HANDLE_LIBCALL(FMINIMUM_PPCF128, "fminimuml")
312312
HANDLE_LIBCALL(FMAXIMUM_F32, "fmaximumf")
313313
HANDLE_LIBCALL(FMAXIMUM_F64, "fmaximum")
314314
HANDLE_LIBCALL(FMAXIMUM_F80, "fmaximuml")
315-
HANDLE_LIBCALL(FMAXIMUM_F128, "fmaximuml")
315+
HANDLE_LIBCALL(FMAXIMUM_F128, "fmaximumf128")
316316
HANDLE_LIBCALL(FMAXIMUM_PPCF128, "fmaximum_numl")
317317
HANDLE_LIBCALL(FMINIMUMNUM_F32, "fminimum_numf")
318318
HANDLE_LIBCALL(FMINIMUMNUM_F64, "fminimum_num")
319319
HANDLE_LIBCALL(FMINIMUMNUM_F80, "fminimum_numl")
320-
HANDLE_LIBCALL(FMINIMUMNUM_F128, "fminimum_numl")
320+
HANDLE_LIBCALL(FMINIMUMNUM_F128, "fminimum_numf128")
321321
HANDLE_LIBCALL(FMINIMUMNUM_PPCF128, "fminimum_numl")
322322
HANDLE_LIBCALL(FMAXIMUMNUM_F32, "fmaximum_numf")
323323
HANDLE_LIBCALL(FMAXIMUMNUM_F64, "fmaximum_num")
324324
HANDLE_LIBCALL(FMAXIMUMNUM_F80, "fmaximum_numl")
325-
HANDLE_LIBCALL(FMAXIMUMNUM_F128, "fmaximum_numl")
325+
HANDLE_LIBCALL(FMAXIMUMNUM_F128, "fmaximum_numf128")
326326
HANDLE_LIBCALL(FMAXIMUMNUM_PPCF128, "fmaximum_numl")
327327
HANDLE_LIBCALL(LROUND_F32, "lroundf")
328328
HANDLE_LIBCALL(LROUND_F64, "lround")
@@ -357,12 +357,12 @@ HANDLE_LIBCALL(FREXP_PPCF128, "frexpl")
357357
HANDLE_LIBCALL(SINCOSPI_F32, "sincospif")
358358
HANDLE_LIBCALL(SINCOSPI_F64, "sincospi")
359359
HANDLE_LIBCALL(SINCOSPI_F80, "sincospil")
360-
HANDLE_LIBCALL(SINCOSPI_F128, "sincospil")
360+
HANDLE_LIBCALL(SINCOSPI_F128, "sincospif128")
361361
HANDLE_LIBCALL(SINCOSPI_PPCF128, "sincospil")
362362
HANDLE_LIBCALL(MODF_F32, "modff")
363363
HANDLE_LIBCALL(MODF_F64, "modf")
364364
HANDLE_LIBCALL(MODF_F80, "modfl")
365-
HANDLE_LIBCALL(MODF_F128, "modfl")
365+
HANDLE_LIBCALL(MODF_F128, "modff128")
366366
HANDLE_LIBCALL(MODF_PPCF128, "modfl")
367367

368368
// Floating point environment

llvm/lib/IR/RuntimeLibcalls.cpp

Lines changed: 47 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -25,52 +25,53 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT) {
2525
for (int LC = 0; LC < RTLIB::UNKNOWN_LIBCALL; ++LC)
2626
setLibcallCallingConv((RTLIB::Libcall)LC, CallingConv::C);
2727

28-
// Use the f128 variants of math functions on x86_64
29-
if (TT.getArch() == Triple::ArchType::x86_64 && TT.isGNUEnvironment()) {
30-
setLibcallName(RTLIB::REM_F128, "fmodf128");
31-
setLibcallName(RTLIB::FMA_F128, "fmaf128");
32-
setLibcallName(RTLIB::SQRT_F128, "sqrtf128");
33-
setLibcallName(RTLIB::CBRT_F128, "cbrtf128");
34-
setLibcallName(RTLIB::LOG_F128, "logf128");
35-
setLibcallName(RTLIB::LOG_FINITE_F128, "__logf128_finite");
36-
setLibcallName(RTLIB::LOG2_F128, "log2f128");
37-
setLibcallName(RTLIB::LOG2_FINITE_F128, "__log2f128_finite");
38-
setLibcallName(RTLIB::LOG10_F128, "log10f128");
39-
setLibcallName(RTLIB::LOG10_FINITE_F128, "__log10f128_finite");
40-
setLibcallName(RTLIB::EXP_F128, "expf128");
41-
setLibcallName(RTLIB::EXP_FINITE_F128, "__expf128_finite");
42-
setLibcallName(RTLIB::EXP2_F128, "exp2f128");
43-
setLibcallName(RTLIB::EXP2_FINITE_F128, "__exp2f128_finite");
44-
setLibcallName(RTLIB::EXP10_F128, "exp10f128");
45-
setLibcallName(RTLIB::SIN_F128, "sinf128");
46-
setLibcallName(RTLIB::COS_F128, "cosf128");
47-
setLibcallName(RTLIB::TAN_F128, "tanf128");
48-
setLibcallName(RTLIB::SINCOS_F128, "sincosf128");
49-
setLibcallName(RTLIB::ASIN_F128, "asinf128");
50-
setLibcallName(RTLIB::ACOS_F128, "acosf128");
51-
setLibcallName(RTLIB::ATAN_F128, "atanf128");
52-
setLibcallName(RTLIB::ATAN2_F128, "atan2f128");
53-
setLibcallName(RTLIB::SINH_F128, "sinhf128");
54-
setLibcallName(RTLIB::COSH_F128, "coshf128");
55-
setLibcallName(RTLIB::TANH_F128, "tanhf128");
56-
setLibcallName(RTLIB::POW_F128, "powf128");
57-
setLibcallName(RTLIB::POW_FINITE_F128, "__powf128_finite");
58-
setLibcallName(RTLIB::CEIL_F128, "ceilf128");
59-
setLibcallName(RTLIB::TRUNC_F128, "truncf128");
60-
setLibcallName(RTLIB::RINT_F128, "rintf128");
61-
setLibcallName(RTLIB::NEARBYINT_F128, "nearbyintf128");
62-
setLibcallName(RTLIB::ROUND_F128, "roundf128");
63-
setLibcallName(RTLIB::ROUNDEVEN_F128, "roundevenf128");
64-
setLibcallName(RTLIB::FLOOR_F128, "floorf128");
65-
setLibcallName(RTLIB::COPYSIGN_F128, "copysignf128");
66-
setLibcallName(RTLIB::FMIN_F128, "fminf128");
67-
setLibcallName(RTLIB::FMAX_F128, "fmaxf128");
68-
setLibcallName(RTLIB::LROUND_F128, "lroundf128");
69-
setLibcallName(RTLIB::LLROUND_F128, "llroundf128");
70-
setLibcallName(RTLIB::LRINT_F128, "lrintf128");
71-
setLibcallName(RTLIB::LLRINT_F128, "llrintf128");
72-
setLibcallName(RTLIB::LDEXP_F128, "ldexpf128");
73-
setLibcallName(RTLIB::FREXP_F128, "frexpf128");
28+
// The long double version of library functions is more common than the
29+
// f128-specific version. Use these if that is the long double type on the
30+
// platform, or if the frontend specifies.
31+
if (TT.isLongDoubleF128("")) {
32+
setLibcallName(RTLIB::ACOS_F128, "acosl");
33+
setLibcallName(RTLIB::ASIN_F128, "asinl");
34+
setLibcallName(RTLIB::ATAN2_F128,"atan2l");
35+
setLibcallName(RTLIB::ATAN_F128,"atanl");
36+
setLibcallName(RTLIB::CBRT_F128, "cbrtl");
37+
setLibcallName(RTLIB::CEIL_F128, "ceill");
38+
setLibcallName(RTLIB::COPYSIGN_F128, "copysignl");
39+
setLibcallName(RTLIB::COSH_F128, "coshl");
40+
setLibcallName(RTLIB::COS_F128, "cosl");
41+
setLibcallName(RTLIB::EXP10_F128, "exp10l");
42+
setLibcallName(RTLIB::EXP2_F128, "exp2l");
43+
setLibcallName(RTLIB::EXP_F128, "expl");
44+
setLibcallName(RTLIB::FLOOR_F128, "floorl");
45+
setLibcallName(RTLIB::FMAXIMUMNUM_F128, "fmaximum_numl");
46+
setLibcallName(RTLIB::FMAXIMUM_F128, "fmaximuml");
47+
setLibcallName(RTLIB::FMAX_F128, "fmaxl");
48+
setLibcallName(RTLIB::FMA_F128, "fmal");
49+
setLibcallName(RTLIB::FMINIMUMNUM_F128, "fminimum_numl");
50+
setLibcallName(RTLIB::FMINIMUM_F128, "fminimuml");
51+
setLibcallName(RTLIB::FMIN_F128, "fminl");
52+
setLibcallName(RTLIB::FREXP_F128, "frexpl");
53+
setLibcallName(RTLIB::LDEXP_F128, "ldexpl");
54+
setLibcallName(RTLIB::LLRINT_F128, "llrintl");
55+
setLibcallName(RTLIB::LLROUND_F128, "llroundl");
56+
setLibcallName(RTLIB::LOG10_F128, "log10l");
57+
setLibcallName(RTLIB::LOG2_F128, "log2l");
58+
setLibcallName(RTLIB::LOG_F128, "logl");
59+
setLibcallName(RTLIB::LRINT_F128, "lrintl");
60+
setLibcallName(RTLIB::LROUND_F128, "lroundl");
61+
setLibcallName(RTLIB::MODF_F128, "modfl");
62+
setLibcallName(RTLIB::NEARBYINT_F128, "nearbyintl");
63+
setLibcallName(RTLIB::POW_F128, "powl");
64+
setLibcallName(RTLIB::REM_F128, "fmodl");
65+
setLibcallName(RTLIB::RINT_F128, "rintl");
66+
setLibcallName(RTLIB::ROUNDEVEN_F128, "roundevenl");
67+
setLibcallName(RTLIB::ROUND_F128, "roundl");
68+
setLibcallName(RTLIB::SINCOSPI_F128, "sincospil");
69+
setLibcallName(RTLIB::SINH_F128, "sinhl");
70+
setLibcallName(RTLIB::SIN_F128, "sinl");
71+
setLibcallName(RTLIB::SQRT_F128, "sqrtl");
72+
setLibcallName(RTLIB::TANH_F128,"tanhl");
73+
setLibcallName(RTLIB::TAN_F128,"tanl");
74+
setLibcallName(RTLIB::TRUNC_F128, "truncl");
7475
}
7576

7677
// For IEEE quad-precision libcall names, PPC uses "kf" instead of "tf".
@@ -177,7 +178,6 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT) {
177178
setLibcallName(RTLIB::SINCOS_F32, "sincosf");
178179
setLibcallName(RTLIB::SINCOS_F64, "sincos");
179180
setLibcallName(RTLIB::SINCOS_F80, "sincosl");
180-
setLibcallName(RTLIB::SINCOS_F128, "sincosl");
181181
setLibcallName(RTLIB::SINCOS_PPCF128, "sincosl");
182182
}
183183

llvm/lib/Target/PowerPC/PPCISelLowering.cpp

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1418,32 +1418,6 @@ PPCTargetLowering::PPCTargetLowering(const PPCTargetMachine &TM,
14181418
setTargetDAGCombine({ISD::TRUNCATE, ISD::SETCC, ISD::SELECT_CC});
14191419
}
14201420

1421-
setLibcallName(RTLIB::LOG_F128, "logf128");
1422-
setLibcallName(RTLIB::LOG2_F128, "log2f128");
1423-
setLibcallName(RTLIB::LOG10_F128, "log10f128");
1424-
setLibcallName(RTLIB::EXP_F128, "expf128");
1425-
setLibcallName(RTLIB::EXP2_F128, "exp2f128");
1426-
setLibcallName(RTLIB::SIN_F128, "sinf128");
1427-
setLibcallName(RTLIB::COS_F128, "cosf128");
1428-
setLibcallName(RTLIB::SINCOS_F128, "sincosf128");
1429-
setLibcallName(RTLIB::POW_F128, "powf128");
1430-
setLibcallName(RTLIB::FMIN_F128, "fminf128");
1431-
setLibcallName(RTLIB::FMAX_F128, "fmaxf128");
1432-
setLibcallName(RTLIB::REM_F128, "fmodf128");
1433-
setLibcallName(RTLIB::SQRT_F128, "sqrtf128");
1434-
setLibcallName(RTLIB::CEIL_F128, "ceilf128");
1435-
setLibcallName(RTLIB::FLOOR_F128, "floorf128");
1436-
setLibcallName(RTLIB::TRUNC_F128, "truncf128");
1437-
setLibcallName(RTLIB::ROUND_F128, "roundf128");
1438-
setLibcallName(RTLIB::LROUND_F128, "lroundf128");
1439-
setLibcallName(RTLIB::LLROUND_F128, "llroundf128");
1440-
setLibcallName(RTLIB::RINT_F128, "rintf128");
1441-
setLibcallName(RTLIB::LRINT_F128, "lrintf128");
1442-
setLibcallName(RTLIB::LLRINT_F128, "llrintf128");
1443-
setLibcallName(RTLIB::NEARBYINT_F128, "nearbyintf128");
1444-
setLibcallName(RTLIB::FMA_F128, "fmaf128");
1445-
setLibcallName(RTLIB::FREXP_F128, "frexpf128");
1446-
14471421
if (Subtarget.isAIXABI()) {
14481422
setLibcallName(RTLIB::MEMCPY, isPPC64 ? "___memmove64" : "___memmove");
14491423
setLibcallName(RTLIB::MEMMOVE, isPPC64 ? "___memmove64" : "___memmove");

llvm/test/CodeGen/Generic/f128-math-lowering.ll

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
; RUN: llc < %s -mtriple=aarch64-unknown-none -verify-machineinstrs | FileCheck %s --check-prefix=CHECK-USELD
2-
; RUN: llc < %s -mtriple=i686-unknown -verify-machineinstrs | FileCheck %s --check-prefix=CHECK-USELD
3-
; RUN: llc < %s -mtriple=riscv32 -verify-machineinstrs | FileCheck %s --check-prefix=CHECK-USELD
2+
; RUN: llc < %s -mtriple=i686-unknown -verify-machineinstrs | FileCheck %s --check-prefix=CHECK-NOTLD
3+
; RUN: llc < %s -mtriple=powerpc-unknown -verify-machineinstrs | FileCheck %s --check-prefix=CHECK-NOTLD
4+
; RUN: llc < %s -mtriple=powerpc64-unknown -verify-machineinstrs | FileCheck %s --check-prefix=CHECK-NOTLD
5+
; RUN: llc < %s -mtriple=riscv32 -verify-machineinstrs | FileCheck %s --check-prefix=CHECK-NOTLD
46
; RUN: llc < %s -mtriple=s390x-unknown -verify-machineinstrs | FileCheck %s --check-prefix=CHECK-S390X
5-
; RUN: llc < %s -mtriple=x86_64-unknown -verify-machineinstrs | FileCheck %s --check-prefix=CHECK-USELD
7+
; RUN: llc < %s -mtriple=x86_64-unknown -verify-machineinstrs | FileCheck %s --check-prefix=CHECK-NOTLD
68
; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -verify-machineinstrs | FileCheck %s --check-prefix=CHECK-NOTLD
7-
; RUN: llc < %s -mtriple=x86_64-unknown-linux-musl -verify-machineinstrs | FileCheck %s --check-prefix=CHECK-USELD
9+
; RUN: llc < %s -mtriple=x86_64-unknown-linux-musl -verify-machineinstrs | FileCheck %s --check-prefix=CHECK-NOTLD
810
;
911
; REQUIRES: aarch64-registered-target
12+
; REQUIRES: powerpc-registered-target
1013
; REQUIRES: riscv-registered-target
1114
; REQUIRES: systemz-registered-target
1215
; REQUIRES: x86-registered-target

0 commit comments

Comments
 (0)