xref: /aosp_15_r20/external/llvm/test/CodeGen/AMDGPU/setcc64.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker;RUN: llc < %s -march=amdgcn -mcpu=SI -verify-machineinstrs| FileCheck --check-prefix=SI --check-prefix=FUNC %s
2*9880d681SAndroid Build Coastguard Worker;RUN: llc < %s -march=amdgcn -mcpu=tonga -verify-machineinstrs| FileCheck --check-prefix=SI --check-prefix=FUNC %s
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Worker; XXX: Merge this into setcc, once R600 supports 64-bit operations
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Worker;;;==========================================================================;;;
7*9880d681SAndroid Build Coastguard Worker;; Double comparisons
8*9880d681SAndroid Build Coastguard Worker;;;==========================================================================;;;
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}f64_oeq:
11*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_eq_f64
12*9880d681SAndroid Build Coastguard Workerdefine void @f64_oeq(i32 addrspace(1)* %out, double %a, double %b) {
13*9880d681SAndroid Build Coastguard Workerentry:
14*9880d681SAndroid Build Coastguard Worker  %0 = fcmp oeq double %a, %b
15*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %0 to i32
16*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
17*9880d681SAndroid Build Coastguard Worker  ret void
18*9880d681SAndroid Build Coastguard Worker}
19*9880d681SAndroid Build Coastguard Worker
20*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}f64_ogt:
21*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_gt_f64
22*9880d681SAndroid Build Coastguard Workerdefine void @f64_ogt(i32 addrspace(1)* %out, double %a, double %b) {
23*9880d681SAndroid Build Coastguard Workerentry:
24*9880d681SAndroid Build Coastguard Worker  %0 = fcmp ogt double %a, %b
25*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %0 to i32
26*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
27*9880d681SAndroid Build Coastguard Worker  ret void
28*9880d681SAndroid Build Coastguard Worker}
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}f64_oge:
31*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_ge_f64
32*9880d681SAndroid Build Coastguard Workerdefine void @f64_oge(i32 addrspace(1)* %out, double %a, double %b) {
33*9880d681SAndroid Build Coastguard Workerentry:
34*9880d681SAndroid Build Coastguard Worker  %0 = fcmp oge double %a, %b
35*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %0 to i32
36*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
37*9880d681SAndroid Build Coastguard Worker  ret void
38*9880d681SAndroid Build Coastguard Worker}
39*9880d681SAndroid Build Coastguard Worker
40*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}f64_olt:
41*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_lt_f64
42*9880d681SAndroid Build Coastguard Workerdefine void @f64_olt(i32 addrspace(1)* %out, double %a, double %b) {
43*9880d681SAndroid Build Coastguard Workerentry:
44*9880d681SAndroid Build Coastguard Worker  %0 = fcmp olt double %a, %b
45*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %0 to i32
46*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
47*9880d681SAndroid Build Coastguard Worker  ret void
48*9880d681SAndroid Build Coastguard Worker}
49*9880d681SAndroid Build Coastguard Worker
50*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}f64_ole:
51*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_le_f64
52*9880d681SAndroid Build Coastguard Workerdefine void @f64_ole(i32 addrspace(1)* %out, double %a, double %b) {
53*9880d681SAndroid Build Coastguard Workerentry:
54*9880d681SAndroid Build Coastguard Worker  %0 = fcmp ole double %a, %b
55*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %0 to i32
56*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
57*9880d681SAndroid Build Coastguard Worker  ret void
58*9880d681SAndroid Build Coastguard Worker}
59*9880d681SAndroid Build Coastguard Worker
60*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}f64_one:
61*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_lg_f64_e32 vcc
62*9880d681SAndroid Build Coastguard Worker; SI: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, vcc
63*9880d681SAndroid Build Coastguard Workerdefine void @f64_one(i32 addrspace(1)* %out, double %a, double %b) {
64*9880d681SAndroid Build Coastguard Workerentry:
65*9880d681SAndroid Build Coastguard Worker  %0 = fcmp one double %a, %b
66*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %0 to i32
67*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
68*9880d681SAndroid Build Coastguard Worker  ret void
69*9880d681SAndroid Build Coastguard Worker}
70*9880d681SAndroid Build Coastguard Worker
71*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}f64_ord:
72*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_o_f64
73*9880d681SAndroid Build Coastguard Workerdefine void @f64_ord(i32 addrspace(1)* %out, double %a, double %b) {
74*9880d681SAndroid Build Coastguard Workerentry:
75*9880d681SAndroid Build Coastguard Worker  %0 = fcmp ord double %a, %b
76*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %0 to i32
77*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
78*9880d681SAndroid Build Coastguard Worker  ret void
79*9880d681SAndroid Build Coastguard Worker}
80*9880d681SAndroid Build Coastguard Worker
81*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}f64_ueq:
82*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_nlg_f64_e32 vcc
83*9880d681SAndroid Build Coastguard Worker; SI: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, vcc
84*9880d681SAndroid Build Coastguard Workerdefine void @f64_ueq(i32 addrspace(1)* %out, double %a, double %b) {
85*9880d681SAndroid Build Coastguard Workerentry:
86*9880d681SAndroid Build Coastguard Worker  %0 = fcmp ueq double %a, %b
87*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %0 to i32
88*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
89*9880d681SAndroid Build Coastguard Worker  ret void
90*9880d681SAndroid Build Coastguard Worker}
91*9880d681SAndroid Build Coastguard Worker
92*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}f64_ugt:
93*9880d681SAndroid Build Coastguard Worker
94*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_nle_f64_e32 vcc
95*9880d681SAndroid Build Coastguard Worker; SI: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, vcc
96*9880d681SAndroid Build Coastguard Workerdefine void @f64_ugt(i32 addrspace(1)* %out, double %a, double %b) {
97*9880d681SAndroid Build Coastguard Workerentry:
98*9880d681SAndroid Build Coastguard Worker  %0 = fcmp ugt double %a, %b
99*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %0 to i32
100*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
101*9880d681SAndroid Build Coastguard Worker  ret void
102*9880d681SAndroid Build Coastguard Worker}
103*9880d681SAndroid Build Coastguard Worker
104*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}f64_uge:
105*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_nlt_f64_e32 vcc
106*9880d681SAndroid Build Coastguard Worker; SI: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, vcc
107*9880d681SAndroid Build Coastguard Workerdefine void @f64_uge(i32 addrspace(1)* %out, double %a, double %b) {
108*9880d681SAndroid Build Coastguard Workerentry:
109*9880d681SAndroid Build Coastguard Worker  %0 = fcmp uge double %a, %b
110*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %0 to i32
111*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
112*9880d681SAndroid Build Coastguard Worker  ret void
113*9880d681SAndroid Build Coastguard Worker}
114*9880d681SAndroid Build Coastguard Worker
115*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}f64_ult:
116*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_nge_f64_e32 vcc
117*9880d681SAndroid Build Coastguard Worker; SI: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, vcc
118*9880d681SAndroid Build Coastguard Workerdefine void @f64_ult(i32 addrspace(1)* %out, double %a, double %b) {
119*9880d681SAndroid Build Coastguard Workerentry:
120*9880d681SAndroid Build Coastguard Worker  %0 = fcmp ult double %a, %b
121*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %0 to i32
122*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
123*9880d681SAndroid Build Coastguard Worker  ret void
124*9880d681SAndroid Build Coastguard Worker}
125*9880d681SAndroid Build Coastguard Worker
126*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}f64_ule:
127*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_ngt_f64_e32 vcc
128*9880d681SAndroid Build Coastguard Worker; SI: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, vcc
129*9880d681SAndroid Build Coastguard Workerdefine void @f64_ule(i32 addrspace(1)* %out, double %a, double %b) {
130*9880d681SAndroid Build Coastguard Workerentry:
131*9880d681SAndroid Build Coastguard Worker  %0 = fcmp ule double %a, %b
132*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %0 to i32
133*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
134*9880d681SAndroid Build Coastguard Worker  ret void
135*9880d681SAndroid Build Coastguard Worker}
136*9880d681SAndroid Build Coastguard Worker
137*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}f64_une:
138*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_neq_f64
139*9880d681SAndroid Build Coastguard Workerdefine void @f64_une(i32 addrspace(1)* %out, double %a, double %b) {
140*9880d681SAndroid Build Coastguard Workerentry:
141*9880d681SAndroid Build Coastguard Worker  %0 = fcmp une double %a, %b
142*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %0 to i32
143*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
144*9880d681SAndroid Build Coastguard Worker  ret void
145*9880d681SAndroid Build Coastguard Worker}
146*9880d681SAndroid Build Coastguard Worker
147*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}f64_uno:
148*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_u_f64
149*9880d681SAndroid Build Coastguard Workerdefine void @f64_uno(i32 addrspace(1)* %out, double %a, double %b) {
150*9880d681SAndroid Build Coastguard Workerentry:
151*9880d681SAndroid Build Coastguard Worker  %0 = fcmp uno double %a, %b
152*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %0 to i32
153*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
154*9880d681SAndroid Build Coastguard Worker  ret void
155*9880d681SAndroid Build Coastguard Worker}
156*9880d681SAndroid Build Coastguard Worker
157*9880d681SAndroid Build Coastguard Worker;;;==========================================================================;;;
158*9880d681SAndroid Build Coastguard Worker;; 64-bit integer comparisons
159*9880d681SAndroid Build Coastguard Worker;;;==========================================================================;;;
160*9880d681SAndroid Build Coastguard Worker
161*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}i64_eq:
162*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_eq_i64
163*9880d681SAndroid Build Coastguard Workerdefine void @i64_eq(i32 addrspace(1)* %out, i64 %a, i64 %b) {
164*9880d681SAndroid Build Coastguard Workerentry:
165*9880d681SAndroid Build Coastguard Worker  %0 = icmp eq i64 %a, %b
166*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %0 to i32
167*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
168*9880d681SAndroid Build Coastguard Worker  ret void
169*9880d681SAndroid Build Coastguard Worker}
170*9880d681SAndroid Build Coastguard Worker
171*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}i64_ne:
172*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_ne_i64
173*9880d681SAndroid Build Coastguard Workerdefine void @i64_ne(i32 addrspace(1)* %out, i64 %a, i64 %b) {
174*9880d681SAndroid Build Coastguard Workerentry:
175*9880d681SAndroid Build Coastguard Worker  %0 = icmp ne i64 %a, %b
176*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %0 to i32
177*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
178*9880d681SAndroid Build Coastguard Worker  ret void
179*9880d681SAndroid Build Coastguard Worker}
180*9880d681SAndroid Build Coastguard Worker
181*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}i64_ugt:
182*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_gt_u64
183*9880d681SAndroid Build Coastguard Workerdefine void @i64_ugt(i32 addrspace(1)* %out, i64 %a, i64 %b) {
184*9880d681SAndroid Build Coastguard Workerentry:
185*9880d681SAndroid Build Coastguard Worker  %0 = icmp ugt i64 %a, %b
186*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %0 to i32
187*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
188*9880d681SAndroid Build Coastguard Worker  ret void
189*9880d681SAndroid Build Coastguard Worker}
190*9880d681SAndroid Build Coastguard Worker
191*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}i64_uge:
192*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_ge_u64
193*9880d681SAndroid Build Coastguard Workerdefine void @i64_uge(i32 addrspace(1)* %out, i64 %a, i64 %b) {
194*9880d681SAndroid Build Coastguard Workerentry:
195*9880d681SAndroid Build Coastguard Worker  %0 = icmp uge i64 %a, %b
196*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %0 to i32
197*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
198*9880d681SAndroid Build Coastguard Worker  ret void
199*9880d681SAndroid Build Coastguard Worker}
200*9880d681SAndroid Build Coastguard Worker
201*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}i64_ult:
202*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_lt_u64
203*9880d681SAndroid Build Coastguard Workerdefine void @i64_ult(i32 addrspace(1)* %out, i64 %a, i64 %b) {
204*9880d681SAndroid Build Coastguard Workerentry:
205*9880d681SAndroid Build Coastguard Worker  %0 = icmp ult i64 %a, %b
206*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %0 to i32
207*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
208*9880d681SAndroid Build Coastguard Worker  ret void
209*9880d681SAndroid Build Coastguard Worker}
210*9880d681SAndroid Build Coastguard Worker
211*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}i64_ule:
212*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_le_u64
213*9880d681SAndroid Build Coastguard Workerdefine void @i64_ule(i32 addrspace(1)* %out, i64 %a, i64 %b) {
214*9880d681SAndroid Build Coastguard Workerentry:
215*9880d681SAndroid Build Coastguard Worker  %0 = icmp ule i64 %a, %b
216*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %0 to i32
217*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
218*9880d681SAndroid Build Coastguard Worker  ret void
219*9880d681SAndroid Build Coastguard Worker}
220*9880d681SAndroid Build Coastguard Worker
221*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}i64_sgt:
222*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_gt_i64
223*9880d681SAndroid Build Coastguard Workerdefine void @i64_sgt(i32 addrspace(1)* %out, i64 %a, i64 %b) {
224*9880d681SAndroid Build Coastguard Workerentry:
225*9880d681SAndroid Build Coastguard Worker  %0 = icmp sgt i64 %a, %b
226*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %0 to i32
227*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
228*9880d681SAndroid Build Coastguard Worker  ret void
229*9880d681SAndroid Build Coastguard Worker}
230*9880d681SAndroid Build Coastguard Worker
231*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}i64_sge:
232*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_ge_i64
233*9880d681SAndroid Build Coastguard Workerdefine void @i64_sge(i32 addrspace(1)* %out, i64 %a, i64 %b) {
234*9880d681SAndroid Build Coastguard Workerentry:
235*9880d681SAndroid Build Coastguard Worker  %0 = icmp sge i64 %a, %b
236*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %0 to i32
237*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
238*9880d681SAndroid Build Coastguard Worker  ret void
239*9880d681SAndroid Build Coastguard Worker}
240*9880d681SAndroid Build Coastguard Worker
241*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}i64_slt:
242*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_lt_i64
243*9880d681SAndroid Build Coastguard Workerdefine void @i64_slt(i32 addrspace(1)* %out, i64 %a, i64 %b) {
244*9880d681SAndroid Build Coastguard Workerentry:
245*9880d681SAndroid Build Coastguard Worker  %0 = icmp slt i64 %a, %b
246*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %0 to i32
247*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
248*9880d681SAndroid Build Coastguard Worker  ret void
249*9880d681SAndroid Build Coastguard Worker}
250*9880d681SAndroid Build Coastguard Worker
251*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}i64_sle:
252*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_le_i64
253*9880d681SAndroid Build Coastguard Workerdefine void @i64_sle(i32 addrspace(1)* %out, i64 %a, i64 %b) {
254*9880d681SAndroid Build Coastguard Workerentry:
255*9880d681SAndroid Build Coastguard Worker  %0 = icmp sle i64 %a, %b
256*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %0 to i32
257*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
258*9880d681SAndroid Build Coastguard Worker  ret void
259*9880d681SAndroid Build Coastguard Worker}
260