Skip to content

Commit e277a8e

Browse files
[SelectionDAG] Only lower COPYSIGN_PPC_F128 to copysignl
This reduces the burden on frontends that wish to support float ops without needing a C compiler to build LLVM's compiler-rt for that target, e.g. so that they can be a fully self-contained toolchain for bare-metal. All other floats are expanded for all current architectures just fine. PowerPC, however, does not efficiently legalize its very own float.
1 parent 5aaacd7 commit e277a8e

File tree

5 files changed

+6
-17
lines changed

5 files changed

+6
-17
lines changed

llvm/include/llvm/IR/RuntimeLibcalls.def

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -289,10 +289,6 @@ HANDLE_LIBCALL(FLOOR_F64, "floor")
289289
HANDLE_LIBCALL(FLOOR_F80, "floorl")
290290
HANDLE_LIBCALL(FLOOR_F128, "floorl")
291291
HANDLE_LIBCALL(FLOOR_PPCF128, "floorl")
292-
HANDLE_LIBCALL(COPYSIGN_F32, "copysignf")
293-
HANDLE_LIBCALL(COPYSIGN_F64, "copysign")
294-
HANDLE_LIBCALL(COPYSIGN_F80, "copysignl")
295-
HANDLE_LIBCALL(COPYSIGN_F128, "copysignl")
296292
HANDLE_LIBCALL(COPYSIGN_PPCF128, "copysignl")
297293
HANDLE_LIBCALL(FMIN_F32, "fminf")
298294
HANDLE_LIBCALL(FMIN_F64, "fmin")

llvm/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1709,12 +1709,12 @@ void DAGTypeLegalizer::ExpandFloatRes_FCEIL(SDNode *N,
17091709

17101710
void DAGTypeLegalizer::ExpandFloatRes_FCOPYSIGN(SDNode *N,
17111711
SDValue &Lo, SDValue &Hi) {
1712-
ExpandFloatRes_Binary(N, GetFPLibCall(N->getValueType(0),
1713-
RTLIB::COPYSIGN_F32,
1714-
RTLIB::COPYSIGN_F64,
1715-
RTLIB::COPYSIGN_F80,
1716-
RTLIB::COPYSIGN_F128,
1717-
RTLIB::COPYSIGN_PPCF128), Lo, Hi);
1712+
1713+
EVT VT = N->getValueType(0);
1714+
ExpandFloatRes_Binary(
1715+
N,
1716+
(VT == MVT::ppcf128 ? RTLIB::COPYSIGN_PPCF128 : RTLIB::UNKNOWN_LIBCALL),
1717+
Lo, Hi);
17181718
}
17191719

17201720
void DAGTypeLegalizer::ExpandFloatRes_FCOS(SDNode *N,

llvm/lib/IR/RuntimeLibcalls.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT) {
6262
setLibcallName(RTLIB::ROUND_F128, "roundf128");
6363
setLibcallName(RTLIB::ROUNDEVEN_F128, "roundevenf128");
6464
setLibcallName(RTLIB::FLOOR_F128, "floorf128");
65-
setLibcallName(RTLIB::COPYSIGN_F128, "copysignf128");
6665
setLibcallName(RTLIB::FMIN_F128, "fminf128");
6766
setLibcallName(RTLIB::FMAX_F128, "fmaxf128");
6867
setLibcallName(RTLIB::LROUND_F128, "lroundf128");

llvm/lib/Target/SystemZ/ZOSLibcallNames.def

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,6 @@ HANDLE_LIBCALL(EXP2_F128, "@@LXP2@B")
8787
HANDLE_LIBCALL(COS_F64, "@@SCOS@B")
8888
HANDLE_LIBCALL(COS_F32, "@@FCOS@B")
8989
HANDLE_LIBCALL(COS_F128, "@@LCOS@B")
90-
HANDLE_LIBCALL(COPYSIGN_F64, "@@DCPY@B")
91-
HANDLE_LIBCALL(COPYSIGN_F32, "@@FCPY@B")
92-
HANDLE_LIBCALL(COPYSIGN_F128, "@@LCPY@B")
9390
HANDLE_LIBCALL(CEIL_F64, "@@SCEL@B")
9491
HANDLE_LIBCALL(CEIL_F32, "@@FCEL@B")
9592
HANDLE_LIBCALL(CEIL_F128, "@@LCEL@B")

llvm/lib/Target/WebAssembly/WebAssemblyRuntimeLibcallSignatures.cpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -264,9 +264,6 @@ struct RuntimeLibcallSignatureTable {
264264
Table[RTLIB::FLOOR_F32] = f32_func_f32;
265265
Table[RTLIB::FLOOR_F64] = f64_func_f64;
266266
Table[RTLIB::FLOOR_F128] = i64_i64_func_i64_i64;
267-
Table[RTLIB::COPYSIGN_F32] = f32_func_f32_f32;
268-
Table[RTLIB::COPYSIGN_F64] = f64_func_f64_f64;
269-
Table[RTLIB::COPYSIGN_F128] = i64_i64_func_i64_i64_i64_i64;
270267
Table[RTLIB::FMIN_F32] = f32_func_f32_f32;
271268
Table[RTLIB::FMIN_F64] = f64_func_f64_f64;
272269
Table[RTLIB::FMIN_F128] = i64_i64_func_i64_i64_i64_i64;

0 commit comments

Comments
 (0)