1 ;RUN: llc < %s -march=amdgcn -mcpu=SI -verify-machineinstrs| FileCheck --check-prefix=SI --check-prefix=FUNC %s
2 ;RUN: llc < %s -march=amdgcn -mcpu=tonga -verify-machineinstrs| FileCheck --check-prefix=SI --check-prefix=FUNC %s
4 ; XXX: Merge this into setcc, once R600 supports 64-bit operations
6 ;;;==========================================================================;;;
8 ;;;==========================================================================;;;
10 ; FUNC-LABEL: {{^}}f64_oeq:
12 define void @f64_oeq(i32 addrspace(1)* %out, double %a, double %b) {
14 %0 = fcmp oeq double %a, %b
15 %1 = sext i1 %0 to i32
16 store i32 %1, i32 addrspace(1)* %out
20 ; FUNC-LABEL: {{^}}f64_ogt:
22 define void @f64_ogt(i32 addrspace(1)* %out, double %a, double %b) {
24 %0 = fcmp ogt double %a, %b
25 %1 = sext i1 %0 to i32
26 store i32 %1, i32 addrspace(1)* %out
30 ; FUNC-LABEL: {{^}}f64_oge:
32 define void @f64_oge(i32 addrspace(1)* %out, double %a, double %b) {
34 %0 = fcmp oge double %a, %b
35 %1 = sext i1 %0 to i32
36 store i32 %1, i32 addrspace(1)* %out
40 ; FUNC-LABEL: {{^}}f64_olt:
42 define void @f64_olt(i32 addrspace(1)* %out, double %a, double %b) {
44 %0 = fcmp olt double %a, %b
45 %1 = sext i1 %0 to i32
46 store i32 %1, i32 addrspace(1)* %out
50 ; FUNC-LABEL: {{^}}f64_ole:
52 define void @f64_ole(i32 addrspace(1)* %out, double %a, double %b) {
54 %0 = fcmp ole double %a, %b
55 %1 = sext i1 %0 to i32
56 store i32 %1, i32 addrspace(1)* %out
60 ; FUNC-LABEL: {{^}}f64_one:
61 ; SI: v_cmp_lg_f64_e32 vcc
62 ; SI-NEXT: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, vcc
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:
82 ; SI: v_cmp_nlg_f64_e32 vcc
83 ; SI-NEXT: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, vcc
84 define void @f64_ueq(i32 addrspace(1)* %out, double %a, double %b) {
86 %0 = fcmp ueq double %a, %b
87 %1 = sext i1 %0 to i32
88 store i32 %1, i32 addrspace(1)* %out
92 ; FUNC-LABEL: {{^}}f64_ugt:
94 ; SI: v_cmp_nle_f64_e32 vcc
95 ; SI-NEXT: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, vcc
96 define void @f64_ugt(i32 addrspace(1)* %out, double %a, double %b) {
98 %0 = fcmp ugt double %a, %b
99 %1 = sext i1 %0 to i32
100 store i32 %1, i32 addrspace(1)* %out
104 ; FUNC-LABEL: {{^}}f64_uge:
105 ; SI: v_cmp_nlt_f64_e32 vcc
106 ; SI-NEXT: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, vcc
107 define void @f64_uge(i32 addrspace(1)* %out, double %a, double %b) {
109 %0 = fcmp uge double %a, %b
110 %1 = sext i1 %0 to i32
111 store i32 %1, i32 addrspace(1)* %out
115 ; FUNC-LABEL: {{^}}f64_ult:
116 ; SI: v_cmp_nge_f64_e32 vcc
117 ; SI-NEXT: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, vcc
118 define void @f64_ult(i32 addrspace(1)* %out, double %a, double %b) {
120 %0 = fcmp ult double %a, %b
121 %1 = sext i1 %0 to i32
122 store i32 %1, i32 addrspace(1)* %out
126 ; FUNC-LABEL: {{^}}f64_ule:
127 ; SI: v_cmp_ngt_f64_e32 vcc
128 ; SI-NEXT: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, vcc
129 define void @f64_ule(i32 addrspace(1)* %out, double %a, double %b) {
131 %0 = fcmp ule double %a, %b
132 %1 = sext i1 %0 to i32
133 store i32 %1, i32 addrspace(1)* %out
137 ; FUNC-LABEL: {{^}}f64_une:
139 define void @f64_une(i32 addrspace(1)* %out, double %a, double %b) {
141 %0 = fcmp une double %a, %b
142 %1 = sext i1 %0 to i32
143 store i32 %1, i32 addrspace(1)* %out
147 ; FUNC-LABEL: {{^}}f64_uno:
149 define void @f64_uno(i32 addrspace(1)* %out, double %a, double %b) {
151 %0 = fcmp uno double %a, %b
152 %1 = sext i1 %0 to i32
153 store i32 %1, i32 addrspace(1)* %out
157 ;;;==========================================================================;;;
158 ;; 64-bit integer comparisons
159 ;;;==========================================================================;;;
161 ; FUNC-LABEL: {{^}}i64_eq:
163 define void @i64_eq(i32 addrspace(1)* %out, i64 %a, i64 %b) {
165 %0 = icmp eq i64 %a, %b
166 %1 = sext i1 %0 to i32
167 store i32 %1, i32 addrspace(1)* %out
171 ; FUNC-LABEL: {{^}}i64_ne:
173 define void @i64_ne(i32 addrspace(1)* %out, i64 %a, i64 %b) {
175 %0 = icmp ne i64 %a, %b
176 %1 = sext i1 %0 to i32
177 store i32 %1, i32 addrspace(1)* %out
181 ; FUNC-LABEL: {{^}}i64_ugt:
183 define void @i64_ugt(i32 addrspace(1)* %out, i64 %a, i64 %b) {
185 %0 = icmp ugt i64 %a, %b
186 %1 = sext i1 %0 to i32
187 store i32 %1, i32 addrspace(1)* %out
191 ; FUNC-LABEL: {{^}}i64_uge:
193 define void @i64_uge(i32 addrspace(1)* %out, i64 %a, i64 %b) {
195 %0 = icmp uge i64 %a, %b
196 %1 = sext i1 %0 to i32
197 store i32 %1, i32 addrspace(1)* %out
201 ; FUNC-LABEL: {{^}}i64_ult:
203 define void @i64_ult(i32 addrspace(1)* %out, i64 %a, i64 %b) {
205 %0 = icmp ult i64 %a, %b
206 %1 = sext i1 %0 to i32
207 store i32 %1, i32 addrspace(1)* %out
211 ; FUNC-LABEL: {{^}}i64_ule:
213 define void @i64_ule(i32 addrspace(1)* %out, i64 %a, i64 %b) {
215 %0 = icmp ule i64 %a, %b
216 %1 = sext i1 %0 to i32
217 store i32 %1, i32 addrspace(1)* %out
221 ; FUNC-LABEL: {{^}}i64_sgt:
223 define void @i64_sgt(i32 addrspace(1)* %out, i64 %a, i64 %b) {
225 %0 = icmp sgt i64 %a, %b
226 %1 = sext i1 %0 to i32
227 store i32 %1, i32 addrspace(1)* %out
231 ; FUNC-LABEL: {{^}}i64_sge:
233 define void @i64_sge(i32 addrspace(1)* %out, i64 %a, i64 %b) {
235 %0 = icmp sge i64 %a, %b
236 %1 = sext i1 %0 to i32
237 store i32 %1, i32 addrspace(1)* %out
241 ; FUNC-LABEL: {{^}}i64_slt:
243 define void @i64_slt(i32 addrspace(1)* %out, i64 %a, i64 %b) {
245 %0 = icmp slt i64 %a, %b
246 %1 = sext i1 %0 to i32
247 store i32 %1, i32 addrspace(1)* %out
251 ; FUNC-LABEL: {{^}}i64_sle:
253 define void @i64_sle(i32 addrspace(1)* %out, i64 %a, i64 %b) {
255 %0 = icmp sle i64 %a, %b
256 %1 = sext i1 %0 to i32
257 store i32 %1, i32 addrspace(1)* %out