From 48350d516e792fc364ca30fd3bce7ad8edcda784 Mon Sep 17 00:00:00 2001 From: Matt Arsenault 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 3ef1803018756..9deeb7b326510 100644 --- a/llvm/include/llvm/IR/RuntimeLibcalls.td +++ b/llvm/include/llvm/IR/RuntimeLibcalls.td @@ -1413,6 +1413,7 @@ def AVRSystemLibrary // Hexagon Runtime Libcalls //===----------------------------------------------------------------------===// +defset list HexagonLibcalls = { def __hexagon_divsi3 : RuntimeLibcallImpl; def __hexagon_divdi3 : RuntimeLibcallImpl; def __hexagon_udivsi3 : RuntimeLibcallImpl; @@ -1445,6 +1446,16 @@ def __hexagon_fast2_sqrtdf2 : RuntimeLibcallImpl; def __hexagon_memcpy_likely_aligned_min32bytes_mult8bytes : RuntimeLibcallImpl; +} + +def isHexagon : RuntimeLibcallPredicate<"TT.getArch() == Triple::hexagon">; + +def HexagonSystemLibrary + : SystemRuntimeLibrary; //===----------------------------------------------------------------------===// // 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);