xref: /aosp_15_r20/external/llvm/test/CodeGen/AMDGPU/setcc.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=amdgcn -verify-machineinstrs | FileCheck -check-prefix=SI -check-prefix=FUNC %s
2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=r600 -mcpu=redwood | FileCheck --check-prefix=R600 --check-prefix=FUNC %s
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.r600.read.tidig.x() nounwind readnone
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}setcc_v2i32:
7*9880d681SAndroid Build Coastguard Worker; R600-DAG: SETE_INT * T{{[0-9]+\.[XYZW]}}, KC0[3].X, KC0[3].Z
8*9880d681SAndroid Build Coastguard Worker; R600-DAG: SETE_INT * T{{[0-9]+\.[XYZW]}}, KC0[2].W, KC0[3].Y
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Workerdefine void @setcc_v2i32(<2 x i32> addrspace(1)* %out, <2 x i32> %a, <2 x i32> %b) {
11*9880d681SAndroid Build Coastguard Worker  %result = icmp eq <2 x i32> %a, %b
12*9880d681SAndroid Build Coastguard Worker  %sext = sext <2 x i1> %result to <2 x i32>
13*9880d681SAndroid Build Coastguard Worker  store <2 x i32> %sext, <2 x i32> addrspace(1)* %out
14*9880d681SAndroid Build Coastguard Worker  ret void
15*9880d681SAndroid Build Coastguard Worker}
16*9880d681SAndroid Build Coastguard Worker
17*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}setcc_v4i32:
18*9880d681SAndroid Build Coastguard Worker; R600-DAG: SETE_INT * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
19*9880d681SAndroid Build Coastguard Worker; R600-DAG: SETE_INT * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
20*9880d681SAndroid Build Coastguard Worker; R600-DAG: SETE_INT * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
21*9880d681SAndroid Build Coastguard Worker; R600-DAG: SETE_INT * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
22*9880d681SAndroid Build Coastguard Worker
23*9880d681SAndroid Build Coastguard Workerdefine void @setcc_v4i32(<4 x i32> addrspace(1)* %out, <4 x i32> addrspace(1)* %in) {
24*9880d681SAndroid Build Coastguard Worker  %b_ptr = getelementptr <4 x i32>, <4 x i32> addrspace(1)* %in, i32 1
25*9880d681SAndroid Build Coastguard Worker  %a = load <4 x i32>, <4 x i32> addrspace(1) * %in
26*9880d681SAndroid Build Coastguard Worker  %b = load <4 x i32>, <4 x i32> addrspace(1) * %b_ptr
27*9880d681SAndroid Build Coastguard Worker  %result = icmp eq <4 x i32> %a, %b
28*9880d681SAndroid Build Coastguard Worker  %sext = sext <4 x i1> %result to <4 x i32>
29*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %sext, <4 x i32> addrspace(1)* %out
30*9880d681SAndroid Build Coastguard Worker  ret void
31*9880d681SAndroid Build Coastguard Worker}
32*9880d681SAndroid Build Coastguard Worker
33*9880d681SAndroid Build Coastguard Worker;;;==========================================================================;;;
34*9880d681SAndroid Build Coastguard Worker;; Float comparisons
35*9880d681SAndroid Build Coastguard Worker;;;==========================================================================;;;
36*9880d681SAndroid Build Coastguard Worker
37*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}f32_oeq:
38*9880d681SAndroid Build Coastguard Worker; R600: SETE_DX10
39*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_eq_f32
40*9880d681SAndroid Build Coastguard Workerdefine void @f32_oeq(i32 addrspace(1)* %out, float %a, float %b) {
41*9880d681SAndroid Build Coastguard Workerentry:
42*9880d681SAndroid Build Coastguard Worker  %0 = fcmp oeq float %a, %b
43*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %0 to i32
44*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
45*9880d681SAndroid Build Coastguard Worker  ret void
46*9880d681SAndroid Build Coastguard Worker}
47*9880d681SAndroid Build Coastguard Worker
48*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}f32_ogt:
49*9880d681SAndroid Build Coastguard Worker; R600: SETGT_DX10
50*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_gt_f32
51*9880d681SAndroid Build Coastguard Workerdefine void @f32_ogt(i32 addrspace(1)* %out, float %a, float %b) {
52*9880d681SAndroid Build Coastguard Workerentry:
53*9880d681SAndroid Build Coastguard Worker  %0 = fcmp ogt float %a, %b
54*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %0 to i32
55*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
56*9880d681SAndroid Build Coastguard Worker  ret void
57*9880d681SAndroid Build Coastguard Worker}
58*9880d681SAndroid Build Coastguard Worker
59*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}f32_oge:
60*9880d681SAndroid Build Coastguard Worker; R600: SETGE_DX10
61*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_ge_f32
62*9880d681SAndroid Build Coastguard Workerdefine void @f32_oge(i32 addrspace(1)* %out, float %a, float %b) {
63*9880d681SAndroid Build Coastguard Workerentry:
64*9880d681SAndroid Build Coastguard Worker  %0 = fcmp oge float %a, %b
65*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %0 to i32
66*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
67*9880d681SAndroid Build Coastguard Worker  ret void
68*9880d681SAndroid Build Coastguard Worker}
69*9880d681SAndroid Build Coastguard Worker
70*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}f32_olt:
71*9880d681SAndroid Build Coastguard Worker; R600: SETGT_DX10
72*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_lt_f32
73*9880d681SAndroid Build Coastguard Workerdefine void @f32_olt(i32 addrspace(1)* %out, float %a, float %b) {
74*9880d681SAndroid Build Coastguard Workerentry:
75*9880d681SAndroid Build Coastguard Worker  %0 = fcmp olt float %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: {{^}}f32_ole:
82*9880d681SAndroid Build Coastguard Worker; R600: SETGE_DX10
83*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_le_f32
84*9880d681SAndroid Build Coastguard Workerdefine void @f32_ole(i32 addrspace(1)* %out, float %a, float %b) {
85*9880d681SAndroid Build Coastguard Workerentry:
86*9880d681SAndroid Build Coastguard Worker  %0 = fcmp ole float %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: {{^}}f32_one:
93*9880d681SAndroid Build Coastguard Worker; R600-DAG: SETE_DX10
94*9880d681SAndroid Build Coastguard Worker; R600-DAG: SETE_DX10
95*9880d681SAndroid Build Coastguard Worker; R600-DAG: AND_INT
96*9880d681SAndroid Build Coastguard Worker; R600-DAG: SETNE_DX10
97*9880d681SAndroid Build Coastguard Worker; R600-DAG: AND_INT
98*9880d681SAndroid Build Coastguard Worker; R600-DAG: SETNE_INT
99*9880d681SAndroid Build Coastguard Worker
100*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_lg_f32_e32 vcc
101*9880d681SAndroid Build Coastguard Worker; SI-NEXT: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, vcc
102*9880d681SAndroid Build Coastguard Workerdefine void @f32_one(i32 addrspace(1)* %out, float %a, float %b) {
103*9880d681SAndroid Build Coastguard Workerentry:
104*9880d681SAndroid Build Coastguard Worker  %0 = fcmp one float %a, %b
105*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %0 to i32
106*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
107*9880d681SAndroid Build Coastguard Worker  ret void
108*9880d681SAndroid Build Coastguard Worker}
109*9880d681SAndroid Build Coastguard Worker
110*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}f32_ord:
111*9880d681SAndroid Build Coastguard Worker; R600-DAG: SETE_DX10
112*9880d681SAndroid Build Coastguard Worker; R600-DAG: SETE_DX10
113*9880d681SAndroid Build Coastguard Worker; R600-DAG: AND_INT
114*9880d681SAndroid Build Coastguard Worker; R600-DAG: SETNE_INT
115*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_o_f32
116*9880d681SAndroid Build Coastguard Workerdefine void @f32_ord(i32 addrspace(1)* %out, float %a, float %b) {
117*9880d681SAndroid Build Coastguard Workerentry:
118*9880d681SAndroid Build Coastguard Worker  %0 = fcmp ord float %a, %b
119*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %0 to i32
120*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
121*9880d681SAndroid Build Coastguard Worker  ret void
122*9880d681SAndroid Build Coastguard Worker}
123*9880d681SAndroid Build Coastguard Worker
124*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}f32_ueq:
125*9880d681SAndroid Build Coastguard Worker; R600-DAG: SETNE_DX10
126*9880d681SAndroid Build Coastguard Worker; R600-DAG: SETNE_DX10
127*9880d681SAndroid Build Coastguard Worker; R600-DAG: OR_INT
128*9880d681SAndroid Build Coastguard Worker; R600-DAG: SETE_DX10
129*9880d681SAndroid Build Coastguard Worker; R600-DAG: OR_INT
130*9880d681SAndroid Build Coastguard Worker; R600-DAG: SETNE_INT
131*9880d681SAndroid Build Coastguard Worker
132*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_nlg_f32_e32 vcc
133*9880d681SAndroid Build Coastguard Worker; SI-NEXT: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, vcc
134*9880d681SAndroid Build Coastguard Workerdefine void @f32_ueq(i32 addrspace(1)* %out, float %a, float %b) {
135*9880d681SAndroid Build Coastguard Workerentry:
136*9880d681SAndroid Build Coastguard Worker  %0 = fcmp ueq float %a, %b
137*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %0 to i32
138*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
139*9880d681SAndroid Build Coastguard Worker  ret void
140*9880d681SAndroid Build Coastguard Worker}
141*9880d681SAndroid Build Coastguard Worker
142*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}f32_ugt:
143*9880d681SAndroid Build Coastguard Worker; R600: SETGE
144*9880d681SAndroid Build Coastguard Worker; R600: SETE_DX10
145*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_nle_f32_e32 vcc
146*9880d681SAndroid Build Coastguard Worker; SI-NEXT: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, vcc
147*9880d681SAndroid Build Coastguard Workerdefine void @f32_ugt(i32 addrspace(1)* %out, float %a, float %b) {
148*9880d681SAndroid Build Coastguard Workerentry:
149*9880d681SAndroid Build Coastguard Worker  %0 = fcmp ugt float %a, %b
150*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %0 to i32
151*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
152*9880d681SAndroid Build Coastguard Worker  ret void
153*9880d681SAndroid Build Coastguard Worker}
154*9880d681SAndroid Build Coastguard Worker
155*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}f32_uge:
156*9880d681SAndroid Build Coastguard Worker; R600: SETGT
157*9880d681SAndroid Build Coastguard Worker; R600: SETE_DX10
158*9880d681SAndroid Build Coastguard Worker
159*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_nlt_f32_e32 vcc
160*9880d681SAndroid Build Coastguard Worker; SI-NEXT: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, vcc
161*9880d681SAndroid Build Coastguard Workerdefine void @f32_uge(i32 addrspace(1)* %out, float %a, float %b) {
162*9880d681SAndroid Build Coastguard Workerentry:
163*9880d681SAndroid Build Coastguard Worker  %0 = fcmp uge float %a, %b
164*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %0 to i32
165*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
166*9880d681SAndroid Build Coastguard Worker  ret void
167*9880d681SAndroid Build Coastguard Worker}
168*9880d681SAndroid Build Coastguard Worker
169*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}f32_ult:
170*9880d681SAndroid Build Coastguard Worker; R600: SETGE
171*9880d681SAndroid Build Coastguard Worker; R600: SETE_DX10
172*9880d681SAndroid Build Coastguard Worker
173*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_nge_f32_e32 vcc
174*9880d681SAndroid Build Coastguard Worker; SI-NEXT: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, vcc
175*9880d681SAndroid Build Coastguard Workerdefine void @f32_ult(i32 addrspace(1)* %out, float %a, float %b) {
176*9880d681SAndroid Build Coastguard Workerentry:
177*9880d681SAndroid Build Coastguard Worker  %0 = fcmp ult float %a, %b
178*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %0 to i32
179*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
180*9880d681SAndroid Build Coastguard Worker  ret void
181*9880d681SAndroid Build Coastguard Worker}
182*9880d681SAndroid Build Coastguard Worker
183*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}f32_ule:
184*9880d681SAndroid Build Coastguard Worker; R600: SETGT
185*9880d681SAndroid Build Coastguard Worker; R600: SETE_DX10
186*9880d681SAndroid Build Coastguard Worker
187*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_ngt_f32_e32 vcc
188*9880d681SAndroid Build Coastguard Worker; SI-NEXT: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, vcc
189*9880d681SAndroid Build Coastguard Workerdefine void @f32_ule(i32 addrspace(1)* %out, float %a, float %b) {
190*9880d681SAndroid Build Coastguard Workerentry:
191*9880d681SAndroid Build Coastguard Worker  %0 = fcmp ule float %a, %b
192*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %0 to i32
193*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
194*9880d681SAndroid Build Coastguard Worker  ret void
195*9880d681SAndroid Build Coastguard Worker}
196*9880d681SAndroid Build Coastguard Worker
197*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}f32_une:
198*9880d681SAndroid Build Coastguard Worker; R600: SETNE_DX10
199*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_neq_f32
200*9880d681SAndroid Build Coastguard Workerdefine void @f32_une(i32 addrspace(1)* %out, float %a, float %b) {
201*9880d681SAndroid Build Coastguard Workerentry:
202*9880d681SAndroid Build Coastguard Worker  %0 = fcmp une float %a, %b
203*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %0 to i32
204*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
205*9880d681SAndroid Build Coastguard Worker  ret void
206*9880d681SAndroid Build Coastguard Worker}
207*9880d681SAndroid Build Coastguard Worker
208*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}f32_uno:
209*9880d681SAndroid Build Coastguard Worker; R600: SETNE_DX10
210*9880d681SAndroid Build Coastguard Worker; R600: SETNE_DX10
211*9880d681SAndroid Build Coastguard Worker; R600: OR_INT
212*9880d681SAndroid Build Coastguard Worker; R600: SETNE_INT
213*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_u_f32
214*9880d681SAndroid Build Coastguard Workerdefine void @f32_uno(i32 addrspace(1)* %out, float %a, float %b) {
215*9880d681SAndroid Build Coastguard Workerentry:
216*9880d681SAndroid Build Coastguard Worker  %0 = fcmp uno float %a, %b
217*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %0 to i32
218*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
219*9880d681SAndroid Build Coastguard Worker  ret void
220*9880d681SAndroid Build Coastguard Worker}
221*9880d681SAndroid Build Coastguard Worker
222*9880d681SAndroid Build Coastguard Worker;;;==========================================================================;;;
223*9880d681SAndroid Build Coastguard Worker;; 32-bit integer comparisons
224*9880d681SAndroid Build Coastguard Worker;;;==========================================================================;;;
225*9880d681SAndroid Build Coastguard Worker
226*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}i32_eq:
227*9880d681SAndroid Build Coastguard Worker; R600: SETE_INT
228*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_eq_i32
229*9880d681SAndroid Build Coastguard Workerdefine void @i32_eq(i32 addrspace(1)* %out, i32 %a, i32 %b) {
230*9880d681SAndroid Build Coastguard Workerentry:
231*9880d681SAndroid Build Coastguard Worker  %0 = icmp eq i32 %a, %b
232*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %0 to i32
233*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
234*9880d681SAndroid Build Coastguard Worker  ret void
235*9880d681SAndroid Build Coastguard Worker}
236*9880d681SAndroid Build Coastguard Worker
237*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}i32_ne:
238*9880d681SAndroid Build Coastguard Worker; R600: SETNE_INT
239*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_ne_i32
240*9880d681SAndroid Build Coastguard Workerdefine void @i32_ne(i32 addrspace(1)* %out, i32 %a, i32 %b) {
241*9880d681SAndroid Build Coastguard Workerentry:
242*9880d681SAndroid Build Coastguard Worker  %0 = icmp ne i32 %a, %b
243*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %0 to i32
244*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
245*9880d681SAndroid Build Coastguard Worker  ret void
246*9880d681SAndroid Build Coastguard Worker}
247*9880d681SAndroid Build Coastguard Worker
248*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}i32_ugt:
249*9880d681SAndroid Build Coastguard Worker; R600: SETGT_UINT
250*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_gt_u32
251*9880d681SAndroid Build Coastguard Workerdefine void @i32_ugt(i32 addrspace(1)* %out, i32 %a, i32 %b) {
252*9880d681SAndroid Build Coastguard Workerentry:
253*9880d681SAndroid Build Coastguard Worker  %0 = icmp ugt i32 %a, %b
254*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %0 to i32
255*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
256*9880d681SAndroid Build Coastguard Worker  ret void
257*9880d681SAndroid Build Coastguard Worker}
258*9880d681SAndroid Build Coastguard Worker
259*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}i32_uge:
260*9880d681SAndroid Build Coastguard Worker; R600: SETGE_UINT
261*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_ge_u32
262*9880d681SAndroid Build Coastguard Workerdefine void @i32_uge(i32 addrspace(1)* %out, i32 %a, i32 %b) {
263*9880d681SAndroid Build Coastguard Workerentry:
264*9880d681SAndroid Build Coastguard Worker  %0 = icmp uge i32 %a, %b
265*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %0 to i32
266*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
267*9880d681SAndroid Build Coastguard Worker  ret void
268*9880d681SAndroid Build Coastguard Worker}
269*9880d681SAndroid Build Coastguard Worker
270*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}i32_ult:
271*9880d681SAndroid Build Coastguard Worker; R600: SETGT_UINT
272*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_lt_u32
273*9880d681SAndroid Build Coastguard Workerdefine void @i32_ult(i32 addrspace(1)* %out, i32 %a, i32 %b) {
274*9880d681SAndroid Build Coastguard Workerentry:
275*9880d681SAndroid Build Coastguard Worker  %0 = icmp ult i32 %a, %b
276*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %0 to i32
277*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
278*9880d681SAndroid Build Coastguard Worker  ret void
279*9880d681SAndroid Build Coastguard Worker}
280*9880d681SAndroid Build Coastguard Worker
281*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}i32_ule:
282*9880d681SAndroid Build Coastguard Worker; R600: SETGE_UINT
283*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_le_u32
284*9880d681SAndroid Build Coastguard Workerdefine void @i32_ule(i32 addrspace(1)* %out, i32 %a, i32 %b) {
285*9880d681SAndroid Build Coastguard Workerentry:
286*9880d681SAndroid Build Coastguard Worker  %0 = icmp ule i32 %a, %b
287*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %0 to i32
288*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
289*9880d681SAndroid Build Coastguard Worker  ret void
290*9880d681SAndroid Build Coastguard Worker}
291*9880d681SAndroid Build Coastguard Worker
292*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}i32_sgt:
293*9880d681SAndroid Build Coastguard Worker; R600: SETGT_INT
294*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_gt_i32
295*9880d681SAndroid Build Coastguard Workerdefine void @i32_sgt(i32 addrspace(1)* %out, i32 %a, i32 %b) {
296*9880d681SAndroid Build Coastguard Workerentry:
297*9880d681SAndroid Build Coastguard Worker  %0 = icmp sgt i32 %a, %b
298*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %0 to i32
299*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
300*9880d681SAndroid Build Coastguard Worker  ret void
301*9880d681SAndroid Build Coastguard Worker}
302*9880d681SAndroid Build Coastguard Worker
303*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}i32_sge:
304*9880d681SAndroid Build Coastguard Worker; R600: SETGE_INT
305*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_ge_i32
306*9880d681SAndroid Build Coastguard Workerdefine void @i32_sge(i32 addrspace(1)* %out, i32 %a, i32 %b) {
307*9880d681SAndroid Build Coastguard Workerentry:
308*9880d681SAndroid Build Coastguard Worker  %0 = icmp sge i32 %a, %b
309*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %0 to i32
310*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
311*9880d681SAndroid Build Coastguard Worker  ret void
312*9880d681SAndroid Build Coastguard Worker}
313*9880d681SAndroid Build Coastguard Worker
314*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}i32_slt:
315*9880d681SAndroid Build Coastguard Worker; R600: SETGT_INT
316*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_lt_i32
317*9880d681SAndroid Build Coastguard Workerdefine void @i32_slt(i32 addrspace(1)* %out, i32 %a, i32 %b) {
318*9880d681SAndroid Build Coastguard Workerentry:
319*9880d681SAndroid Build Coastguard Worker  %0 = icmp slt i32 %a, %b
320*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %0 to i32
321*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
322*9880d681SAndroid Build Coastguard Worker  ret void
323*9880d681SAndroid Build Coastguard Worker}
324*9880d681SAndroid Build Coastguard Worker
325*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}i32_sle:
326*9880d681SAndroid Build Coastguard Worker; R600: SETGE_INT
327*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_le_i32
328*9880d681SAndroid Build Coastguard Workerdefine void @i32_sle(i32 addrspace(1)* %out, i32 %a, i32 %b) {
329*9880d681SAndroid Build Coastguard Workerentry:
330*9880d681SAndroid Build Coastguard Worker  %0 = icmp sle i32 %a, %b
331*9880d681SAndroid Build Coastguard Worker  %1 = sext i1 %0 to i32
332*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
333*9880d681SAndroid Build Coastguard Worker  ret void
334*9880d681SAndroid Build Coastguard Worker}
335*9880d681SAndroid Build Coastguard Worker
336*9880d681SAndroid Build Coastguard Worker; FIXME: This does 4 compares
337*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}v3i32_eq:
338*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_cmp_eq_i32
339*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1,
340*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_cmp_eq_i32
341*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1,
342*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_cmp_eq_i32
343*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1,
344*9880d681SAndroid Build Coastguard Worker; SI: s_endpgm
345*9880d681SAndroid Build Coastguard Workerdefine void @v3i32_eq(<3 x i32> addrspace(1)* %out, <3 x i32> addrspace(1)* %ptra, <3 x i32> addrspace(1)* %ptrb) {
346*9880d681SAndroid Build Coastguard Worker  %tid = call i32 @llvm.r600.read.tidig.x() nounwind readnone
347*9880d681SAndroid Build Coastguard Worker  %gep.a = getelementptr <3 x i32>, <3 x i32> addrspace(1)* %ptra, i32 %tid
348*9880d681SAndroid Build Coastguard Worker  %gep.b = getelementptr <3 x i32>, <3 x i32> addrspace(1)* %ptrb, i32 %tid
349*9880d681SAndroid Build Coastguard Worker  %gep.out = getelementptr <3 x i32>, <3 x i32> addrspace(1)* %out, i32 %tid
350*9880d681SAndroid Build Coastguard Worker  %a = load <3 x i32>, <3 x i32> addrspace(1)* %gep.a
351*9880d681SAndroid Build Coastguard Worker  %b = load <3 x i32>, <3 x i32> addrspace(1)* %gep.b
352*9880d681SAndroid Build Coastguard Worker  %cmp = icmp eq <3 x i32> %a, %b
353*9880d681SAndroid Build Coastguard Worker  %ext = sext <3 x i1> %cmp to <3 x i32>
354*9880d681SAndroid Build Coastguard Worker  store <3 x i32> %ext, <3 x i32> addrspace(1)* %gep.out
355*9880d681SAndroid Build Coastguard Worker  ret void
356*9880d681SAndroid Build Coastguard Worker}
357*9880d681SAndroid Build Coastguard Worker
358*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}v3i8_eq:
359*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_cmp_eq_i32
360*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1,
361*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_cmp_eq_i32
362*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1,
363*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_cmp_eq_i32
364*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1,
365*9880d681SAndroid Build Coastguard Worker; SI: s_endpgm
366*9880d681SAndroid Build Coastguard Workerdefine void @v3i8_eq(<3 x i8> addrspace(1)* %out, <3 x i8> addrspace(1)* %ptra, <3 x i8> addrspace(1)* %ptrb) {
367*9880d681SAndroid Build Coastguard Worker  %tid = call i32 @llvm.r600.read.tidig.x() nounwind readnone
368*9880d681SAndroid Build Coastguard Worker  %gep.a = getelementptr <3 x i8>, <3 x i8> addrspace(1)* %ptra, i32 %tid
369*9880d681SAndroid Build Coastguard Worker  %gep.b = getelementptr <3 x i8>, <3 x i8> addrspace(1)* %ptrb, i32 %tid
370*9880d681SAndroid Build Coastguard Worker  %gep.out = getelementptr <3 x i8>, <3 x i8> addrspace(1)* %out, i32 %tid
371*9880d681SAndroid Build Coastguard Worker  %a = load <3 x i8>, <3 x i8> addrspace(1)* %gep.a
372*9880d681SAndroid Build Coastguard Worker  %b = load <3 x i8>, <3 x i8> addrspace(1)* %gep.b
373*9880d681SAndroid Build Coastguard Worker  %cmp = icmp eq <3 x i8> %a, %b
374*9880d681SAndroid Build Coastguard Worker  %ext = sext <3 x i1> %cmp to <3 x i8>
375*9880d681SAndroid Build Coastguard Worker  store <3 x i8> %ext, <3 x i8> addrspace(1)* %gep.out
376*9880d681SAndroid Build Coastguard Worker  ret void
377*9880d681SAndroid Build Coastguard Worker}
378*9880d681SAndroid Build Coastguard Worker
379*9880d681SAndroid Build Coastguard Worker; Make sure we don't try to emit i1 setcc ops
380*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: setcc-i1
381*9880d681SAndroid Build Coastguard Worker; SI: s_and_b32 [[AND:s[0-9]+]], s{{[0-9]+}}, 1
382*9880d681SAndroid Build Coastguard Worker; SI: s_cmp_eq_i32 [[AND]], 0
383*9880d681SAndroid Build Coastguard Workerdefine void @setcc-i1(i32 %in) {
384*9880d681SAndroid Build Coastguard Worker  %and = and i32 %in, 1
385*9880d681SAndroid Build Coastguard Worker  %cmp = icmp eq i32 %and, 0
386*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %endif, label %if
387*9880d681SAndroid Build Coastguard Workerif:
388*9880d681SAndroid Build Coastguard Worker  unreachable
389*9880d681SAndroid Build Coastguard Workerendif:
390*9880d681SAndroid Build Coastguard Worker  ret void
391*9880d681SAndroid Build Coastguard Worker}
392*9880d681SAndroid Build Coastguard Worker
393*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: setcc-i1-and-xor
394*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_cmp_le_f32_e64 [[A:s\[[0-9]+:[0-9]+\]]], 0, s{{[0-9]+}}
395*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_cmp_ge_f32_e64 [[B:s\[[0-9]+:[0-9]+\]]], 1.0, s{{[0-9]+}}
396*9880d681SAndroid Build Coastguard Worker; SI: s_and_b64 s[2:3], [[A]], [[B]]
397*9880d681SAndroid Build Coastguard Workerdefine void @setcc-i1-and-xor(i32 addrspace(1)* %out, float %cond) #0 {
398*9880d681SAndroid Build Coastguard Workerbb0:
399*9880d681SAndroid Build Coastguard Worker  %tmp5 = fcmp oge float %cond, 0.000000e+00
400*9880d681SAndroid Build Coastguard Worker  %tmp7 = fcmp ole float %cond, 1.000000e+00
401*9880d681SAndroid Build Coastguard Worker  %tmp9 = and i1 %tmp5, %tmp7
402*9880d681SAndroid Build Coastguard Worker  %tmp11 = xor i1 %tmp9, 1
403*9880d681SAndroid Build Coastguard Worker  br i1 %tmp11, label %bb2, label %bb1
404*9880d681SAndroid Build Coastguard Worker
405*9880d681SAndroid Build Coastguard Workerbb1:
406*9880d681SAndroid Build Coastguard Worker  store i32 0, i32 addrspace(1)* %out
407*9880d681SAndroid Build Coastguard Worker  br label %bb2
408*9880d681SAndroid Build Coastguard Worker
409*9880d681SAndroid Build Coastguard Workerbb2:
410*9880d681SAndroid Build Coastguard Worker  ret void
411*9880d681SAndroid Build Coastguard Worker}
412