From fea15845c16fca451a3e1c1e105b8d293841ae5a Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Tue, 5 Aug 2025 15:24:08 +0900 Subject: [PATCH 1/3] ARM: Remove idiv runtime call aliases Really only the i32 variants exist. We don't need synthetic aliases for illegal types which will be promoted. --- llvm/include/llvm/IR/RuntimeLibcalls.td | 8 ++------ llvm/lib/IR/RuntimeLibcalls.cpp | 6 ++---- llvm/lib/Target/ARM/ARMISelLowering.cpp | 8 ++------ 3 files changed, 6 insertions(+), 16 deletions(-) diff --git a/llvm/include/llvm/IR/RuntimeLibcalls.td b/llvm/include/llvm/IR/RuntimeLibcalls.td index 384b7f29b9073..8c53f12cf09ac 100644 --- a/llvm/include/llvm/IR/RuntimeLibcalls.td +++ b/llvm/include/llvm/IR/RuntimeLibcalls.td @@ -1399,13 +1399,9 @@ def __aeabi_lasr : RuntimeLibcallImpl; // CallingConv::ARM_AAPCS // Integer division functions // RTABI chapter 4.3.1 -def __aeabi_idiv__i8 : RuntimeLibcallImpl; // CallingConv::ARM_AAPCS -def __aeabi_idiv__i16 : RuntimeLibcallImpl; // CallingConv::ARM_AAPCS -def __aeabi_idiv__i32 : RuntimeLibcallImpl; // CallingConv::ARM_AAPCS +def __aeabi_idiv : RuntimeLibcallImpl; // CallingConv::ARM_AAPCS def __aeabi_ldivmod : RuntimeLibcallImpl; // CallingConv::ARM_AAPCS -def __aeabi_uidiv__i8 : RuntimeLibcallImpl; // CallingConv::ARM_AAPCS -def __aeabi_uidiv__i16 : RuntimeLibcallImpl; // CallingConv::ARM_AAPCS -def __aeabi_uidiv__i32 : RuntimeLibcallImpl; // CallingConv::ARM_AAPCS +def __aeabi_uidiv : RuntimeLibcallImpl; // CallingConv::ARM_AAPCS def __aeabi_uldivmod : RuntimeLibcallImpl; // CallingConv::ARM_AAPCS def __aeabi_idivmod : RuntimeLibcallImpl; // CallingConv::ARM_AAPCS diff --git a/llvm/lib/IR/RuntimeLibcalls.cpp b/llvm/lib/IR/RuntimeLibcalls.cpp index b6e2cac5f7b04..a8e6c7938cf54 100644 --- a/llvm/lib/IR/RuntimeLibcalls.cpp +++ b/llvm/lib/IR/RuntimeLibcalls.cpp @@ -47,11 +47,9 @@ static void setARMLibcallNames(RuntimeLibcallsInfo &Info, const Triple &TT, RTLIB::__aeabi_ui2f, RTLIB::__aeabi_l2f, RTLIB::__aeabi_ul2f, RTLIB::__aeabi_lmul, RTLIB::__aeabi_llsl, RTLIB::__aeabi_llsr, - RTLIB::__aeabi_lasr, RTLIB::__aeabi_idiv__i8, - RTLIB::__aeabi_idiv__i16, RTLIB::__aeabi_idiv__i32, + RTLIB::__aeabi_lasr, RTLIB::__aeabi_idiv, RTLIB::__aeabi_idivmod, RTLIB::__aeabi_uidivmod, - RTLIB::__aeabi_ldivmod, RTLIB::__aeabi_uidiv__i8, - RTLIB::__aeabi_uidiv__i16, RTLIB::__aeabi_uidiv__i32, + RTLIB::__aeabi_ldivmod, RTLIB::__aeabi_uidiv, RTLIB::__aeabi_uldivmod, RTLIB::__aeabi_f2h, RTLIB::__aeabi_d2h, RTLIB::__aeabi_h2f, RTLIB::__aeabi_memcpy, RTLIB::__aeabi_memmove, diff --git a/llvm/lib/Target/ARM/ARMISelLowering.cpp b/llvm/lib/Target/ARM/ARMISelLowering.cpp index 936625606e315..7f8b4460bb814 100644 --- a/llvm/lib/Target/ARM/ARMISelLowering.cpp +++ b/llvm/lib/Target/ARM/ARMISelLowering.cpp @@ -669,13 +669,9 @@ ARMTargetLowering::ARMTargetLowering(const TargetMachine &TM_, // Integer division functions // RTABI chapter 4.3.1 - { RTLIB::SDIV_I8, RTLIB::__aeabi_idiv__i8 }, - { RTLIB::SDIV_I16, RTLIB::__aeabi_idiv__i16 }, - { RTLIB::SDIV_I32, RTLIB::__aeabi_idiv__i32}, + { RTLIB::SDIV_I32, RTLIB::__aeabi_idiv }, { RTLIB::SDIV_I64, RTLIB::__aeabi_ldivmod }, - { RTLIB::UDIV_I8, RTLIB::__aeabi_uidiv__i8 }, - { RTLIB::UDIV_I16, RTLIB::__aeabi_uidiv__i16 }, - { RTLIB::UDIV_I32, RTLIB::__aeabi_uidiv__i32 }, + { RTLIB::UDIV_I32, RTLIB::__aeabi_uidiv }, { RTLIB::UDIV_I64, RTLIB::__aeabi_uldivmod }, }; // clang-format on From b65a52b9bf70bebf3520effafd3b9e600e79b3c9 Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Tue, 5 Aug 2025 17:09:12 +0900 Subject: [PATCH 2/3] Don't need to specify name anymore --- llvm/include/llvm/IR/RuntimeLibcalls.td | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/llvm/include/llvm/IR/RuntimeLibcalls.td b/llvm/include/llvm/IR/RuntimeLibcalls.td index 8c53f12cf09ac..4905c8a420dcc 100644 --- a/llvm/include/llvm/IR/RuntimeLibcalls.td +++ b/llvm/include/llvm/IR/RuntimeLibcalls.td @@ -1399,9 +1399,9 @@ def __aeabi_lasr : RuntimeLibcallImpl; // CallingConv::ARM_AAPCS // Integer division functions // RTABI chapter 4.3.1 -def __aeabi_idiv : RuntimeLibcallImpl; // CallingConv::ARM_AAPCS +def __aeabi_idiv : RuntimeLibcallImpl; // CallingConv::ARM_AAPCS def __aeabi_ldivmod : RuntimeLibcallImpl; // CallingConv::ARM_AAPCS -def __aeabi_uidiv : RuntimeLibcallImpl; // CallingConv::ARM_AAPCS +def __aeabi_uidiv : RuntimeLibcallImpl; // CallingConv::ARM_AAPCS def __aeabi_uldivmod : RuntimeLibcallImpl; // CallingConv::ARM_AAPCS def __aeabi_idivmod : RuntimeLibcallImpl; // CallingConv::ARM_AAPCS From e0db351714576923bd5f6ababe1e5a4f4a24a0b7 Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Tue, 5 Aug 2025 17:12:48 +0900 Subject: [PATCH 3/3] Add tests --- llvm/test/CodeGen/ARM/div.ll | 54 ++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/llvm/test/CodeGen/ARM/div.ll b/llvm/test/CodeGen/ARM/div.ll index 935aeaab8dc59..97cd9fd583ef8 100644 --- a/llvm/test/CodeGen/ARM/div.ll +++ b/llvm/test/CodeGen/ARM/div.ll @@ -145,3 +145,57 @@ define i64 @f8(i64 %a) { %tmp1 = udiv i64 %a, 3 ret i64 %tmp1 } + +define i8 @sdiv_i8(i8 %a, i8 %b) { +entry: +; CHECK-LABEL: sdiv_i8 +; CHECK-SWDIV: __divsi3 + +; CHECK-THUMB: .thumb_func +; CHECK-HWDIV: sdiv + +; CHECK-EABI: __aeabi_idiv + %tmp1 = sdiv i8 %a, %b ; [#uses=1] + ret i8 %tmp1 +} + + +define i16 @sdiv_i16(i16 %a, i16 %b) { +entry: +; CHECK-LABEL: sdiv_i16 +; CHECK-SWDIV: __divsi3 + +; CHECK-THUMB: .thumb_func +; CHECK-HWDIV: sdiv + +; CHECK-EABI: __aeabi_idiv + %tmp1 = sdiv i16 %a, %b ; [#uses=1] + ret i16 %tmp1 +} + +define i8 @udiv_i8(i8 %a, i8 %b) { +entry: +; CHECK-LABEL: udiv_i8 +; CHECK-SWDIV: __udivsi3 + +; CHECK-THUMB: .thumb_func +; CHECK-HWDIV: udiv + +; CHECK-EABI: __aeabi_uidiv + %tmp1 = udiv i8 %a, %b ; [#uses=1] + ret i8 %tmp1 +} + + +define i16 @udiv_i16(i16 %a, i16 %b) { +entry: +; CHECK-LABEL: udiv_i16 +; CHECK-SWDIV: __udivsi3 + +; CHECK-THUMB: .thumb_func +; CHECK-HWDIV: udiv + +; CHECK-EABI: __aeabi_uidiv + %tmp1 = udiv i16 %a, %b ; [#uses=1] + ret i16 %tmp1 +}