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
63 define void @f64_one(i32 addrspace(1)* %out, double %a, double %b) {
65 %0 = fcmp one double %a, %b
66 %1 = sext i1 %0 to i32
67 store i32 %1, i32 addrspace(1)* %out
71 ; FUNC-LABEL: @f64_ord
73 define void @f64_ord(i32 addrspace(1)* %out, double %a, double %b) {
75 %0 = fcmp ord double %a, %b
76 %1 = sext i1 %0 to i32
77 store i32 %1, i32 addrspace(1)* %out
81 ; FUNC-LABEL: @f64_ueq
85 define void @f64_ueq(i32 addrspace(1)* %out, double %a, double %b) {
87 %0 = fcmp ueq double %a, %b
88 %1 = sext i1 %0 to i32
89 store i32 %1, i32 addrspace(1)* %out
93 ; FUNC-LABEL: @f64_ugt
97 define void @f64_ugt(i32 addrspace(1)* %out, double %a, double %b) {
99 %0 = fcmp ugt double %a, %b
100 %1 = sext i1 %0 to i32
101 store i32 %1, i32 addrspace(1)* %out
105 ; FUNC-LABEL: @f64_uge
109 define void @f64_uge(i32 addrspace(1)* %out, double %a, double %b) {
111 %0 = fcmp uge double %a, %b
112 %1 = sext i1 %0 to i32
113 store i32 %1, i32 addrspace(1)* %out
117 ; FUNC-LABEL: @f64_ult
121 define void @f64_ult(i32 addrspace(1)* %out, double %a, double %b) {
123 %0 = fcmp ult double %a, %b
124 %1 = sext i1 %0 to i32
125 store i32 %1, i32 addrspace(1)* %out
129 ; FUNC-LABEL: @f64_ule
133 define void @f64_ule(i32 addrspace(1)* %out, double %a, double %b) {
135 %0 = fcmp ule double %a, %b
136 %1 = sext i1 %0 to i32
137 store i32 %1, i32 addrspace(1)* %out
141 ; FUNC-LABEL: @f64_une
143 define void @f64_une(i32 addrspace(1)* %out, double %a, double %b) {
145 %0 = fcmp une double %a, %b
146 %1 = sext i1 %0 to i32
147 store i32 %1, i32 addrspace(1)* %out
151 ; FUNC-LABEL: @f64_uno
153 define void @f64_uno(i32 addrspace(1)* %out, double %a, double %b) {
155 %0 = fcmp uno double %a, %b
156 %1 = sext i1 %0 to i32
157 store i32 %1, i32 addrspace(1)* %out
161 ;;;==========================================================================;;;
162 ;; 64-bit integer comparisons
163 ;;;==========================================================================;;;
165 ; FUNC-LABEL: @i64_eq
167 define void @i64_eq(i32 addrspace(1)* %out, i64 %a, i64 %b) {
169 %0 = icmp eq i64 %a, %b
170 %1 = sext i1 %0 to i32
171 store i32 %1, i32 addrspace(1)* %out
175 ; FUNC-LABEL: @i64_ne
177 define void @i64_ne(i32 addrspace(1)* %out, i64 %a, i64 %b) {
179 %0 = icmp ne i64 %a, %b
180 %1 = sext i1 %0 to i32
181 store i32 %1, i32 addrspace(1)* %out
185 ; FUNC-LABEL: @i64_ugt
187 define void @i64_ugt(i32 addrspace(1)* %out, i64 %a, i64 %b) {
189 %0 = icmp ugt i64 %a, %b
190 %1 = sext i1 %0 to i32
191 store i32 %1, i32 addrspace(1)* %out
195 ; FUNC-LABEL: @i64_uge
197 define void @i64_uge(i32 addrspace(1)* %out, i64 %a, i64 %b) {
199 %0 = icmp uge i64 %a, %b
200 %1 = sext i1 %0 to i32
201 store i32 %1, i32 addrspace(1)* %out
205 ; FUNC-LABEL: @i64_ult
207 define void @i64_ult(i32 addrspace(1)* %out, i64 %a, i64 %b) {
209 %0 = icmp ult i64 %a, %b
210 %1 = sext i1 %0 to i32
211 store i32 %1, i32 addrspace(1)* %out
215 ; FUNC-LABEL: @i64_ule
217 define void @i64_ule(i32 addrspace(1)* %out, i64 %a, i64 %b) {
219 %0 = icmp ule i64 %a, %b
220 %1 = sext i1 %0 to i32
221 store i32 %1, i32 addrspace(1)* %out
225 ; FUNC-LABEL: @i64_sgt
227 define void @i64_sgt(i32 addrspace(1)* %out, i64 %a, i64 %b) {
229 %0 = icmp sgt i64 %a, %b
230 %1 = sext i1 %0 to i32
231 store i32 %1, i32 addrspace(1)* %out
235 ; FUNC-LABEL: @i64_sge
237 define void @i64_sge(i32 addrspace(1)* %out, i64 %a, i64 %b) {
239 %0 = icmp sge i64 %a, %b
240 %1 = sext i1 %0 to i32
241 store i32 %1, i32 addrspace(1)* %out
245 ; FUNC-LABEL: @i64_slt
247 define void @i64_slt(i32 addrspace(1)* %out, i64 %a, i64 %b) {
249 %0 = icmp slt i64 %a, %b
250 %1 = sext i1 %0 to i32
251 store i32 %1, i32 addrspace(1)* %out
255 ; FUNC-LABEL: @i64_sle
257 define void @i64_sle(i32 addrspace(1)* %out, i64 %a, i64 %b) {
259 %0 = icmp sle i64 %a, %b
260 %1 = sext i1 %0 to i32
261 store i32 %1, i32 addrspace(1)* %out