1 ;RUN: llc < %s -march=r600 -mcpu=SI -verify-machineinstrs| FileCheck --check-prefix=SI --check-prefix=FUNC %s
3 ; XXX: Merge this into setcc, once R600 supports 64-bit operations
5 ;;;==========================================================================;;;
7 ;;;==========================================================================;;;
11 define void @f64_oeq(i32 addrspace(1)* %out, double %a, double %b) {
13 %0 = fcmp oeq double %a, %b
14 %1 = sext i1 %0 to i32
15 store i32 %1, i32 addrspace(1)* %out
19 ; FUNC-LABEL: @f64_ogt
21 define void @f64_ogt(i32 addrspace(1)* %out, double %a, double %b) {
23 %0 = fcmp ogt double %a, %b
24 %1 = sext i1 %0 to i32
25 store i32 %1, i32 addrspace(1)* %out
29 ; FUNC-LABEL: @f64_oge
31 define void @f64_oge(i32 addrspace(1)* %out, double %a, double %b) {
33 %0 = fcmp oge double %a, %b
34 %1 = sext i1 %0 to i32
35 store i32 %1, i32 addrspace(1)* %out
39 ; FUNC-LABEL: @f64_olt
41 define void @f64_olt(i32 addrspace(1)* %out, double %a, double %b) {
43 %0 = fcmp olt double %a, %b
44 %1 = sext i1 %0 to i32
45 store i32 %1, i32 addrspace(1)* %out
49 ; FUNC-LABEL: @f64_ole
51 define void @f64_ole(i32 addrspace(1)* %out, double %a, double %b) {
53 %0 = fcmp ole double %a, %b
54 %1 = sext i1 %0 to i32
55 store i32 %1, i32 addrspace(1)* %out
59 ; FUNC-LABEL: @f64_one
62 ; SI: V_CNDMASK_B32_e64
63 ; SI: V_CNDMASK_B32_e64
65 define void @f64_one(i32 addrspace(1)* %out, double %a, double %b) {
67 %0 = fcmp one double %a, %b
68 %1 = sext i1 %0 to i32
69 store i32 %1, i32 addrspace(1)* %out
73 ; FUNC-LABEL: @f64_ord
75 define void @f64_ord(i32 addrspace(1)* %out, double %a, double %b) {
77 %0 = fcmp ord double %a, %b
78 %1 = sext i1 %0 to i32
79 store i32 %1, i32 addrspace(1)* %out
83 ; FUNC-LABEL: @f64_ueq
86 ; SI: V_CNDMASK_B32_e64
87 ; SI: V_CNDMASK_B32_e64
89 define void @f64_ueq(i32 addrspace(1)* %out, double %a, double %b) {
91 %0 = fcmp ueq double %a, %b
92 %1 = sext i1 %0 to i32
93 store i32 %1, i32 addrspace(1)* %out
97 ; FUNC-LABEL: @f64_ugt
100 ; SI: V_CNDMASK_B32_e64
101 ; SI: V_CNDMASK_B32_e64
103 define void @f64_ugt(i32 addrspace(1)* %out, double %a, double %b) {
105 %0 = fcmp ugt double %a, %b
106 %1 = sext i1 %0 to i32
107 store i32 %1, i32 addrspace(1)* %out
111 ; FUNC-LABEL: @f64_uge
114 ; SI: V_CNDMASK_B32_e64
115 ; SI: V_CNDMASK_B32_e64
117 define void @f64_uge(i32 addrspace(1)* %out, double %a, double %b) {
119 %0 = fcmp uge double %a, %b
120 %1 = sext i1 %0 to i32
121 store i32 %1, i32 addrspace(1)* %out
125 ; FUNC-LABEL: @f64_ult
128 ; SI: V_CNDMASK_B32_e64
129 ; SI: V_CNDMASK_B32_e64
131 define void @f64_ult(i32 addrspace(1)* %out, double %a, double %b) {
133 %0 = fcmp ult double %a, %b
134 %1 = sext i1 %0 to i32
135 store i32 %1, i32 addrspace(1)* %out
139 ; FUNC-LABEL: @f64_ule
142 ; SI: V_CNDMASK_B32_e64
143 ; SI: V_CNDMASK_B32_e64
145 define void @f64_ule(i32 addrspace(1)* %out, double %a, double %b) {
147 %0 = fcmp ule double %a, %b
148 %1 = sext i1 %0 to i32
149 store i32 %1, i32 addrspace(1)* %out
153 ; FUNC-LABEL: @f64_une
155 define void @f64_une(i32 addrspace(1)* %out, double %a, double %b) {
157 %0 = fcmp une double %a, %b
158 %1 = sext i1 %0 to i32
159 store i32 %1, i32 addrspace(1)* %out
163 ; FUNC-LABEL: @f64_uno
165 define void @f64_uno(i32 addrspace(1)* %out, double %a, double %b) {
167 %0 = fcmp uno double %a, %b
168 %1 = sext i1 %0 to i32
169 store i32 %1, i32 addrspace(1)* %out
173 ;;;==========================================================================;;;
174 ;; 64-bit integer comparisons
175 ;;;==========================================================================;;;
177 ; FUNC-LABEL: @i64_eq
179 define void @i64_eq(i32 addrspace(1)* %out, i64 %a, i64 %b) {
181 %0 = icmp eq i64 %a, %b
182 %1 = sext i1 %0 to i32
183 store i32 %1, i32 addrspace(1)* %out
187 ; FUNC-LABEL: @i64_ne
189 define void @i64_ne(i32 addrspace(1)* %out, i64 %a, i64 %b) {
191 %0 = icmp ne i64 %a, %b
192 %1 = sext i1 %0 to i32
193 store i32 %1, i32 addrspace(1)* %out
197 ; FUNC-LABEL: @i64_ugt
199 define void @i64_ugt(i32 addrspace(1)* %out, i64 %a, i64 %b) {
201 %0 = icmp ugt i64 %a, %b
202 %1 = sext i1 %0 to i32
203 store i32 %1, i32 addrspace(1)* %out
207 ; FUNC-LABEL: @i64_uge
209 define void @i64_uge(i32 addrspace(1)* %out, i64 %a, i64 %b) {
211 %0 = icmp uge i64 %a, %b
212 %1 = sext i1 %0 to i32
213 store i32 %1, i32 addrspace(1)* %out
217 ; FUNC-LABEL: @i64_ult
219 define void @i64_ult(i32 addrspace(1)* %out, i64 %a, i64 %b) {
221 %0 = icmp ult i64 %a, %b
222 %1 = sext i1 %0 to i32
223 store i32 %1, i32 addrspace(1)* %out
227 ; FUNC-LABEL: @i64_ule
229 define void @i64_ule(i32 addrspace(1)* %out, i64 %a, i64 %b) {
231 %0 = icmp ule i64 %a, %b
232 %1 = sext i1 %0 to i32
233 store i32 %1, i32 addrspace(1)* %out
237 ; FUNC-LABEL: @i64_sgt
239 define void @i64_sgt(i32 addrspace(1)* %out, i64 %a, i64 %b) {
241 %0 = icmp sgt i64 %a, %b
242 %1 = sext i1 %0 to i32
243 store i32 %1, i32 addrspace(1)* %out
247 ; FUNC-LABEL: @i64_sge
249 define void @i64_sge(i32 addrspace(1)* %out, i64 %a, i64 %b) {
251 %0 = icmp sge i64 %a, %b
252 %1 = sext i1 %0 to i32
253 store i32 %1, i32 addrspace(1)* %out
257 ; FUNC-LABEL: @i64_slt
259 define void @i64_slt(i32 addrspace(1)* %out, i64 %a, i64 %b) {
261 %0 = icmp slt i64 %a, %b
262 %1 = sext i1 %0 to i32
263 store i32 %1, i32 addrspace(1)* %out
267 ; FUNC-LABEL: @i64_sle
269 define void @i64_sle(i32 addrspace(1)* %out, i64 %a, i64 %b) {
271 %0 = icmp sle i64 %a, %b
272 %1 = sext i1 %0 to i32
273 store i32 %1, i32 addrspace(1)* %out