1;RUN: llc < %s -march=r600 -mcpu=SI | FileCheck --check-prefix=SI --check-prefix=FUNC %s
2
3; XXX: Merge this into setcc, once R600 supports 64-bit operations
4
5;;;==========================================================================;;;
6;; Double comparisons
7;;;==========================================================================;;;
8
9; FUNC-LABEL: @f64_oeq
10; SI: V_CMP_EQ_F64
11define void @f64_oeq(i32 addrspace(1)* %out, double %a, double %b) {
12entry:
13  %0 = fcmp oeq double %a, %b
14  %1 = sext i1 %0 to i32
15  store i32 %1, i32 addrspace(1)* %out
16  ret void
17}
18
19; FUNC-LABEL: @f64_ogt
20; SI: V_CMP_GT_F64
21define void @f64_ogt(i32 addrspace(1)* %out, double %a, double %b) {
22entry:
23  %0 = fcmp ogt double %a, %b
24  %1 = sext i1 %0 to i32
25  store i32 %1, i32 addrspace(1)* %out
26  ret void
27}
28
29; FUNC-LABEL: @f64_oge
30; SI: V_CMP_GE_F64
31define void @f64_oge(i32 addrspace(1)* %out, double %a, double %b) {
32entry:
33  %0 = fcmp oge double %a, %b
34  %1 = sext i1 %0 to i32
35  store i32 %1, i32 addrspace(1)* %out
36  ret void
37}
38
39; FUNC-LABEL: @f64_olt
40; SI: V_CMP_LT_F64
41define void @f64_olt(i32 addrspace(1)* %out, double %a, double %b) {
42entry:
43  %0 = fcmp olt double %a, %b
44  %1 = sext i1 %0 to i32
45  store i32 %1, i32 addrspace(1)* %out
46  ret void
47}
48
49; FUNC-LABEL: @f64_ole
50; SI: V_CMP_LE_F64
51define void @f64_ole(i32 addrspace(1)* %out, double %a, double %b) {
52entry:
53  %0 = fcmp ole double %a, %b
54  %1 = sext i1 %0 to i32
55  store i32 %1, i32 addrspace(1)* %out
56  ret void
57}
58
59; FUNC-LABEL: @f64_one
60; SI: V_CMP_O_F64
61; SI: V_CMP_NEQ_F64
62; SI: S_AND_B64
63define void @f64_one(i32 addrspace(1)* %out, double %a, double %b) {
64entry:
65  %0 = fcmp one double %a, %b
66  %1 = sext i1 %0 to i32
67  store i32 %1, i32 addrspace(1)* %out
68  ret void
69}
70
71; FUNC-LABEL: @f64_ord
72; SI: V_CMP_O_F64
73define void @f64_ord(i32 addrspace(1)* %out, double %a, double %b) {
74entry:
75  %0 = fcmp ord double %a, %b
76  %1 = sext i1 %0 to i32
77  store i32 %1, i32 addrspace(1)* %out
78  ret void
79}
80
81; FUNC-LABEL: @f64_ueq
82; SI: V_CMP_U_F64
83; SI: V_CMP_EQ_F64
84; SI: S_OR_B64
85define void @f64_ueq(i32 addrspace(1)* %out, double %a, double %b) {
86entry:
87  %0 = fcmp ueq double %a, %b
88  %1 = sext i1 %0 to i32
89  store i32 %1, i32 addrspace(1)* %out
90  ret void
91}
92
93; FUNC-LABEL: @f64_ugt
94; SI: V_CMP_U_F64
95; SI: V_CMP_GT_F64
96; SI: S_OR_B64
97define void @f64_ugt(i32 addrspace(1)* %out, double %a, double %b) {
98entry:
99  %0 = fcmp ugt double %a, %b
100  %1 = sext i1 %0 to i32
101  store i32 %1, i32 addrspace(1)* %out
102  ret void
103}
104
105; FUNC-LABEL: @f64_uge
106; SI: V_CMP_U_F64
107; SI: V_CMP_GE_F64
108; SI: S_OR_B64
109define void @f64_uge(i32 addrspace(1)* %out, double %a, double %b) {
110entry:
111  %0 = fcmp uge double %a, %b
112  %1 = sext i1 %0 to i32
113  store i32 %1, i32 addrspace(1)* %out
114  ret void
115}
116
117; FUNC-LABEL: @f64_ult
118; SI: V_CMP_U_F64
119; SI: V_CMP_LT_F64
120; SI: S_OR_B64
121define void @f64_ult(i32 addrspace(1)* %out, double %a, double %b) {
122entry:
123  %0 = fcmp ult double %a, %b
124  %1 = sext i1 %0 to i32
125  store i32 %1, i32 addrspace(1)* %out
126  ret void
127}
128
129; FUNC-LABEL: @f64_ule
130; SI: V_CMP_U_F64
131; SI: V_CMP_LE_F64
132; SI: S_OR_B64
133define void @f64_ule(i32 addrspace(1)* %out, double %a, double %b) {
134entry:
135  %0 = fcmp ule double %a, %b
136  %1 = sext i1 %0 to i32
137  store i32 %1, i32 addrspace(1)* %out
138  ret void
139}
140
141; FUNC-LABEL: @f64_une
142; SI: V_CMP_NEQ_F64
143define void @f64_une(i32 addrspace(1)* %out, double %a, double %b) {
144entry:
145  %0 = fcmp une double %a, %b
146  %1 = sext i1 %0 to i32
147  store i32 %1, i32 addrspace(1)* %out
148  ret void
149}
150
151; FUNC-LABEL: @f64_uno
152; SI: V_CMP_U_F64
153define void @f64_uno(i32 addrspace(1)* %out, double %a, double %b) {
154entry:
155  %0 = fcmp uno double %a, %b
156  %1 = sext i1 %0 to i32
157  store i32 %1, i32 addrspace(1)* %out
158  ret void
159}
160
161;;;==========================================================================;;;
162;; 64-bit integer comparisons
163;;;==========================================================================;;;
164
165; FUNC-LABEL: @i64_eq
166; SI: V_CMP_EQ_I64
167define void @i64_eq(i32 addrspace(1)* %out, i64 %a, i64 %b) {
168entry:
169  %0 = icmp eq i64 %a, %b
170  %1 = sext i1 %0 to i32
171  store i32 %1, i32 addrspace(1)* %out
172  ret void
173}
174
175; FUNC-LABEL: @i64_ne
176; SI: V_CMP_NE_I64
177define void @i64_ne(i32 addrspace(1)* %out, i64 %a, i64 %b) {
178entry:
179  %0 = icmp ne i64 %a, %b
180  %1 = sext i1 %0 to i32
181  store i32 %1, i32 addrspace(1)* %out
182  ret void
183}
184
185; FUNC-LABEL: @i64_ugt
186; SI: V_CMP_GT_U64
187define void @i64_ugt(i32 addrspace(1)* %out, i64 %a, i64 %b) {
188entry:
189  %0 = icmp ugt i64 %a, %b
190  %1 = sext i1 %0 to i32
191  store i32 %1, i32 addrspace(1)* %out
192  ret void
193}
194
195; FUNC-LABEL: @i64_uge
196; SI: V_CMP_GE_U64
197define void @i64_uge(i32 addrspace(1)* %out, i64 %a, i64 %b) {
198entry:
199  %0 = icmp uge i64 %a, %b
200  %1 = sext i1 %0 to i32
201  store i32 %1, i32 addrspace(1)* %out
202  ret void
203}
204
205; FUNC-LABEL: @i64_ult
206; SI: V_CMP_LT_U64
207define void @i64_ult(i32 addrspace(1)* %out, i64 %a, i64 %b) {
208entry:
209  %0 = icmp ult i64 %a, %b
210  %1 = sext i1 %0 to i32
211  store i32 %1, i32 addrspace(1)* %out
212  ret void
213}
214
215; FUNC-LABEL: @i64_ule
216; SI: V_CMP_LE_U64
217define void @i64_ule(i32 addrspace(1)* %out, i64 %a, i64 %b) {
218entry:
219  %0 = icmp ule i64 %a, %b
220  %1 = sext i1 %0 to i32
221  store i32 %1, i32 addrspace(1)* %out
222  ret void
223}
224
225; FUNC-LABEL: @i64_sgt
226; SI: V_CMP_GT_I64
227define void @i64_sgt(i32 addrspace(1)* %out, i64 %a, i64 %b) {
228entry:
229  %0 = icmp sgt i64 %a, %b
230  %1 = sext i1 %0 to i32
231  store i32 %1, i32 addrspace(1)* %out
232  ret void
233}
234
235; FUNC-LABEL: @i64_sge
236; SI: V_CMP_GE_I64
237define void @i64_sge(i32 addrspace(1)* %out, i64 %a, i64 %b) {
238entry:
239  %0 = icmp sge i64 %a, %b
240  %1 = sext i1 %0 to i32
241  store i32 %1, i32 addrspace(1)* %out
242  ret void
243}
244
245; FUNC-LABEL: @i64_slt
246; SI: V_CMP_LT_I64
247define void @i64_slt(i32 addrspace(1)* %out, i64 %a, i64 %b) {
248entry:
249  %0 = icmp slt i64 %a, %b
250  %1 = sext i1 %0 to i32
251  store i32 %1, i32 addrspace(1)* %out
252  ret void
253}
254
255; FUNC-LABEL: @i64_sle
256; SI: V_CMP_LE_I64
257define void @i64_sle(i32 addrspace(1)* %out, i64 %a, i64 %b) {
258entry:
259  %0 = icmp sle i64 %a, %b
260  %1 = sext i1 %0 to i32
261  store i32 %1, i32 addrspace(1)* %out
262  ret void
263}
264