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