Skip to content

Commit 1392edc

Browse files
authored
ARM: Remove idiv runtime call aliases (#152098)
Really only the i32 variants exist. We don't need synthetic aliases for illegal types which will be promoted.
1 parent c1b387e commit 1392edc

File tree

4 files changed

+60
-16
lines changed

4 files changed

+60
-16
lines changed

llvm/include/llvm/IR/RuntimeLibcalls.td

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1399,13 +1399,9 @@ def __aeabi_lasr : RuntimeLibcallImpl<SRA_I64>; // CallingConv::ARM_AAPCS
13991399

14001400
// Integer division functions
14011401
// RTABI chapter 4.3.1
1402-
def __aeabi_idiv__i8 : RuntimeLibcallImpl<SDIV_I8, "__aeabi_idiv">; // CallingConv::ARM_AAPCS
1403-
def __aeabi_idiv__i16 : RuntimeLibcallImpl<SDIV_I16, "__aeabi_idiv">; // CallingConv::ARM_AAPCS
1404-
def __aeabi_idiv__i32 : RuntimeLibcallImpl<SDIV_I32, "__aeabi_idiv">; // CallingConv::ARM_AAPCS
1402+
def __aeabi_idiv : RuntimeLibcallImpl<SDIV_I32>; // CallingConv::ARM_AAPCS
14051403
def __aeabi_ldivmod : RuntimeLibcallImpl<SDIVREM_I64>; // CallingConv::ARM_AAPCS
1406-
def __aeabi_uidiv__i8 : RuntimeLibcallImpl<UDIV_I8, "__aeabi_uidiv">; // CallingConv::ARM_AAPCS
1407-
def __aeabi_uidiv__i16 : RuntimeLibcallImpl<UDIV_I16, "__aeabi_uidiv">; // CallingConv::ARM_AAPCS
1408-
def __aeabi_uidiv__i32 : RuntimeLibcallImpl<UDIV_I32, "__aeabi_uidiv">; // CallingConv::ARM_AAPCS
1404+
def __aeabi_uidiv : RuntimeLibcallImpl<UDIV_I32>; // CallingConv::ARM_AAPCS
14091405
def __aeabi_uldivmod : RuntimeLibcallImpl<UDIVREM_I64>; // CallingConv::ARM_AAPCS
14101406

14111407
def __aeabi_idivmod : RuntimeLibcallImpl<SDIVREM_I32>; // CallingConv::ARM_AAPCS

llvm/lib/IR/RuntimeLibcalls.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,9 @@ static void setARMLibcallNames(RuntimeLibcallsInfo &Info, const Triple &TT,
4747
RTLIB::__aeabi_ui2f, RTLIB::__aeabi_l2f,
4848
RTLIB::__aeabi_ul2f, RTLIB::__aeabi_lmul,
4949
RTLIB::__aeabi_llsl, RTLIB::__aeabi_llsr,
50-
RTLIB::__aeabi_lasr, RTLIB::__aeabi_idiv__i8,
51-
RTLIB::__aeabi_idiv__i16, RTLIB::__aeabi_idiv__i32,
50+
RTLIB::__aeabi_lasr, RTLIB::__aeabi_idiv,
5251
RTLIB::__aeabi_idivmod, RTLIB::__aeabi_uidivmod,
53-
RTLIB::__aeabi_ldivmod, RTLIB::__aeabi_uidiv__i8,
54-
RTLIB::__aeabi_uidiv__i16, RTLIB::__aeabi_uidiv__i32,
52+
RTLIB::__aeabi_ldivmod, RTLIB::__aeabi_uidiv,
5553
RTLIB::__aeabi_uldivmod, RTLIB::__aeabi_f2h,
5654
RTLIB::__aeabi_d2h, RTLIB::__aeabi_h2f,
5755
RTLIB::__aeabi_memcpy, RTLIB::__aeabi_memmove,

llvm/lib/Target/ARM/ARMISelLowering.cpp

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -669,13 +669,9 @@ ARMTargetLowering::ARMTargetLowering(const TargetMachine &TM_,
669669

670670
// Integer division functions
671671
// RTABI chapter 4.3.1
672-
{ RTLIB::SDIV_I8, RTLIB::__aeabi_idiv__i8 },
673-
{ RTLIB::SDIV_I16, RTLIB::__aeabi_idiv__i16 },
674-
{ RTLIB::SDIV_I32, RTLIB::__aeabi_idiv__i32},
672+
{ RTLIB::SDIV_I32, RTLIB::__aeabi_idiv },
675673
{ RTLIB::SDIV_I64, RTLIB::__aeabi_ldivmod },
676-
{ RTLIB::UDIV_I8, RTLIB::__aeabi_uidiv__i8 },
677-
{ RTLIB::UDIV_I16, RTLIB::__aeabi_uidiv__i16 },
678-
{ RTLIB::UDIV_I32, RTLIB::__aeabi_uidiv__i32 },
674+
{ RTLIB::UDIV_I32, RTLIB::__aeabi_uidiv },
679675
{ RTLIB::UDIV_I64, RTLIB::__aeabi_uldivmod },
680676
};
681677
// clang-format on

llvm/test/CodeGen/ARM/div.ll

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,3 +145,57 @@ define i64 @f8(i64 %a) {
145145
%tmp1 = udiv i64 %a, 3
146146
ret i64 %tmp1
147147
}
148+
149+
define i8 @sdiv_i8(i8 %a, i8 %b) {
150+
entry:
151+
; CHECK-LABEL: sdiv_i8
152+
; CHECK-SWDIV: __divsi3
153+
154+
; CHECK-THUMB: .thumb_func
155+
; CHECK-HWDIV: sdiv
156+
157+
; CHECK-EABI: __aeabi_idiv
158+
%tmp1 = sdiv i8 %a, %b ; <i8> [#uses=1]
159+
ret i8 %tmp1
160+
}
161+
162+
163+
define i16 @sdiv_i16(i16 %a, i16 %b) {
164+
entry:
165+
; CHECK-LABEL: sdiv_i16
166+
; CHECK-SWDIV: __divsi3
167+
168+
; CHECK-THUMB: .thumb_func
169+
; CHECK-HWDIV: sdiv
170+
171+
; CHECK-EABI: __aeabi_idiv
172+
%tmp1 = sdiv i16 %a, %b ; <i16> [#uses=1]
173+
ret i16 %tmp1
174+
}
175+
176+
define i8 @udiv_i8(i8 %a, i8 %b) {
177+
entry:
178+
; CHECK-LABEL: udiv_i8
179+
; CHECK-SWDIV: __udivsi3
180+
181+
; CHECK-THUMB: .thumb_func
182+
; CHECK-HWDIV: udiv
183+
184+
; CHECK-EABI: __aeabi_uidiv
185+
%tmp1 = udiv i8 %a, %b ; <i8> [#uses=1]
186+
ret i8 %tmp1
187+
}
188+
189+
190+
define i16 @udiv_i16(i16 %a, i16 %b) {
191+
entry:
192+
; CHECK-LABEL: udiv_i16
193+
; CHECK-SWDIV: __udivsi3
194+
195+
; CHECK-THUMB: .thumb_func
196+
; CHECK-HWDIV: udiv
197+
198+
; CHECK-EABI: __aeabi_uidiv
199+
%tmp1 = udiv i16 %a, %b ; <i16> [#uses=1]
200+
ret i16 %tmp1
201+
}

0 commit comments

Comments
 (0)