[ARM] Fixup the creation of VPT blocks
[llvm-core.git] / test / CodeGen / AMDGPU / setcc64.ll
blob1f1bdb055302c365f904ffbac6dd4022da7fde39
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 ;;;==========================================================================;;;
7 ;; Double comparisons
8 ;;;==========================================================================;;;
10 ; GCN-LABEL: {{^}}f64_oeq:
11 ; GCN: v_cmp_eq_f64
12 define amdgpu_kernel void @f64_oeq(i32 addrspace(1)* %out, double %a, double %b) #0 {
13 entry:
14   %tmp0 = fcmp oeq double %a, %b
15   %tmp1 = sext i1 %tmp0 to i32
16   store i32 %tmp1, i32 addrspace(1)* %out
17   ret void
20 ; GCN-LABEL: {{^}}f64_ogt:
21 ; GCN: v_cmp_gt_f64
22 define amdgpu_kernel void @f64_ogt(i32 addrspace(1)* %out, double %a, double %b) #0 {
23 entry:
24   %tmp0 = fcmp ogt double %a, %b
25   %tmp1 = sext i1 %tmp0 to i32
26   store i32 %tmp1, i32 addrspace(1)* %out
27   ret void
30 ; GCN-LABEL: {{^}}f64_oge:
31 ; GCN: v_cmp_ge_f64
32 define amdgpu_kernel void @f64_oge(i32 addrspace(1)* %out, double %a, double %b) #0 {
33 entry:
34   %tmp0 = fcmp oge double %a, %b
35   %tmp1 = sext i1 %tmp0 to i32
36   store i32 %tmp1, i32 addrspace(1)* %out
37   ret void
40 ; GCN-LABEL: {{^}}f64_olt:
41 ; GCN: v_cmp_lt_f64
42 define amdgpu_kernel void @f64_olt(i32 addrspace(1)* %out, double %a, double %b) #0 {
43 entry:
44   %tmp0 = fcmp olt double %a, %b
45   %tmp1 = sext i1 %tmp0 to i32
46   store i32 %tmp1, i32 addrspace(1)* %out
47   ret void
50 ; GCN-LABEL: {{^}}f64_ole:
51 ; GCN: v_cmp_le_f64
52 define amdgpu_kernel void @f64_ole(i32 addrspace(1)* %out, double %a, double %b) #0 {
53 entry:
54   %tmp0 = fcmp ole double %a, %b
55   %tmp1 = sext i1 %tmp0 to i32
56   store i32 %tmp1, i32 addrspace(1)* %out
57   ret void
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 {
64 entry:
65   %tmp0 = fcmp one double %a, %b
66   %tmp1 = sext i1 %tmp0 to i32
67   store i32 %tmp1, i32 addrspace(1)* %out
68   ret void
71 ; GCN-LABEL: {{^}}f64_ord:
72 ; GCN: v_cmp_o_f64
73 define amdgpu_kernel void @f64_ord(i32 addrspace(1)* %out, double %a, double %b) #0 {
74 entry:
75   %tmp0 = fcmp ord double %a, %b
76   %tmp1 = sext i1 %tmp0 to i32
77   store i32 %tmp1, i32 addrspace(1)* %out
78   ret void
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 {
85 entry:
86   %tmp0 = fcmp ueq double %a, %b
87   %tmp1 = sext i1 %tmp0 to i32
88   store i32 %tmp1, i32 addrspace(1)* %out
89   ret void
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 {
97 entry:
98   %tmp0 = fcmp ugt double %a, %b
99   %tmp1 = sext i1 %tmp0 to i32
100   store i32 %tmp1, i32 addrspace(1)* %out
101   ret void
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 {
108 entry:
109   %tmp0 = fcmp uge double %a, %b
110   %tmp1 = sext i1 %tmp0 to i32
111   store i32 %tmp1, i32 addrspace(1)* %out
112   ret void
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 {
119 entry:
120   %tmp0 = fcmp ult double %a, %b
121   %tmp1 = sext i1 %tmp0 to i32
122   store i32 %tmp1, i32 addrspace(1)* %out
123   ret void
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 {
130 entry:
131   %tmp0 = fcmp ule double %a, %b
132   %tmp1 = sext i1 %tmp0 to i32
133   store i32 %tmp1, i32 addrspace(1)* %out
134   ret void
137 ; GCN-LABEL: {{^}}f64_une:
138 ; GCN: v_cmp_neq_f64
139 define amdgpu_kernel void @f64_une(i32 addrspace(1)* %out, double %a, double %b) #0 {
140 entry:
141   %tmp0 = fcmp une double %a, %b
142   %tmp1 = sext i1 %tmp0 to i32
143   store i32 %tmp1, i32 addrspace(1)* %out
144   ret void
147 ; GCN-LABEL: {{^}}f64_uno:
148 ; GCN: v_cmp_u_f64
149 define amdgpu_kernel void @f64_uno(i32 addrspace(1)* %out, double %a, double %b) #0 {
150 entry:
151   %tmp0 = fcmp uno double %a, %b
152   %tmp1 = sext i1 %tmp0 to i32
153   store i32 %tmp1, i32 addrspace(1)* %out
154   ret void
157 ;;;==========================================================================;;;
158 ;; 64-bit integer comparisons
159 ;;;==========================================================================;;;
161 ; GCN-LABEL: {{^}}i64_eq:
162 ; GCN: v_cmp_eq_u64
163 define amdgpu_kernel void @i64_eq(i32 addrspace(1)* %out, i64 %a, i64 %b) #0 {
164 entry:
165   %tmp0 = icmp eq i64 %a, %b
166   %tmp1 = sext i1 %tmp0 to i32
167   store i32 %tmp1, i32 addrspace(1)* %out
168   ret void
171 ; GCN-LABEL: {{^}}i64_ne:
172 ; GCN: v_cmp_ne_u64
173 define amdgpu_kernel void @i64_ne(i32 addrspace(1)* %out, i64 %a, i64 %b) #0 {
174 entry:
175   %tmp0 = icmp ne i64 %a, %b
176   %tmp1 = sext i1 %tmp0 to i32
177   store i32 %tmp1, i32 addrspace(1)* %out
178   ret void
181 ; GCN-LABEL: {{^}}i64_ugt:
182 ; GCN: v_cmp_gt_u64
183 define amdgpu_kernel void @i64_ugt(i32 addrspace(1)* %out, i64 %a, i64 %b) #0 {
184 entry:
185   %tmp0 = icmp ugt i64 %a, %b
186   %tmp1 = sext i1 %tmp0 to i32
187   store i32 %tmp1, i32 addrspace(1)* %out
188   ret void
191 ; GCN-LABEL: {{^}}i64_uge:
192 ; GCN: v_cmp_ge_u64
193 define amdgpu_kernel void @i64_uge(i32 addrspace(1)* %out, i64 %a, i64 %b) #0 {
194 entry:
195   %tmp0 = icmp uge i64 %a, %b
196   %tmp1 = sext i1 %tmp0 to i32
197   store i32 %tmp1, i32 addrspace(1)* %out
198   ret void
201 ; GCN-LABEL: {{^}}i64_ult:
202 ; GCN: v_cmp_lt_u64
203 define amdgpu_kernel void @i64_ult(i32 addrspace(1)* %out, i64 %a, i64 %b) #0 {
204 entry:
205   %tmp0 = icmp ult i64 %a, %b
206   %tmp1 = sext i1 %tmp0 to i32
207   store i32 %tmp1, i32 addrspace(1)* %out
208   ret void
211 ; GCN-LABEL: {{^}}i64_ule:
212 ; GCN: v_cmp_le_u64
213 define amdgpu_kernel void @i64_ule(i32 addrspace(1)* %out, i64 %a, i64 %b) #0 {
214 entry:
215   %tmp0 = icmp ule i64 %a, %b
216   %tmp1 = sext i1 %tmp0 to i32
217   store i32 %tmp1, i32 addrspace(1)* %out
218   ret void
221 ; GCN-LABEL: {{^}}i64_sgt:
222 ; GCN: v_cmp_gt_i64
223 define amdgpu_kernel void @i64_sgt(i32 addrspace(1)* %out, i64 %a, i64 %b) #0 {
224 entry:
225   %tmp0 = icmp sgt i64 %a, %b
226   %tmp1 = sext i1 %tmp0 to i32
227   store i32 %tmp1, i32 addrspace(1)* %out
228   ret void
231 ; GCN-LABEL: {{^}}i64_sge:
232 ; GCN: v_cmp_ge_i64
233 define amdgpu_kernel void @i64_sge(i32 addrspace(1)* %out, i64 %a, i64 %b) #0 {
234 entry:
235   %tmp0 = icmp sge i64 %a, %b
236   %tmp1 = sext i1 %tmp0 to i32
237   store i32 %tmp1, i32 addrspace(1)* %out
238   ret void
241 ; GCN-LABEL: {{^}}i64_slt:
242 ; GCN: v_cmp_lt_i64
243 define amdgpu_kernel void @i64_slt(i32 addrspace(1)* %out, i64 %a, i64 %b) #0 {
244 entry:
245   %tmp0 = icmp slt i64 %a, %b
246   %tmp1 = sext i1 %tmp0 to i32
247   store i32 %tmp1, i32 addrspace(1)* %out
248   ret void
251 ; GCN-LABEL: {{^}}i64_sle:
252 ; GCN: v_cmp_le_i64
253 define amdgpu_kernel void @i64_sle(i32 addrspace(1)* %out, i64 %a, i64 %b) #0 {
254 entry:
255   %tmp0 = icmp sle i64 %a, %b
256   %tmp1 = sext i1 %tmp0 to i32
257   store i32 %tmp1, i32 addrspace(1)* %out
258   ret void
261 attributes #0 = { nounwind }