R600/SI: Fixing handling of condition codes
[oota-llvm.git] / test / CodeGen / R600 / setcc64.ll
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
11 define void @f64_oeq(i32 addrspace(1)* %out, double %a, double %b) {
12 entry:
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
21 define void @f64_ogt(i32 addrspace(1)* %out, double %a, double %b) {
22 entry:
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
31 define void @f64_oge(i32 addrspace(1)* %out, double %a, double %b) {
32 entry:
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
41 define void @f64_olt(i32 addrspace(1)* %out, double %a, double %b) {
42 entry:
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
51 define void @f64_ole(i32 addrspace(1)* %out, double %a, double %b) {
52 entry:
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
63 define void @f64_one(i32 addrspace(1)* %out, double %a, double %b) {
64 entry:
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
73 define void @f64_ord(i32 addrspace(1)* %out, double %a, double %b) {
74 entry:
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
85 define void @f64_ueq(i32 addrspace(1)* %out, double %a, double %b) {
86 entry:
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
97 define void @f64_ugt(i32 addrspace(1)* %out, double %a, double %b) {
98 entry:
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
109 define void @f64_uge(i32 addrspace(1)* %out, double %a, double %b) {
110 entry:
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
121 define void @f64_ult(i32 addrspace(1)* %out, double %a, double %b) {
122 entry:
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
133 define void @f64_ule(i32 addrspace(1)* %out, double %a, double %b) {
134 entry:
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
143 define void @f64_une(i32 addrspace(1)* %out, double %a, double %b) {
144 entry:
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
153 define void @f64_uno(i32 addrspace(1)* %out, double %a, double %b) {
154 entry:
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
167 define void @i64_eq(i32 addrspace(1)* %out, i64 %a, i64 %b) {
168 entry:
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
177 define void @i64_ne(i32 addrspace(1)* %out, i64 %a, i64 %b) {
178 entry:
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
187 define void @i64_ugt(i32 addrspace(1)* %out, i64 %a, i64 %b) {
188 entry:
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
197 define void @i64_uge(i32 addrspace(1)* %out, i64 %a, i64 %b) {
198 entry:
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
207 define void @i64_ult(i32 addrspace(1)* %out, i64 %a, i64 %b) {
208 entry:
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
217 define void @i64_ule(i32 addrspace(1)* %out, i64 %a, i64 %b) {
218 entry:
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
227 define void @i64_sgt(i32 addrspace(1)* %out, i64 %a, i64 %b) {
228 entry:
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
237 define void @i64_sge(i32 addrspace(1)* %out, i64 %a, i64 %b) {
238 entry:
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
247 define void @i64_slt(i32 addrspace(1)* %out, i64 %a, i64 %b) {
248 entry:
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
257 define void @i64_sle(i32 addrspace(1)* %out, i64 %a, i64 %b) {
258 entry:
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 }