[llvm] b540162 - DAG: Add RTLIB::getPOW helper (#147274)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 7 05:31:53 PDT 2025
Author: Matt Arsenault
Date: 2025-07-07T21:31:49+09:00
New Revision: b5401624e1f19fc1f65499179403d0c7ed3ac6eb
URL: https://github.com/llvm/llvm-project/commit/b5401624e1f19fc1f65499179403d0c7ed3ac6eb
DIFF: https://github.com/llvm/llvm-project/commit/b5401624e1f19fc1f65499179403d0c7ed3ac6eb.diff
LOG: DAG: Add RTLIB::getPOW helper (#147274)
Co-authored-by: Paul Walker <paul.walker at arm.com>
Added:
Modified:
llvm/include/llvm/CodeGen/RuntimeLibcallUtil.h
llvm/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp
llvm/lib/CodeGen/TargetLoweringBase.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/CodeGen/RuntimeLibcallUtil.h b/llvm/include/llvm/CodeGen/RuntimeLibcallUtil.h
index 7481ed5b80b3f..451459eda25e9 100644
--- a/llvm/include/llvm/CodeGen/RuntimeLibcallUtil.h
+++ b/llvm/include/llvm/CodeGen/RuntimeLibcallUtil.h
@@ -56,6 +56,10 @@ LLVM_ABI Libcall getUINTTOFP(EVT OpVT, EVT RetVT);
/// UNKNOWN_LIBCALL if there is none.
LLVM_ABI Libcall getPOWI(EVT RetVT);
+/// getPOW - Return the POW_* value for the given types, or
+/// UNKNOWN_LIBCALL if there is none.
+LLVM_ABI Libcall getPOW(EVT RetVT);
+
/// getLDEXP - Return the LDEXP_* value for the given types, or
/// UNKNOWN_LIBCALL if there is none.
LLVM_ABI Libcall getLDEXP(EVT RetVT);
diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp
index 6a4f983077213..2a947f3297749 100644
--- a/llvm/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp
@@ -704,12 +704,7 @@ SDValue DAGTypeLegalizer::SoftenFloatRes_FP_ROUND(SDNode *N) {
}
SDValue DAGTypeLegalizer::SoftenFloatRes_FPOW(SDNode *N) {
- return SoftenFloatRes_Binary(N, GetFPLibCall(N->getValueType(0),
- RTLIB::POW_F32,
- RTLIB::POW_F64,
- RTLIB::POW_F80,
- RTLIB::POW_F128,
- RTLIB::POW_PPCF128));
+ return SoftenFloatRes_Binary(N, RTLIB::getPOW(N->getValueType(0)));
}
SDValue DAGTypeLegalizer::SoftenFloatRes_ExpOp(SDNode *N) {
@@ -723,6 +718,9 @@ SDValue DAGTypeLegalizer::SoftenFloatRes_ExpOp(SDNode *N) {
: RTLIB::getLDEXP(N->getValueType(0));
assert(LC != RTLIB::UNKNOWN_LIBCALL && "Unexpected fpowi.");
if (!TLI.getLibcallName(LC)) {
+ RTLIB::Libcall NewLC = RTLIB::getPOW(N->getValueType(0));
+ assert(NewLC != RTLIB::UNKNOWN_LIBCALL && "Unexpected fpow type");
+
// Some targets don't have a powi libcall; use pow instead.
// FIXME: Implement this if some target needs it.
DAG.getContext()->emitError("do not know how to soften fpowi to fpow");
diff --git a/llvm/lib/CodeGen/TargetLoweringBase.cpp b/llvm/lib/CodeGen/TargetLoweringBase.cpp
index 65bbec8461a12..4f722005f4056 100644
--- a/llvm/lib/CodeGen/TargetLoweringBase.cpp
+++ b/llvm/lib/CodeGen/TargetLoweringBase.cpp
@@ -396,6 +396,10 @@ RTLIB::Libcall RTLIB::getPOWI(EVT RetVT) {
POWI_PPCF128);
}
+RTLIB::Libcall RTLIB::getPOW(EVT RetVT) {
+ return getFPLibCall(RetVT, POW_F32, POW_F64, POW_F80, POW_F128, POW_PPCF128);
+}
+
RTLIB::Libcall RTLIB::getLDEXP(EVT RetVT) {
return getFPLibCall(RetVT, LDEXP_F32, LDEXP_F64, LDEXP_F80, LDEXP_F128,
LDEXP_PPCF128);
More information about the llvm-commits
mailing list