xref: /llvm-project/llvm/test/CodeGen/ARM/thumb1-div.ll (revision 7c91336efeff9419471ad27d63e5cbb26f034b9b)
1*7c91336eSMatthias Braun; RUN: llc < %s -mtriple=thumb-none-eabi -mcpu=cortex-m23 | \
247eb9723SSanne Wouda; RUN:     FileCheck %s -check-prefix=CHECK
347eb9723SSanne Wouda
447eb9723SSanne Woudadefine i32 @f1(i32 %a, i32 %b) {
547eb9723SSanne Woudaentry:
647eb9723SSanne Wouda; CHECK-LABEL: f1
747eb9723SSanne Wouda
847eb9723SSanne Wouda; CHECK: sdiv
947eb9723SSanne Wouda        %tmp1 = sdiv i32 %a, %b         ; <i32> [#uses=1]
1047eb9723SSanne Wouda        ret i32 %tmp1
1147eb9723SSanne Wouda}
1247eb9723SSanne Wouda
1347eb9723SSanne Woudadefine i32 @f2(i32 %a, i32 %b) {
1447eb9723SSanne Woudaentry:
1547eb9723SSanne Wouda; CHECK-LABEL: f2
1647eb9723SSanne Wouda; CHECK: udiv
1747eb9723SSanne Wouda        %tmp1 = udiv i32 %a, %b         ; <i32> [#uses=1]
1847eb9723SSanne Wouda        ret i32 %tmp1
1947eb9723SSanne Wouda}
2047eb9723SSanne Wouda
2147eb9723SSanne Woudadefine i32 @f3(i32 %a, i32 %b) {
2247eb9723SSanne Woudaentry:
2347eb9723SSanne Wouda; CHECK-LABEL: f3
2447eb9723SSanne Wouda
2547eb9723SSanne Wouda
2647eb9723SSanne Wouda        %tmp1 = srem i32 %a, %b         ; <i32> [#uses=1]
2747eb9723SSanne Wouda        ret i32 %tmp1
2847eb9723SSanne Wouda; CHECK: sdiv
2947eb9723SSanne Wouda; CHECK-NEXT: muls
3047eb9723SSanne Wouda; CHECK-NEXT: subs
3147eb9723SSanne Wouda}
3247eb9723SSanne Wouda
3347eb9723SSanne Woudadefine i32 @f4(i32 %a, i32 %b) {
3447eb9723SSanne Woudaentry:
3547eb9723SSanne Wouda; CHECK-LABEL: f4
3647eb9723SSanne Wouda
3747eb9723SSanne Wouda; CHECK: udiv
3847eb9723SSanne Wouda; CHECK-NEXT: muls
3947eb9723SSanne Wouda; CHECK-NEXT: subs
4047eb9723SSanne Wouda        %tmp1 = urem i32 %a, %b         ; <i32> [#uses=1]
4147eb9723SSanne Wouda        ret i32 %tmp1
4247eb9723SSanne Wouda}
4347eb9723SSanne Wouda
4447eb9723SSanne Wouda
4547eb9723SSanne Woudadefine i64 @f5(i64 %a, i64 %b) {
4647eb9723SSanne Woudaentry:
4747eb9723SSanne Wouda; CHECK-LABEL: f5
4847eb9723SSanne Wouda
4947eb9723SSanne Wouda; EABI MODE = Remainder in R2-R3, quotient in R0-R1
5047eb9723SSanne Wouda; CHECK: __aeabi_ldivmod
5147eb9723SSanne Wouda; CHECK-NEXT: mov r0, r2
5247eb9723SSanne Wouda; CHECK-NEXT: mov r1, r3
5347eb9723SSanne Wouda        %tmp1 = srem i64 %a, %b         ; <i64> [#uses=1]
5447eb9723SSanne Wouda        ret i64 %tmp1
5547eb9723SSanne Wouda}
5647eb9723SSanne Wouda
5747eb9723SSanne Woudadefine i64 @f6(i64 %a, i64 %b) {
5847eb9723SSanne Woudaentry:
5947eb9723SSanne Wouda; CHECK-LABEL: f6
6047eb9723SSanne Wouda
6147eb9723SSanne Wouda; EABI MODE = Remainder in R2-R3, quotient in R0-R1
6247eb9723SSanne Wouda; CHECK: __aeabi_uldivmod
6347eb9723SSanne Wouda; CHECK: mov r0, r2
6447eb9723SSanne Wouda; CHECK: mov r1, r3
6547eb9723SSanne Wouda        %tmp1 = urem i64 %a, %b         ; <i64> [#uses=1]
6647eb9723SSanne Wouda        ret i64 %tmp1
6747eb9723SSanne Wouda}
68