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