Revert 239644.
[oota-llvm.git] / test / CodeGen / R600 / sdivrem64.ll
1 ;RUN: llc -march=amdgcn -mcpu=SI -verify-machineinstrs < %s | FileCheck --check-prefix=SI --check-prefix=GCN --check-prefix=FUNC %s
2 ;RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck --check-prefix=VI --check-prefix=GCN --check-prefix=FUNC %s
3 ;RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck --check-prefix=EG --check-prefix=FUNC %s
4
5 ;FUNC-LABEL: {{^}}test_sdiv:
6 ;EG: RECIP_UINT
7 ;EG: LSHL {{.*}}, 1,
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
36 ;EG: BFE_UINT
37 ;EG: BFE_UINT
38
39 ;GCN: v_bfe_u32
40 ;GCN: v_bfe_u32
41 ;GCN: v_bfe_u32
42 ;GCN: v_bfe_u32
43 ;GCN: v_bfe_u32
44 ;GCN: v_bfe_u32
45 ;GCN: v_bfe_u32
46 ;GCN: v_bfe_u32
47 ;GCN: v_bfe_u32
48 ;GCN: v_bfe_u32
49 ;GCN: v_bfe_u32
50 ;GCN: v_bfe_u32
51 ;GCN: v_bfe_u32
52 ;GCN: v_bfe_u32
53 ;GCN: v_bfe_u32
54 ;GCN: v_bfe_u32
55 ;GCN: v_bfe_u32
56 ;GCN: v_bfe_u32
57 ;GCN: v_bfe_u32
58 ;GCN: v_bfe_u32
59 ;GCN: v_bfe_u32
60 ;GCN: v_bfe_u32
61 ;GCN: v_bfe_u32
62 ;GCN: v_bfe_u32
63 ;GCN: v_bfe_u32
64 ;GCN: v_bfe_u32
65 ;GCN: v_bfe_u32
66 ;GCN: v_bfe_u32
67 ;GCN: v_bfe_u32
68 ;GCN: v_bfe_u32
69 ;GCN-NOT: v_mad_f32
70 ;SI-NOT: v_lshr_b64
71 ;VI-NOT: v_lshrrev_b64
72 ;GCN: s_endpgm
73 define void @test_sdiv(i64 addrspace(1)* %out, i64 %x, i64 %y) {
74   %result = sdiv i64 %x, %y
75   store i64 %result, i64 addrspace(1)* %out
76   ret void
77 }
78
79 ;FUNC-LABEL: {{^}}test_srem:
80 ;EG: RECIP_UINT
81 ;EG: BFE_UINT
82 ;EG: BFE_UINT
83 ;EG: BFE_UINT
84 ;EG: BFE_UINT
85 ;EG: BFE_UINT
86 ;EG: BFE_UINT
87 ;EG: BFE_UINT
88 ;EG: BFE_UINT
89 ;EG: BFE_UINT
90 ;EG: BFE_UINT
91 ;EG: BFE_UINT
92 ;EG: BFE_UINT
93 ;EG: BFE_UINT
94 ;EG: BFE_UINT
95 ;EG: BFE_UINT
96 ;EG: BFE_UINT
97 ;EG: BFE_UINT
98 ;EG: BFE_UINT
99 ;EG: BFE_UINT
100 ;EG: BFE_UINT
101 ;EG: BFE_UINT
102 ;EG: BFE_UINT
103 ;EG: BFE_UINT
104 ;EG: BFE_UINT
105 ;EG: BFE_UINT
106 ;EG: BFE_UINT
107 ;EG: BFE_UINT
108 ;EG: BFE_UINT
109 ;EG: BFE_UINT
110 ;EG: BFE_UINT
111 ;EG: AND_INT {{.*}}, 1,
112
113 ;GCN: s_bfe_u32
114 ;GCN: s_bfe_u32
115 ;GCN: s_bfe_u32
116 ;GCN: s_bfe_u32
117 ;GCN: s_bfe_u32
118 ;GCN: s_bfe_u32
119 ;GCN: s_bfe_u32
120 ;GCN: s_bfe_u32
121 ;GCN: s_bfe_u32
122 ;GCN: s_bfe_u32
123 ;GCN: s_bfe_u32
124 ;GCN: s_bfe_u32
125 ;GCN: s_bfe_u32
126 ;GCN: s_bfe_u32
127 ;GCN: s_bfe_u32
128 ;GCN: s_bfe_u32
129 ;GCN: s_bfe_u32
130 ;GCN: s_bfe_u32
131 ;GCN: s_bfe_u32
132 ;GCN: s_bfe_u32
133 ;GCN: s_bfe_u32
134 ;GCN: s_bfe_u32
135 ;GCN: s_bfe_u32
136 ;GCN: s_bfe_u32
137 ;GCN: s_bfe_u32
138 ;GCN: s_bfe_u32
139 ;GCN: s_bfe_u32
140 ;GCN: s_bfe_u32
141 ;GCN: s_bfe_u32
142 ;GCN: s_bfe_u32
143 ;GCN-NOT: v_mad_f32
144 ;SI-NOT: v_lshr_b64
145 ;VI-NOT: v_lshrrev_b64
146 ;GCN: s_endpgm
147 define void @test_srem(i64 addrspace(1)* %out, i64 %x, i64 %y) {
148   %result = urem i64 %x, %y
149   store i64 %result, i64 addrspace(1)* %out
150   ret void
151 }
152
153 ;FUNC-LABEL: {{^}}test_sdiv3264:
154 ;EG: RECIP_UINT
155 ;EG-NOT: BFE_UINT
156
157 ;GCN-NOT: s_bfe_u32
158 ;GCN-NOT: v_mad_f32
159 ;SI-NOT: v_lshr_b64
160 ;VI-NOT: v_lshrrev_b64
161 ;GCN: s_endpgm
162 define void @test_sdiv3264(i64 addrspace(1)* %out, i64 %x, i64 %y) {
163   %1 = ashr i64 %x, 33
164   %2 = ashr i64 %y, 33
165   %result = sdiv i64 %1, %2
166   store i64 %result, i64 addrspace(1)* %out
167   ret void
168 }
169
170 ;FUNC-LABEL: {{^}}test_srem3264:
171 ;EG: RECIP_UINT
172 ;EG-NOT: BFE_UINT
173
174 ;GCN-NOT: s_bfe_u32
175 ;GCN-NOT: v_mad_f32
176 ;SI-NOT: v_lshr_b64
177 ;VI-NOT: v_lshrrev_b64
178 ;GCN: s_endpgm
179 define void @test_srem3264(i64 addrspace(1)* %out, i64 %x, i64 %y) {
180   %1 = ashr i64 %x, 33
181   %2 = ashr i64 %y, 33
182   %result = srem i64 %1, %2
183   store i64 %result, i64 addrspace(1)* %out
184   ret void
185 }
186
187 ;FUNC-LABEL: {{^}}test_sdiv2464:
188 ;EG: INT_TO_FLT
189 ;EG: INT_TO_FLT
190 ;EG: FLT_TO_INT
191 ;EG-NOT: RECIP_UINT
192 ;EG-NOT: BFE_UINT
193
194 ;GCN-NOT: s_bfe_u32
195 ;GCN: v_mad_f32
196 ;SI-NOT: v_lshr_b64
197 ;VI-NOT: v_lshrrev_b64
198 ;GCN: s_endpgm
199 define void @test_sdiv2464(i64 addrspace(1)* %out, i64 %x, i64 %y) {
200   %1 = ashr i64 %x, 40
201   %2 = ashr i64 %y, 40
202   %result = sdiv i64 %1, %2
203   store i64 %result, i64 addrspace(1)* %out
204   ret void
205 }
206
207 ;FUNC-LABEL: {{^}}test_srem2464:
208 ;EG: INT_TO_FLT
209 ;EG: INT_TO_FLT
210 ;EG: FLT_TO_INT
211 ;EG-NOT: RECIP_UINT
212 ;EG-NOT: BFE_UINT
213
214 ;GCN-NOT: s_bfe_u32
215 ;GCN: v_mad_f32
216 ;SI-NOT: v_lshr_b64
217 ;VI-NOT: v_lshrrev_b64
218 ;GCN: s_endpgm
219 define void @test_srem2464(i64 addrspace(1)* %out, i64 %x, i64 %y) {
220   %1 = ashr i64 %x, 40
221   %2 = ashr i64 %y, 40
222   %result = srem i64 %1, %2
223   store i64 %result, i64 addrspace(1)* %out
224   ret void
225 }