blob: bd98c9a5b0b10664ae9499ed04392da3f4de5d81 [file] [log] [blame]
Mark Heffernan438ffe52015-08-11 22:16:34 +00001; 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}