1;RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck -check-prefix=EG %s
2
3;EG-LABEL: {{^}}test_udiv:
4;EG: RECIP_UINT
5;EG: LSHL {{.*}}, 1,
6;EG: BFE_UINT
7;EG: BFE_UINT
8;EG: BFE_UINT
9;EG: BFE_UINT
10;EG: BFE_UINT
11;EG: BFE_UINT
12;EG: BFE_UINT
13;EG: BFE_UINT
14;EG: BFE_UINT
15;EG: BFE_UINT
16;EG: BFE_UINT
17;EG: BFE_UINT
18;EG: BFE_UINT
19;EG: BFE_UINT
20;EG: BFE_UINT
21;EG: BFE_UINT
22;EG: BFE_UINT
23;EG: BFE_UINT
24;EG: BFE_UINT
25;EG: BFE_UINT
26;EG: BFE_UINT
27;EG: BFE_UINT
28;EG: BFE_UINT
29;EG: BFE_UINT
30;EG: BFE_UINT
31;EG: BFE_UINT
32;EG: BFE_UINT
33;EG: BFE_UINT
34;EG: BFE_UINT
35;EG: BFE_UINT
36define amdgpu_kernel void @test_udiv(i64 addrspace(1)* %out, i64 %x, i64 %y) {
37  %result = udiv i64 %x, %y
38  store i64 %result, i64 addrspace(1)* %out
39  ret void
40}
41
42;EG-LABEL: {{^}}test_urem:
43;EG: RECIP_UINT
44;EG: BFE_UINT
45;EG: BFE_UINT
46;EG: BFE_UINT
47;EG: BFE_UINT
48;EG: BFE_UINT
49;EG: BFE_UINT
50;EG: BFE_UINT
51;EG: BFE_UINT
52;EG: BFE_UINT
53;EG: BFE_UINT
54;EG: BFE_UINT
55;EG: BFE_UINT
56;EG: BFE_UINT
57;EG: BFE_UINT
58;EG: BFE_UINT
59;EG: BFE_UINT
60;EG: BFE_UINT
61;EG: BFE_UINT
62;EG: BFE_UINT
63;EG: BFE_UINT
64;EG: BFE_UINT
65;EG: BFE_UINT
66;EG: BFE_UINT
67;EG: BFE_UINT
68;EG: BFE_UINT
69;EG: BFE_UINT
70;EG: BFE_UINT
71;EG: BFE_UINT
72;EG: BFE_UINT
73;EG: BFE_UINT
74;EG: AND_INT {{.*}}, 1,
75define amdgpu_kernel void @test_urem(i64 addrspace(1)* %out, i64 %x, i64 %y) {
76  %result = urem i64 %x, %y
77  store i64 %result, i64 addrspace(1)* %out
78  ret void
79}
80
81;EG-LABEL: {{^}}test_udiv3264:
82;EG: RECIP_UINT
83;EG-NOT: BFE_UINT
84define amdgpu_kernel void @test_udiv3264(i64 addrspace(1)* %out, i64 %x, i64 %y) {
85  %1 = lshr i64 %x, 33
86  %2 = lshr i64 %y, 33
87  %result = udiv i64 %1, %2
88  store i64 %result, i64 addrspace(1)* %out
89  ret void
90}
91
92;EG-LABEL: {{^}}test_urem3264:
93;EG: RECIP_UINT
94;EG-NOT: BFE_UINT
95define amdgpu_kernel void @test_urem3264(i64 addrspace(1)* %out, i64 %x, i64 %y) {
96  %1 = lshr i64 %x, 33
97  %2 = lshr i64 %y, 33
98  %result = urem i64 %1, %2
99  store i64 %result, i64 addrspace(1)* %out
100  ret void
101}
102
103;EG-LABEL: {{^}}test_udiv2364:
104;EG: UINT_TO_FLT
105;EG: UINT_TO_FLT
106;EG: FLT_TO_UINT
107;EG-NOT: RECIP_UINT
108;EG-NOT: BFE_UINT
109define amdgpu_kernel void @test_udiv2364(i64 addrspace(1)* %out, i64 %x, i64 %y) {
110  %1 = lshr i64 %x, 41
111  %2 = lshr i64 %y, 41
112  %result = udiv i64 %1, %2
113  store i64 %result, i64 addrspace(1)* %out
114  ret void
115}
116
117;EG-LABEL: {{^}}test_urem2364:
118;EG: UINT_TO_FLT
119;EG: UINT_TO_FLT
120;EG: FLT_TO_UINT
121;EG-NOT: RECIP_UINT
122;EG-NOT: BFE_UINT
123define amdgpu_kernel void @test_urem2364(i64 addrspace(1)* %out, i64 %x, i64 %y) {
124  %1 = lshr i64 %x, 41
125  %2 = lshr i64 %y, 41
126  %result = urem i64 %1, %2
127  store i64 %result, i64 addrspace(1)* %out
128  ret void
129}
130
131;EG-LABEL: {{^}}test_udiv_k:
132define amdgpu_kernel void @test_udiv_k(i64 addrspace(1)* %out, i64 %x) {
133  %result = udiv i64 24, %x
134  store i64 %result, i64 addrspace(1)* %out
135  ret void
136}
137