xref: /aosp_15_r20/external/llvm/test/CodeGen/NVPTX/bypass-div.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=nvptx -mcpu=sm_35 | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker; 64-bit divides and rems should be split into a fast and slow path where
4*9880d681SAndroid Build Coastguard Worker; the fast path uses a 32-bit operation.
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Workerdefine void @sdiv64(i64 %a, i64 %b, i64* %retptr) {
7*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sdiv64(
8*9880d681SAndroid Build Coastguard Worker; CHECK:        div.s64
9*9880d681SAndroid Build Coastguard Worker; CHECK:        div.u32
10*9880d681SAndroid Build Coastguard Worker; CHECK:        ret
11*9880d681SAndroid Build Coastguard Worker  %d = sdiv i64 %a, %b
12*9880d681SAndroid Build Coastguard Worker  store i64 %d, i64* %retptr
13*9880d681SAndroid Build Coastguard Worker  ret void
14*9880d681SAndroid Build Coastguard Worker}
15*9880d681SAndroid Build Coastguard Worker
16*9880d681SAndroid Build Coastguard Workerdefine void @udiv64(i64 %a, i64 %b, i64* %retptr) {
17*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: udiv64(
18*9880d681SAndroid Build Coastguard Worker; CHECK:        div.u64
19*9880d681SAndroid Build Coastguard Worker; CHECK:        div.u32
20*9880d681SAndroid Build Coastguard Worker; CHECK:        ret
21*9880d681SAndroid Build Coastguard Worker  %d = udiv i64 %a, %b
22*9880d681SAndroid Build Coastguard Worker  store i64 %d, i64* %retptr
23*9880d681SAndroid Build Coastguard Worker  ret void
24*9880d681SAndroid Build Coastguard Worker}
25*9880d681SAndroid Build Coastguard Worker
26*9880d681SAndroid Build Coastguard Workerdefine void @srem64(i64 %a, i64 %b, i64* %retptr) {
27*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: srem64(
28*9880d681SAndroid Build Coastguard Worker; CHECK:        rem.s64
29*9880d681SAndroid Build Coastguard Worker; CHECK:        rem.u32
30*9880d681SAndroid Build Coastguard Worker; CHECK:        ret
31*9880d681SAndroid Build Coastguard Worker  %d = srem i64 %a, %b
32*9880d681SAndroid Build Coastguard Worker  store i64 %d, i64* %retptr
33*9880d681SAndroid Build Coastguard Worker  ret void
34*9880d681SAndroid Build Coastguard Worker}
35*9880d681SAndroid Build Coastguard Worker
36*9880d681SAndroid Build Coastguard Workerdefine void @urem64(i64 %a, i64 %b, i64* %retptr) {
37*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: urem64(
38*9880d681SAndroid Build Coastguard Worker; CHECK:        rem.u64
39*9880d681SAndroid Build Coastguard Worker; CHECK:        rem.u32
40*9880d681SAndroid Build Coastguard Worker; CHECK:        ret
41*9880d681SAndroid Build Coastguard Worker  %d = urem i64 %a, %b
42*9880d681SAndroid Build Coastguard Worker  store i64 %d, i64* %retptr
43*9880d681SAndroid Build Coastguard Worker  ret void
44*9880d681SAndroid Build Coastguard Worker}
45*9880d681SAndroid Build Coastguard Worker
46*9880d681SAndroid Build Coastguard Workerdefine void @sdiv32(i32 %a, i32 %b, i32* %retptr) {
47*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sdiv32(
48*9880d681SAndroid Build Coastguard Worker; CHECK: div.s32
49*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: div.
50*9880d681SAndroid Build Coastguard Worker  %d = sdiv i32 %a, %b
51*9880d681SAndroid Build Coastguard Worker  store i32 %d, i32* %retptr
52*9880d681SAndroid Build Coastguard Worker  ret void
53*9880d681SAndroid Build Coastguard Worker}
54*9880d681SAndroid Build Coastguard Worker
55*9880d681SAndroid Build Coastguard Workerdefine void @udiv32(i32 %a, i32 %b, i32* %retptr) {
56*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: udiv32(
57*9880d681SAndroid Build Coastguard Worker; CHECK: div.u32
58*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: div.
59*9880d681SAndroid Build Coastguard Worker  %d = udiv i32 %a, %b
60*9880d681SAndroid Build Coastguard Worker  store i32 %d, i32* %retptr
61*9880d681SAndroid Build Coastguard Worker  ret void
62*9880d681SAndroid Build Coastguard Worker}
63*9880d681SAndroid Build Coastguard Worker
64*9880d681SAndroid Build Coastguard Workerdefine void @srem32(i32 %a, i32 %b, i32* %retptr) {
65*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: srem32(
66*9880d681SAndroid Build Coastguard Worker; CHECK: rem.s32
67*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: rem.
68*9880d681SAndroid Build Coastguard Worker  %d = srem i32 %a, %b
69*9880d681SAndroid Build Coastguard Worker  store i32 %d, i32* %retptr
70*9880d681SAndroid Build Coastguard Worker  ret void
71*9880d681SAndroid Build Coastguard Worker}
72*9880d681SAndroid Build Coastguard Worker
73*9880d681SAndroid Build Coastguard Workerdefine void @urem32(i32 %a, i32 %b, i32* %retptr) {
74*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: urem32(
75*9880d681SAndroid Build Coastguard Worker; CHECK: rem.u32
76*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: rem.
77*9880d681SAndroid Build Coastguard Worker  %d = urem i32 %a, %b
78*9880d681SAndroid Build Coastguard Worker  store i32 %d, i32* %retptr
79*9880d681SAndroid Build Coastguard Worker  ret void
80*9880d681SAndroid Build Coastguard Worker}
81