[llvm] Hexagon: Move runtime libcall configuration to tablegen (PR #147482)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Sat Jul 12 18:42:12 PDT 2025
https://github.com/arsenm updated https://github.com/llvm/llvm-project/pull/147482
>From cd5f4380d65dffce43a742bc284a06dc472aa38b Mon Sep 17 00:00:00 2001
From: Matt Arsenault <Matthew.Arsenault at amd.com>
Date: Tue, 24 Jun 2025 16:45:41 +0900
Subject: [PATCH] Hexagon: Move runtime libcall configuration to tablegen
---
llvm/include/llvm/IR/RuntimeLibcalls.td | 11 ++++++++
llvm/lib/IR/RuntimeLibcalls.cpp | 35 -------------------------
2 files changed, 11 insertions(+), 35 deletions(-)
diff --git a/llvm/include/llvm/IR/RuntimeLibcalls.td b/llvm/include/llvm/IR/RuntimeLibcalls.td
index 57f5d9fd6d3a6..ec08bdcb5a6db 100644
--- a/llvm/include/llvm/IR/RuntimeLibcalls.td
+++ b/llvm/include/llvm/IR/RuntimeLibcalls.td
@@ -1472,6 +1472,7 @@ def AVRSystemLibrary
// Hexagon Runtime Libcalls
//===----------------------------------------------------------------------===//
+defset list<RuntimeLibcallImpl> HexagonLibcalls = {
def __hexagon_divsi3 : RuntimeLibcallImpl<SDIV_I32>;
def __hexagon_divdi3 : RuntimeLibcallImpl<SDIV_I64>;
def __hexagon_udivsi3 : RuntimeLibcallImpl<UDIV_I32>;
@@ -1504,6 +1505,16 @@ def __hexagon_fast2_sqrtdf2 : RuntimeLibcallImpl<FAST_SQRT_F64>;
def __hexagon_memcpy_likely_aligned_min32bytes_mult8bytes
: RuntimeLibcallImpl<HEXAGON_MEMCPY_LIKELY_ALIGNED_MIN32BYTES_MULT8BYTES>;
+}
+
+def isHexagon : RuntimeLibcallPredicate<"TT.getArch() == Triple::hexagon">;
+
+def HexagonSystemLibrary
+ : SystemRuntimeLibrary<isHexagon,
+ (add (sub DefaultLibcallImpls32,
+ __adddf3, __divsf3, __udivsi3, __udivdi3,
+ __umoddi3, __divdf3, __muldf3, __divsi3, __subdf3, sqrtf,
+ __divdi3, __umodsi3, __moddi3, __modsi3), HexagonLibcalls)>;
//===----------------------------------------------------------------------===//
// Lanai Runtime Libcalls
diff --git a/llvm/lib/IR/RuntimeLibcalls.cpp b/llvm/lib/IR/RuntimeLibcalls.cpp
index c4fd40f313077..45c4bd12658a6 100644
--- a/llvm/lib/IR/RuntimeLibcalls.cpp
+++ b/llvm/lib/IR/RuntimeLibcalls.cpp
@@ -254,41 +254,6 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT,
setLibcallImpl(RTLIB::MULO_I128, RTLIB::Unsupported);
}
- if (TT.getArch() == Triple::ArchType::hexagon) {
- setLibcallImpl(RTLIB::SDIV_I32, RTLIB::__hexagon_divsi3);
- setLibcallImpl(RTLIB::SDIV_I64, RTLIB::__hexagon_divdi3);
- setLibcallImpl(RTLIB::UDIV_I32, RTLIB::__hexagon_udivsi3);
- setLibcallImpl(RTLIB::UDIV_I64, RTLIB::__hexagon_udivdi3);
- setLibcallImpl(RTLIB::SREM_I32, RTLIB::__hexagon_modsi3);
- setLibcallImpl(RTLIB::SREM_I64, RTLIB::__hexagon_moddi3);
- setLibcallImpl(RTLIB::UREM_I32, RTLIB::__hexagon_umodsi3);
- setLibcallImpl(RTLIB::UREM_I64, RTLIB::__hexagon_umoddi3);
-
- // Prefix is: nothing for "slow-math",
- // "fast2_" for V5+ fast-math double-precision
- // (actually, keep fast-math and fast-math2 separate for now)
-
- setLibcallImpl(RTLIB::FAST_ADD_F64, RTLIB::__hexagon_fast_adddf3);
- setLibcallImpl(RTLIB::FAST_SUB_F64, RTLIB::__hexagon_fast_subdf3);
- setLibcallImpl(RTLIB::FAST_MUL_F64, RTLIB::__hexagon_fast_muldf3);
- setLibcallImpl(RTLIB::FAST_DIV_F64, RTLIB::__hexagon_fast_divdf3);
- setLibcallImpl(RTLIB::FAST_DIV_F32, RTLIB::__hexagon_fast_divsf3);
- setLibcallImpl(RTLIB::FAST_SQRT_F32, RTLIB::__hexagon_fast2_sqrtf);
- // This is the only fast library function for sqrtd.
- setLibcallImpl(RTLIB::FAST_SQRT_F64, RTLIB::__hexagon_fast2_sqrtdf2);
-
- setLibcallImpl(RTLIB::ADD_F64, RTLIB::__hexagon_adddf3);
- setLibcallImpl(RTLIB::SUB_F64, RTLIB::__hexagon_subdf3);
- setLibcallImpl(RTLIB::MUL_F64, RTLIB::__hexagon_muldf3);
- setLibcallImpl(RTLIB::DIV_F64, RTLIB::__hexagon_divdf3);
- setLibcallImpl(RTLIB::DIV_F32, RTLIB::__hexagon_divsf3);
- setLibcallImpl(RTLIB::SQRT_F32, RTLIB::__hexagon_sqrtf);
-
- setLibcallImpl(
- RTLIB::HEXAGON_MEMCPY_LIKELY_ALIGNED_MIN32BYTES_MULT8BYTES,
- RTLIB::__hexagon_memcpy_likely_aligned_min32bytes_mult8bytes);
- }
-
if (TT.getArch() == Triple::ArchType::msp430) {
setLibcallImplCallingConv(RTLIB::__mspabi_mpyll,
CallingConv::MSP430_BUILTIN);
More information about the llvm-commits
mailing list