xref: /llvm-project/llvm/test/CodeGen/ARM/GlobalISel/arm-isel-divmod.ll (revision 21a42bcc0be2e99fd17c3751e2488e1df9f3e636)
1*21a42bccSDiana Picus; RUN: llc -mtriple arm-gnueabi -mattr=+v6t2,+hwdiv-arm -global-isel %s -o - | FileCheck %s -check-prefixes=CHECK,HWDIV
2*21a42bccSDiana Picus; RUN: llc -mtriple arm-gnueabi -mattr=+v6t2,-hwdiv-arm -global-isel %s -o - | FileCheck %s -check-prefixes=CHECK,SOFT-AEABI
3*21a42bccSDiana Picus; RUN: llc -mtriple arm-gnu -mattr=+v6t2,+hwdiv-arm -global-isel %s -o - | FileCheck %s -check-prefixes=CHECK,HWDIV
4*21a42bccSDiana Picus; RUN: llc -mtriple arm-gnu -mattr=+v6t2,-hwdiv-arm -global-isel %s -o - | FileCheck %s -check-prefixes=CHECK,SOFT-DEFAULT
5b70e88bdSDiana Picus
6b70e88bdSDiana Picusdefine arm_aapcscc i32 @test_sdiv_i32(i32 %a, i32 %b) {
7b70e88bdSDiana Picus; CHECK-LABEL: test_sdiv_i32:
857285d7aSDiana Picus; HWDIV: sdiv
9b3502212SDiana Picus; SOFT-AEABI: bl __aeabi_idiv
10b3502212SDiana Picus; SOFT-DEFAULT: bl __divsi3
11b70e88bdSDiana Picus  %r = sdiv i32 %a, %b
12b70e88bdSDiana Picus  ret i32 %r
13b70e88bdSDiana Picus}
14b70e88bdSDiana Picus
15b70e88bdSDiana Picusdefine arm_aapcscc i32 @test_udiv_i32(i32 %a, i32 %b) {
16b70e88bdSDiana Picus; CHECK-LABEL: test_udiv_i32:
1757285d7aSDiana Picus; HWDIV: udiv
18b3502212SDiana Picus; SOFT-AEABI: bl __aeabi_uidiv
19b3502212SDiana Picus; SOFT-DEFAULT: bl __udivsi3
20b70e88bdSDiana Picus  %r = udiv i32 %a, %b
21b70e88bdSDiana Picus  ret i32 %r
22b70e88bdSDiana Picus}
23b70e88bdSDiana Picus
24f53865daSDiana Picusdefine arm_aapcscc i16 @test_sdiv_i16(i16 %a, i16 %b) {
25f53865daSDiana Picus; CHECK-LABEL: test_sdiv_i16:
2657285d7aSDiana Picus; HWDIV: sdiv
27b3502212SDiana Picus; SOFT-AEABI: bl __aeabi_idiv
28b3502212SDiana Picus; SOFT-DEFAULT: bl __divsi3
29f53865daSDiana Picus  %r = sdiv i16 %a, %b
30f53865daSDiana Picus  ret i16 %r
31f53865daSDiana Picus}
32f53865daSDiana Picus
33f53865daSDiana Picusdefine arm_aapcscc i16 @test_udiv_i16(i16 %a, i16 %b) {
34f53865daSDiana Picus; CHECK-LABEL: test_udiv_i16:
3557285d7aSDiana Picus; HWDIV: udiv
36b3502212SDiana Picus; SOFT-AEABI: bl __aeabi_uidiv
37b3502212SDiana Picus; SOFT-DEFAULT: bl __udivsi3
38f53865daSDiana Picus  %r = udiv i16 %a, %b
39f53865daSDiana Picus  ret i16 %r
40f53865daSDiana Picus}
41f53865daSDiana Picus
42f53865daSDiana Picusdefine arm_aapcscc i8 @test_sdiv_i8(i8 %a, i8 %b) {
43f53865daSDiana Picus; CHECK-LABEL: test_sdiv_i8:
4457285d7aSDiana Picus; HWDIV: sdiv
45b3502212SDiana Picus; SOFT-AEABI: bl __aeabi_idiv
46b3502212SDiana Picus; SOFT-DEFAULT: bl __divsi3
47f53865daSDiana Picus  %r = sdiv i8 %a, %b
48f53865daSDiana Picus  ret i8 %r
49f53865daSDiana Picus}
50f53865daSDiana Picus
51f53865daSDiana Picusdefine arm_aapcscc i8 @test_udiv_i8(i8 %a, i8 %b) {
52f53865daSDiana Picus; CHECK-LABEL: test_udiv_i8:
5357285d7aSDiana Picus; HWDIV: udiv
54b3502212SDiana Picus; SOFT-AEABI: bl __aeabi_uidiv
55b3502212SDiana Picus; SOFT-DEFAULT: bl __udivsi3
56f53865daSDiana Picus  %r = udiv i8 %a, %b
57f53865daSDiana Picus  ret i8 %r
58f53865daSDiana Picus}
59f53865daSDiana Picus
6002e11010SDiana Picusdefine arm_aapcscc i32 @test_srem_i32(i32 %x, i32 %y) {
6102e11010SDiana Picus; CHECK-LABEL: test_srem_i32:
6257285d7aSDiana Picus; HWDIV: sdiv
63b3502212SDiana Picus; SOFT-AEABI: bl __aeabi_idivmod
64b3502212SDiana Picus; SOFT-DEFAULT: bl __modsi3
6502e11010SDiana Picus  %r = srem i32 %x, %y
6602e11010SDiana Picus  ret i32 %r
6702e11010SDiana Picus}
6802e11010SDiana Picus
6902e11010SDiana Picusdefine arm_aapcscc i32 @test_urem_i32(i32 %x, i32 %y) {
7002e11010SDiana Picus; CHECK-LABEL: test_urem_i32:
7157285d7aSDiana Picus; HWDIV: udiv
72b3502212SDiana Picus; SOFT-AEABI: bl __aeabi_uidivmod
73b3502212SDiana Picus; SOFT-DEFAULT: bl __umodsi3
7402e11010SDiana Picus  %r = urem i32 %x, %y
7502e11010SDiana Picus  ret i32 %r
7602e11010SDiana Picus}
77da25d5b8SDiana Picus
78da25d5b8SDiana Picusdefine arm_aapcscc i16 @test_srem_i16(i16 %x, i16 %y) {
79da25d5b8SDiana Picus; CHECK-LABEL: test_srem_i16:
8057285d7aSDiana Picus; HWDIV: sdiv
81b3502212SDiana Picus; SOFT-AEABI: bl __aeabi_idivmod
82b3502212SDiana Picus; SOFT-DEFAULT: bl __modsi3
83da25d5b8SDiana Picus  %r = srem i16 %x, %y
84da25d5b8SDiana Picus  ret i16 %r
85da25d5b8SDiana Picus}
86da25d5b8SDiana Picus
87da25d5b8SDiana Picusdefine arm_aapcscc i16 @test_urem_i16(i16 %x, i16 %y) {
88da25d5b8SDiana Picus; CHECK-LABEL: test_urem_i16:
8957285d7aSDiana Picus; HWDIV: udiv
90b3502212SDiana Picus; SOFT-AEABI: bl __aeabi_uidivmod
91b3502212SDiana Picus; SOFT-DEFAULT: bl __umodsi3
92da25d5b8SDiana Picus  %r = urem i16 %x, %y
93da25d5b8SDiana Picus  ret i16 %r
94da25d5b8SDiana Picus}
95da25d5b8SDiana Picus
96da25d5b8SDiana Picusdefine arm_aapcscc i8 @test_srem_i8(i8 %x, i8 %y) {
97da25d5b8SDiana Picus; CHECK-LABEL: test_srem_i8:
9857285d7aSDiana Picus; HWDIV: sdiv
99b3502212SDiana Picus; SOFT-AEABI: bl __aeabi_idivmod
100b3502212SDiana Picus; SOFT-DEFAULT: bl __modsi3
101da25d5b8SDiana Picus  %r = srem i8 %x, %y
102da25d5b8SDiana Picus  ret i8 %r
103da25d5b8SDiana Picus}
104da25d5b8SDiana Picus
105da25d5b8SDiana Picusdefine arm_aapcscc i8 @test_urem_i8(i8 %x, i8 %y) {
106da25d5b8SDiana Picus; CHECK-LABEL: test_urem_i8:
10757285d7aSDiana Picus; HWDIV: udiv
108b3502212SDiana Picus; SOFT-AEABI: bl __aeabi_uidivmod
109b3502212SDiana Picus; SOFT-DEFAULT: bl __umodsi3
110da25d5b8SDiana Picus  %r = urem i8 %x, %y
111da25d5b8SDiana Picus  ret i8 %r
112da25d5b8SDiana Picus}
113