blob: 9202fc01f55583a069815bb9ecf3770ce7ede98f [file] [log] [blame]
Tom Stellardc0845332013-11-22 23:07:58 +00001;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}