xref: /aosp_15_r20/external/llvm/test/CodeGen/Mips/dsp-patterns-cmp-vselect.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mips -mattr=dsp < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_v2q15_eq_:
4*9880d681SAndroid Build Coastguard Worker; CHECK: cmp.eq.ph ${{[0-9]+}}, ${{[0-9]+}}
5*9880d681SAndroid Build Coastguard Worker; CHECK: pick.ph ${{[0-9]+}}, $6, $7
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Workerdefine { i32 } @select_v2q15_eq_(i32 %a0.coerce, i32 %a1.coerce, i32 %a2.coerce, i32 %a3.coerce) {
8*9880d681SAndroid Build Coastguard Workerentry:
9*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32 %a0.coerce to <2 x i16>
10*9880d681SAndroid Build Coastguard Worker  %1 = bitcast i32 %a1.coerce to <2 x i16>
11*9880d681SAndroid Build Coastguard Worker  %2 = bitcast i32 %a2.coerce to <2 x i16>
12*9880d681SAndroid Build Coastguard Worker  %3 = bitcast i32 %a3.coerce to <2 x i16>
13*9880d681SAndroid Build Coastguard Worker  %cmp = icmp eq <2 x i16> %0, %1
14*9880d681SAndroid Build Coastguard Worker  %or = select <2 x i1> %cmp, <2 x i16> %2, <2 x i16> %3
15*9880d681SAndroid Build Coastguard Worker  %4 = bitcast <2 x i16> %or to i32
16*9880d681SAndroid Build Coastguard Worker  %.fca.0.insert = insertvalue { i32 } undef, i32 %4, 0
17*9880d681SAndroid Build Coastguard Worker  ret { i32 } %.fca.0.insert
18*9880d681SAndroid Build Coastguard Worker}
19*9880d681SAndroid Build Coastguard Worker
20*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_v2q15_lt_:
21*9880d681SAndroid Build Coastguard Worker; CHECK: cmp.lt.ph $4, $5
22*9880d681SAndroid Build Coastguard Worker; CHECK: pick.ph ${{[0-9]+}}, $6, $7
23*9880d681SAndroid Build Coastguard Worker
24*9880d681SAndroid Build Coastguard Workerdefine { i32 } @select_v2q15_lt_(i32 %a0.coerce, i32 %a1.coerce, i32 %a2.coerce, i32 %a3.coerce) {
25*9880d681SAndroid Build Coastguard Workerentry:
26*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32 %a0.coerce to <2 x i16>
27*9880d681SAndroid Build Coastguard Worker  %1 = bitcast i32 %a1.coerce to <2 x i16>
28*9880d681SAndroid Build Coastguard Worker  %2 = bitcast i32 %a2.coerce to <2 x i16>
29*9880d681SAndroid Build Coastguard Worker  %3 = bitcast i32 %a3.coerce to <2 x i16>
30*9880d681SAndroid Build Coastguard Worker  %cmp = icmp slt <2 x i16> %0, %1
31*9880d681SAndroid Build Coastguard Worker  %or = select <2 x i1> %cmp, <2 x i16> %2, <2 x i16> %3
32*9880d681SAndroid Build Coastguard Worker  %4 = bitcast <2 x i16> %or to i32
33*9880d681SAndroid Build Coastguard Worker  %.fca.0.insert = insertvalue { i32 } undef, i32 %4, 0
34*9880d681SAndroid Build Coastguard Worker  ret { i32 } %.fca.0.insert
35*9880d681SAndroid Build Coastguard Worker}
36*9880d681SAndroid Build Coastguard Worker
37*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_v2q15_le_:
38*9880d681SAndroid Build Coastguard Worker; CHECK: cmp.le.ph $4, $5
39*9880d681SAndroid Build Coastguard Worker; CHECK: pick.ph ${{[0-9]+}}, $6, $7
40*9880d681SAndroid Build Coastguard Worker
41*9880d681SAndroid Build Coastguard Workerdefine { i32 } @select_v2q15_le_(i32 %a0.coerce, i32 %a1.coerce, i32 %a2.coerce, i32 %a3.coerce) {
42*9880d681SAndroid Build Coastguard Workerentry:
43*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32 %a0.coerce to <2 x i16>
44*9880d681SAndroid Build Coastguard Worker  %1 = bitcast i32 %a1.coerce to <2 x i16>
45*9880d681SAndroid Build Coastguard Worker  %2 = bitcast i32 %a2.coerce to <2 x i16>
46*9880d681SAndroid Build Coastguard Worker  %3 = bitcast i32 %a3.coerce to <2 x i16>
47*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sle <2 x i16> %0, %1
48*9880d681SAndroid Build Coastguard Worker  %or = select <2 x i1> %cmp, <2 x i16> %2, <2 x i16> %3
49*9880d681SAndroid Build Coastguard Worker  %4 = bitcast <2 x i16> %or to i32
50*9880d681SAndroid Build Coastguard Worker  %.fca.0.insert = insertvalue { i32 } undef, i32 %4, 0
51*9880d681SAndroid Build Coastguard Worker  ret { i32 } %.fca.0.insert
52*9880d681SAndroid Build Coastguard Worker}
53*9880d681SAndroid Build Coastguard Worker
54*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_v2q15_ne_:
55*9880d681SAndroid Build Coastguard Worker; CHECK: cmp.eq.ph ${{[0-9]+}}, ${{[0-9]+}}
56*9880d681SAndroid Build Coastguard Worker; CHECK: pick.ph ${{[0-9]+}}, $7, $6
57*9880d681SAndroid Build Coastguard Worker
58*9880d681SAndroid Build Coastguard Workerdefine { i32 } @select_v2q15_ne_(i32 %a0.coerce, i32 %a1.coerce, i32 %a2.coerce, i32 %a3.coerce) {
59*9880d681SAndroid Build Coastguard Workerentry:
60*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32 %a0.coerce to <2 x i16>
61*9880d681SAndroid Build Coastguard Worker  %1 = bitcast i32 %a1.coerce to <2 x i16>
62*9880d681SAndroid Build Coastguard Worker  %2 = bitcast i32 %a2.coerce to <2 x i16>
63*9880d681SAndroid Build Coastguard Worker  %3 = bitcast i32 %a3.coerce to <2 x i16>
64*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ne <2 x i16> %0, %1
65*9880d681SAndroid Build Coastguard Worker  %or = select <2 x i1> %cmp, <2 x i16> %2, <2 x i16> %3
66*9880d681SAndroid Build Coastguard Worker  %4 = bitcast <2 x i16> %or to i32
67*9880d681SAndroid Build Coastguard Worker  %.fca.0.insert = insertvalue { i32 } undef, i32 %4, 0
68*9880d681SAndroid Build Coastguard Worker  ret { i32 } %.fca.0.insert
69*9880d681SAndroid Build Coastguard Worker}
70*9880d681SAndroid Build Coastguard Worker
71*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_v2q15_gt_:
72*9880d681SAndroid Build Coastguard Worker; CHECK: cmp.le.ph $4, $5
73*9880d681SAndroid Build Coastguard Worker; CHECK: pick.ph ${{[0-9]+}}, $7, $6
74*9880d681SAndroid Build Coastguard Worker
75*9880d681SAndroid Build Coastguard Workerdefine { i32 } @select_v2q15_gt_(i32 %a0.coerce, i32 %a1.coerce, i32 %a2.coerce, i32 %a3.coerce) {
76*9880d681SAndroid Build Coastguard Workerentry:
77*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32 %a0.coerce to <2 x i16>
78*9880d681SAndroid Build Coastguard Worker  %1 = bitcast i32 %a1.coerce to <2 x i16>
79*9880d681SAndroid Build Coastguard Worker  %2 = bitcast i32 %a2.coerce to <2 x i16>
80*9880d681SAndroid Build Coastguard Worker  %3 = bitcast i32 %a3.coerce to <2 x i16>
81*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sgt <2 x i16> %0, %1
82*9880d681SAndroid Build Coastguard Worker  %or = select <2 x i1> %cmp, <2 x i16> %2, <2 x i16> %3
83*9880d681SAndroid Build Coastguard Worker  %4 = bitcast <2 x i16> %or to i32
84*9880d681SAndroid Build Coastguard Worker  %.fca.0.insert = insertvalue { i32 } undef, i32 %4, 0
85*9880d681SAndroid Build Coastguard Worker  ret { i32 } %.fca.0.insert
86*9880d681SAndroid Build Coastguard Worker}
87*9880d681SAndroid Build Coastguard Worker
88*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_v2q15_ge_:
89*9880d681SAndroid Build Coastguard Worker; CHECK: cmp.lt.ph $4, $5
90*9880d681SAndroid Build Coastguard Worker; CHECK: pick.ph ${{[0-9]+}}, $7, $6
91*9880d681SAndroid Build Coastguard Worker
92*9880d681SAndroid Build Coastguard Workerdefine { i32 } @select_v2q15_ge_(i32 %a0.coerce, i32 %a1.coerce, i32 %a2.coerce, i32 %a3.coerce) {
93*9880d681SAndroid Build Coastguard Workerentry:
94*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32 %a0.coerce to <2 x i16>
95*9880d681SAndroid Build Coastguard Worker  %1 = bitcast i32 %a1.coerce to <2 x i16>
96*9880d681SAndroid Build Coastguard Worker  %2 = bitcast i32 %a2.coerce to <2 x i16>
97*9880d681SAndroid Build Coastguard Worker  %3 = bitcast i32 %a3.coerce to <2 x i16>
98*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sge <2 x i16> %0, %1
99*9880d681SAndroid Build Coastguard Worker  %or = select <2 x i1> %cmp, <2 x i16> %2, <2 x i16> %3
100*9880d681SAndroid Build Coastguard Worker  %4 = bitcast <2 x i16> %or to i32
101*9880d681SAndroid Build Coastguard Worker  %.fca.0.insert = insertvalue { i32 } undef, i32 %4, 0
102*9880d681SAndroid Build Coastguard Worker  ret { i32 } %.fca.0.insert
103*9880d681SAndroid Build Coastguard Worker}
104*9880d681SAndroid Build Coastguard Worker
105*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_v4ui8_eq_:
106*9880d681SAndroid Build Coastguard Worker; CHECK: cmpu.eq.qb ${{[0-9]+}}, ${{[0-9]+}}
107*9880d681SAndroid Build Coastguard Worker; CHECK: pick.qb ${{[0-9]+}}, $6, $7
108*9880d681SAndroid Build Coastguard Worker
109*9880d681SAndroid Build Coastguard Workerdefine { i32 } @select_v4ui8_eq_(i32 %a0.coerce, i32 %a1.coerce, i32 %a2.coerce, i32 %a3.coerce) {
110*9880d681SAndroid Build Coastguard Workerentry:
111*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32 %a0.coerce to <4 x i8>
112*9880d681SAndroid Build Coastguard Worker  %1 = bitcast i32 %a1.coerce to <4 x i8>
113*9880d681SAndroid Build Coastguard Worker  %2 = bitcast i32 %a2.coerce to <4 x i8>
114*9880d681SAndroid Build Coastguard Worker  %3 = bitcast i32 %a3.coerce to <4 x i8>
115*9880d681SAndroid Build Coastguard Worker  %cmp = icmp eq <4 x i8> %0, %1
116*9880d681SAndroid Build Coastguard Worker  %or = select <4 x i1> %cmp, <4 x i8> %2, <4 x i8> %3
117*9880d681SAndroid Build Coastguard Worker  %4 = bitcast <4 x i8> %or to i32
118*9880d681SAndroid Build Coastguard Worker  %.fca.0.insert = insertvalue { i32 } undef, i32 %4, 0
119*9880d681SAndroid Build Coastguard Worker  ret { i32 } %.fca.0.insert
120*9880d681SAndroid Build Coastguard Worker}
121*9880d681SAndroid Build Coastguard Worker
122*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_v4ui8_lt_:
123*9880d681SAndroid Build Coastguard Worker; CHECK: cmpu.lt.qb $4, $5
124*9880d681SAndroid Build Coastguard Worker; CHECK: pick.qb ${{[0-9]+}}, $6, $7
125*9880d681SAndroid Build Coastguard Worker
126*9880d681SAndroid Build Coastguard Workerdefine { i32 } @select_v4ui8_lt_(i32 %a0.coerce, i32 %a1.coerce, i32 %a2.coerce, i32 %a3.coerce) {
127*9880d681SAndroid Build Coastguard Workerentry:
128*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32 %a0.coerce to <4 x i8>
129*9880d681SAndroid Build Coastguard Worker  %1 = bitcast i32 %a1.coerce to <4 x i8>
130*9880d681SAndroid Build Coastguard Worker  %2 = bitcast i32 %a2.coerce to <4 x i8>
131*9880d681SAndroid Build Coastguard Worker  %3 = bitcast i32 %a3.coerce to <4 x i8>
132*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ult <4 x i8> %0, %1
133*9880d681SAndroid Build Coastguard Worker  %or = select <4 x i1> %cmp, <4 x i8> %2, <4 x i8> %3
134*9880d681SAndroid Build Coastguard Worker  %4 = bitcast <4 x i8> %or to i32
135*9880d681SAndroid Build Coastguard Worker  %.fca.0.insert = insertvalue { i32 } undef, i32 %4, 0
136*9880d681SAndroid Build Coastguard Worker  ret { i32 } %.fca.0.insert
137*9880d681SAndroid Build Coastguard Worker}
138*9880d681SAndroid Build Coastguard Worker
139*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_v4ui8_le_:
140*9880d681SAndroid Build Coastguard Worker; CHECK: cmpu.le.qb $4, $5
141*9880d681SAndroid Build Coastguard Worker; CHECK: pick.qb ${{[0-9]+}}, $6, $7
142*9880d681SAndroid Build Coastguard Worker
143*9880d681SAndroid Build Coastguard Workerdefine { i32 } @select_v4ui8_le_(i32 %a0.coerce, i32 %a1.coerce, i32 %a2.coerce, i32 %a3.coerce) {
144*9880d681SAndroid Build Coastguard Workerentry:
145*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32 %a0.coerce to <4 x i8>
146*9880d681SAndroid Build Coastguard Worker  %1 = bitcast i32 %a1.coerce to <4 x i8>
147*9880d681SAndroid Build Coastguard Worker  %2 = bitcast i32 %a2.coerce to <4 x i8>
148*9880d681SAndroid Build Coastguard Worker  %3 = bitcast i32 %a3.coerce to <4 x i8>
149*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ule <4 x i8> %0, %1
150*9880d681SAndroid Build Coastguard Worker  %or = select <4 x i1> %cmp, <4 x i8> %2, <4 x i8> %3
151*9880d681SAndroid Build Coastguard Worker  %4 = bitcast <4 x i8> %or to i32
152*9880d681SAndroid Build Coastguard Worker  %.fca.0.insert = insertvalue { i32 } undef, i32 %4, 0
153*9880d681SAndroid Build Coastguard Worker  ret { i32 } %.fca.0.insert
154*9880d681SAndroid Build Coastguard Worker}
155*9880d681SAndroid Build Coastguard Worker
156*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_v4ui8_ne_:
157*9880d681SAndroid Build Coastguard Worker; CHECK: cmpu.eq.qb ${{[0-9]+}}, ${{[0-9]+}}
158*9880d681SAndroid Build Coastguard Worker; CHECK: pick.qb ${{[0-9]+}}, $7, $6
159*9880d681SAndroid Build Coastguard Worker
160*9880d681SAndroid Build Coastguard Workerdefine { i32 } @select_v4ui8_ne_(i32 %a0.coerce, i32 %a1.coerce, i32 %a2.coerce, i32 %a3.coerce) {
161*9880d681SAndroid Build Coastguard Workerentry:
162*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32 %a0.coerce to <4 x i8>
163*9880d681SAndroid Build Coastguard Worker  %1 = bitcast i32 %a1.coerce to <4 x i8>
164*9880d681SAndroid Build Coastguard Worker  %2 = bitcast i32 %a2.coerce to <4 x i8>
165*9880d681SAndroid Build Coastguard Worker  %3 = bitcast i32 %a3.coerce to <4 x i8>
166*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ne <4 x i8> %0, %1
167*9880d681SAndroid Build Coastguard Worker  %or = select <4 x i1> %cmp, <4 x i8> %2, <4 x i8> %3
168*9880d681SAndroid Build Coastguard Worker  %4 = bitcast <4 x i8> %or to i32
169*9880d681SAndroid Build Coastguard Worker  %.fca.0.insert = insertvalue { i32 } undef, i32 %4, 0
170*9880d681SAndroid Build Coastguard Worker  ret { i32 } %.fca.0.insert
171*9880d681SAndroid Build Coastguard Worker}
172*9880d681SAndroid Build Coastguard Worker
173*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_v4ui8_gt_:
174*9880d681SAndroid Build Coastguard Worker; CHECK: cmpu.le.qb $4, $5
175*9880d681SAndroid Build Coastguard Worker; CHECK: pick.qb ${{[0-9]+}}, $7, $6
176*9880d681SAndroid Build Coastguard Worker
177*9880d681SAndroid Build Coastguard Workerdefine { i32 } @select_v4ui8_gt_(i32 %a0.coerce, i32 %a1.coerce, i32 %a2.coerce, i32 %a3.coerce) {
178*9880d681SAndroid Build Coastguard Workerentry:
179*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32 %a0.coerce to <4 x i8>
180*9880d681SAndroid Build Coastguard Worker  %1 = bitcast i32 %a1.coerce to <4 x i8>
181*9880d681SAndroid Build Coastguard Worker  %2 = bitcast i32 %a2.coerce to <4 x i8>
182*9880d681SAndroid Build Coastguard Worker  %3 = bitcast i32 %a3.coerce to <4 x i8>
183*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ugt <4 x i8> %0, %1
184*9880d681SAndroid Build Coastguard Worker  %or = select <4 x i1> %cmp, <4 x i8> %2, <4 x i8> %3
185*9880d681SAndroid Build Coastguard Worker  %4 = bitcast <4 x i8> %or to i32
186*9880d681SAndroid Build Coastguard Worker  %.fca.0.insert = insertvalue { i32 } undef, i32 %4, 0
187*9880d681SAndroid Build Coastguard Worker  ret { i32 } %.fca.0.insert
188*9880d681SAndroid Build Coastguard Worker}
189*9880d681SAndroid Build Coastguard Worker
190*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_v4ui8_ge_:
191*9880d681SAndroid Build Coastguard Worker; CHECK: cmpu.lt.qb $4, $5
192*9880d681SAndroid Build Coastguard Worker; CHECK: pick.qb ${{[0-9]+}}, $7, $6
193*9880d681SAndroid Build Coastguard Worker
194*9880d681SAndroid Build Coastguard Workerdefine { i32 } @select_v4ui8_ge_(i32 %a0.coerce, i32 %a1.coerce, i32 %a2.coerce, i32 %a3.coerce) {
195*9880d681SAndroid Build Coastguard Workerentry:
196*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32 %a0.coerce to <4 x i8>
197*9880d681SAndroid Build Coastguard Worker  %1 = bitcast i32 %a1.coerce to <4 x i8>
198*9880d681SAndroid Build Coastguard Worker  %2 = bitcast i32 %a2.coerce to <4 x i8>
199*9880d681SAndroid Build Coastguard Worker  %3 = bitcast i32 %a3.coerce to <4 x i8>
200*9880d681SAndroid Build Coastguard Worker  %cmp = icmp uge <4 x i8> %0, %1
201*9880d681SAndroid Build Coastguard Worker  %or = select <4 x i1> %cmp, <4 x i8> %2, <4 x i8> %3
202*9880d681SAndroid Build Coastguard Worker  %4 = bitcast <4 x i8> %or to i32
203*9880d681SAndroid Build Coastguard Worker  %.fca.0.insert = insertvalue { i32 } undef, i32 %4, 0
204*9880d681SAndroid Build Coastguard Worker  ret { i32 } %.fca.0.insert
205*9880d681SAndroid Build Coastguard Worker}
206*9880d681SAndroid Build Coastguard Worker
207*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_v2ui16_lt_:
208*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp
209*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: pick
210*9880d681SAndroid Build Coastguard Worker
211*9880d681SAndroid Build Coastguard Workerdefine { i32 } @select_v2ui16_lt_(i32 %a0.coerce, i32 %a1.coerce, i32 %a2.coerce, i32 %a3.coerce) {
212*9880d681SAndroid Build Coastguard Workerentry:
213*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32 %a0.coerce to <2 x i16>
214*9880d681SAndroid Build Coastguard Worker  %1 = bitcast i32 %a1.coerce to <2 x i16>
215*9880d681SAndroid Build Coastguard Worker  %2 = bitcast i32 %a2.coerce to <2 x i16>
216*9880d681SAndroid Build Coastguard Worker  %3 = bitcast i32 %a3.coerce to <2 x i16>
217*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ult <2 x i16> %0, %1
218*9880d681SAndroid Build Coastguard Worker  %or = select <2 x i1> %cmp, <2 x i16> %2, <2 x i16> %3
219*9880d681SAndroid Build Coastguard Worker  %4 = bitcast <2 x i16> %or to i32
220*9880d681SAndroid Build Coastguard Worker  %.fca.0.insert = insertvalue { i32 } undef, i32 %4, 0
221*9880d681SAndroid Build Coastguard Worker  ret { i32 } %.fca.0.insert
222*9880d681SAndroid Build Coastguard Worker}
223*9880d681SAndroid Build Coastguard Worker
224*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_v2ui16_le_:
225*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp
226*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: pick
227*9880d681SAndroid Build Coastguard Worker
228*9880d681SAndroid Build Coastguard Workerdefine { i32 } @select_v2ui16_le_(i32 %a0.coerce, i32 %a1.coerce, i32 %a2.coerce, i32 %a3.coerce) {
229*9880d681SAndroid Build Coastguard Workerentry:
230*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32 %a0.coerce to <2 x i16>
231*9880d681SAndroid Build Coastguard Worker  %1 = bitcast i32 %a1.coerce to <2 x i16>
232*9880d681SAndroid Build Coastguard Worker  %2 = bitcast i32 %a2.coerce to <2 x i16>
233*9880d681SAndroid Build Coastguard Worker  %3 = bitcast i32 %a3.coerce to <2 x i16>
234*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ule <2 x i16> %0, %1
235*9880d681SAndroid Build Coastguard Worker  %or = select <2 x i1> %cmp, <2 x i16> %2, <2 x i16> %3
236*9880d681SAndroid Build Coastguard Worker  %4 = bitcast <2 x i16> %or to i32
237*9880d681SAndroid Build Coastguard Worker  %.fca.0.insert = insertvalue { i32 } undef, i32 %4, 0
238*9880d681SAndroid Build Coastguard Worker  ret { i32 } %.fca.0.insert
239*9880d681SAndroid Build Coastguard Worker}
240*9880d681SAndroid Build Coastguard Worker
241*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_v2ui16_gt_:
242*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp
243*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: pick
244*9880d681SAndroid Build Coastguard Worker
245*9880d681SAndroid Build Coastguard Workerdefine { i32 } @select_v2ui16_gt_(i32 %a0.coerce, i32 %a1.coerce, i32 %a2.coerce, i32 %a3.coerce) {
246*9880d681SAndroid Build Coastguard Workerentry:
247*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32 %a0.coerce to <2 x i16>
248*9880d681SAndroid Build Coastguard Worker  %1 = bitcast i32 %a1.coerce to <2 x i16>
249*9880d681SAndroid Build Coastguard Worker  %2 = bitcast i32 %a2.coerce to <2 x i16>
250*9880d681SAndroid Build Coastguard Worker  %3 = bitcast i32 %a3.coerce to <2 x i16>
251*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ugt <2 x i16> %0, %1
252*9880d681SAndroid Build Coastguard Worker  %or = select <2 x i1> %cmp, <2 x i16> %2, <2 x i16> %3
253*9880d681SAndroid Build Coastguard Worker  %4 = bitcast <2 x i16> %or to i32
254*9880d681SAndroid Build Coastguard Worker  %.fca.0.insert = insertvalue { i32 } undef, i32 %4, 0
255*9880d681SAndroid Build Coastguard Worker  ret { i32 } %.fca.0.insert
256*9880d681SAndroid Build Coastguard Worker}
257*9880d681SAndroid Build Coastguard Worker
258*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_v2ui16_ge_:
259*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp
260*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: pick
261*9880d681SAndroid Build Coastguard Worker
262*9880d681SAndroid Build Coastguard Workerdefine { i32 } @select_v2ui16_ge_(i32 %a0.coerce, i32 %a1.coerce, i32 %a2.coerce, i32 %a3.coerce) {
263*9880d681SAndroid Build Coastguard Workerentry:
264*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32 %a0.coerce to <2 x i16>
265*9880d681SAndroid Build Coastguard Worker  %1 = bitcast i32 %a1.coerce to <2 x i16>
266*9880d681SAndroid Build Coastguard Worker  %2 = bitcast i32 %a2.coerce to <2 x i16>
267*9880d681SAndroid Build Coastguard Worker  %3 = bitcast i32 %a3.coerce to <2 x i16>
268*9880d681SAndroid Build Coastguard Worker  %cmp = icmp uge <2 x i16> %0, %1
269*9880d681SAndroid Build Coastguard Worker  %or = select <2 x i1> %cmp, <2 x i16> %2, <2 x i16> %3
270*9880d681SAndroid Build Coastguard Worker  %4 = bitcast <2 x i16> %or to i32
271*9880d681SAndroid Build Coastguard Worker  %.fca.0.insert = insertvalue { i32 } undef, i32 %4, 0
272*9880d681SAndroid Build Coastguard Worker  ret { i32 } %.fca.0.insert
273*9880d681SAndroid Build Coastguard Worker}
274*9880d681SAndroid Build Coastguard Worker
275*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_v4i8_lt_:
276*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp
277*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: pick
278*9880d681SAndroid Build Coastguard Worker
279*9880d681SAndroid Build Coastguard Workerdefine { i32 } @select_v4i8_lt_(i32 %a0.coerce, i32 %a1.coerce, i32 %a2.coerce, i32 %a3.coerce) {
280*9880d681SAndroid Build Coastguard Workerentry:
281*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32 %a0.coerce to <4 x i8>
282*9880d681SAndroid Build Coastguard Worker  %1 = bitcast i32 %a1.coerce to <4 x i8>
283*9880d681SAndroid Build Coastguard Worker  %2 = bitcast i32 %a2.coerce to <4 x i8>
284*9880d681SAndroid Build Coastguard Worker  %3 = bitcast i32 %a3.coerce to <4 x i8>
285*9880d681SAndroid Build Coastguard Worker  %cmp = icmp slt <4 x i8> %0, %1
286*9880d681SAndroid Build Coastguard Worker  %or = select <4 x i1> %cmp, <4 x i8> %2, <4 x i8> %3
287*9880d681SAndroid Build Coastguard Worker  %4 = bitcast <4 x i8> %or to i32
288*9880d681SAndroid Build Coastguard Worker  %.fca.0.insert = insertvalue { i32 } undef, i32 %4, 0
289*9880d681SAndroid Build Coastguard Worker  ret { i32 } %.fca.0.insert
290*9880d681SAndroid Build Coastguard Worker}
291*9880d681SAndroid Build Coastguard Worker
292*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_v4i8_le_:
293*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp
294*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: pick
295*9880d681SAndroid Build Coastguard Worker
296*9880d681SAndroid Build Coastguard Workerdefine { i32 } @select_v4i8_le_(i32 %a0.coerce, i32 %a1.coerce, i32 %a2.coerce, i32 %a3.coerce) {
297*9880d681SAndroid Build Coastguard Workerentry:
298*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32 %a0.coerce to <4 x i8>
299*9880d681SAndroid Build Coastguard Worker  %1 = bitcast i32 %a1.coerce to <4 x i8>
300*9880d681SAndroid Build Coastguard Worker  %2 = bitcast i32 %a2.coerce to <4 x i8>
301*9880d681SAndroid Build Coastguard Worker  %3 = bitcast i32 %a3.coerce to <4 x i8>
302*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sle <4 x i8> %0, %1
303*9880d681SAndroid Build Coastguard Worker  %or = select <4 x i1> %cmp, <4 x i8> %2, <4 x i8> %3
304*9880d681SAndroid Build Coastguard Worker  %4 = bitcast <4 x i8> %or to i32
305*9880d681SAndroid Build Coastguard Worker  %.fca.0.insert = insertvalue { i32 } undef, i32 %4, 0
306*9880d681SAndroid Build Coastguard Worker  ret { i32 } %.fca.0.insert
307*9880d681SAndroid Build Coastguard Worker}
308*9880d681SAndroid Build Coastguard Worker
309*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_v4i8_gt_:
310*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp
311*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: pick
312*9880d681SAndroid Build Coastguard Worker
313*9880d681SAndroid Build Coastguard Workerdefine { i32 } @select_v4i8_gt_(i32 %a0.coerce, i32 %a1.coerce, i32 %a2.coerce, i32 %a3.coerce) {
314*9880d681SAndroid Build Coastguard Workerentry:
315*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32 %a0.coerce to <4 x i8>
316*9880d681SAndroid Build Coastguard Worker  %1 = bitcast i32 %a1.coerce to <4 x i8>
317*9880d681SAndroid Build Coastguard Worker  %2 = bitcast i32 %a2.coerce to <4 x i8>
318*9880d681SAndroid Build Coastguard Worker  %3 = bitcast i32 %a3.coerce to <4 x i8>
319*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sgt <4 x i8> %0, %1
320*9880d681SAndroid Build Coastguard Worker  %or = select <4 x i1> %cmp, <4 x i8> %2, <4 x i8> %3
321*9880d681SAndroid Build Coastguard Worker  %4 = bitcast <4 x i8> %or to i32
322*9880d681SAndroid Build Coastguard Worker  %.fca.0.insert = insertvalue { i32 } undef, i32 %4, 0
323*9880d681SAndroid Build Coastguard Worker  ret { i32 } %.fca.0.insert
324*9880d681SAndroid Build Coastguard Worker}
325*9880d681SAndroid Build Coastguard Worker
326*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_v4i8_ge_:
327*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp
328*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: pick
329*9880d681SAndroid Build Coastguard Worker
330*9880d681SAndroid Build Coastguard Workerdefine { i32 } @select_v4i8_ge_(i32 %a0.coerce, i32 %a1.coerce, i32 %a2.coerce, i32 %a3.coerce) {
331*9880d681SAndroid Build Coastguard Workerentry:
332*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32 %a0.coerce to <4 x i8>
333*9880d681SAndroid Build Coastguard Worker  %1 = bitcast i32 %a1.coerce to <4 x i8>
334*9880d681SAndroid Build Coastguard Worker  %2 = bitcast i32 %a2.coerce to <4 x i8>
335*9880d681SAndroid Build Coastguard Worker  %3 = bitcast i32 %a3.coerce to <4 x i8>
336*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sge <4 x i8> %0, %1
337*9880d681SAndroid Build Coastguard Worker  %or = select <4 x i1> %cmp, <4 x i8> %2, <4 x i8> %3
338*9880d681SAndroid Build Coastguard Worker  %4 = bitcast <4 x i8> %or to i32
339*9880d681SAndroid Build Coastguard Worker  %.fca.0.insert = insertvalue { i32 } undef, i32 %4, 0
340*9880d681SAndroid Build Coastguard Worker  ret { i32 } %.fca.0.insert
341*9880d681SAndroid Build Coastguard Worker}
342*9880d681SAndroid Build Coastguard Worker
343*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: compare_v2q15_eq_:
344*9880d681SAndroid Build Coastguard Worker; CHECK: cmp.eq.ph ${{[0-9]+}}, ${{[0-9]+}}
345*9880d681SAndroid Build Coastguard Worker; CHECK: pick.ph ${{[0-9]+}}, ${{[a-z0-9]+}}, ${{[a-z0-9]+}}
346*9880d681SAndroid Build Coastguard Worker
347*9880d681SAndroid Build Coastguard Workerdefine { i32 } @compare_v2q15_eq_(i32 %a0.coerce, i32 %a1.coerce) {
348*9880d681SAndroid Build Coastguard Workerentry:
349*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32 %a0.coerce to <2 x i16>
350*9880d681SAndroid Build Coastguard Worker  %1 = bitcast i32 %a1.coerce to <2 x i16>
351*9880d681SAndroid Build Coastguard Worker  %cmp = icmp eq <2 x i16> %0, %1
352*9880d681SAndroid Build Coastguard Worker  %sext = sext <2 x i1> %cmp to <2 x i16>
353*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <2 x i16> %sext to i32
354*9880d681SAndroid Build Coastguard Worker  %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
355*9880d681SAndroid Build Coastguard Worker  ret { i32 } %.fca.0.insert
356*9880d681SAndroid Build Coastguard Worker}
357*9880d681SAndroid Build Coastguard Worker
358*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: compare_v2q15_lt_:
359*9880d681SAndroid Build Coastguard Worker; CHECK: cmp.lt.ph $4, $5
360*9880d681SAndroid Build Coastguard Worker; CHECK: pick.ph ${{[0-9]+}}, ${{[a-z0-9]+}}, ${{[a-z0-9]+}}
361*9880d681SAndroid Build Coastguard Worker
362*9880d681SAndroid Build Coastguard Workerdefine { i32 } @compare_v2q15_lt_(i32 %a0.coerce, i32 %a1.coerce) {
363*9880d681SAndroid Build Coastguard Workerentry:
364*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32 %a0.coerce to <2 x i16>
365*9880d681SAndroid Build Coastguard Worker  %1 = bitcast i32 %a1.coerce to <2 x i16>
366*9880d681SAndroid Build Coastguard Worker  %cmp = icmp slt <2 x i16> %0, %1
367*9880d681SAndroid Build Coastguard Worker  %sext = sext <2 x i1> %cmp to <2 x i16>
368*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <2 x i16> %sext to i32
369*9880d681SAndroid Build Coastguard Worker  %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
370*9880d681SAndroid Build Coastguard Worker  ret { i32 } %.fca.0.insert
371*9880d681SAndroid Build Coastguard Worker}
372*9880d681SAndroid Build Coastguard Worker
373*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: compare_v2q15_le_:
374*9880d681SAndroid Build Coastguard Worker; CHECK: cmp.le.ph $4, $5
375*9880d681SAndroid Build Coastguard Worker; CHECK: pick.ph ${{[0-9]+}}, ${{[a-z0-9]+}}, ${{[a-z0-9]+}}
376*9880d681SAndroid Build Coastguard Worker
377*9880d681SAndroid Build Coastguard Workerdefine { i32 } @compare_v2q15_le_(i32 %a0.coerce, i32 %a1.coerce) {
378*9880d681SAndroid Build Coastguard Workerentry:
379*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32 %a0.coerce to <2 x i16>
380*9880d681SAndroid Build Coastguard Worker  %1 = bitcast i32 %a1.coerce to <2 x i16>
381*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sle <2 x i16> %0, %1
382*9880d681SAndroid Build Coastguard Worker  %sext = sext <2 x i1> %cmp to <2 x i16>
383*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <2 x i16> %sext to i32
384*9880d681SAndroid Build Coastguard Worker  %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
385*9880d681SAndroid Build Coastguard Worker  ret { i32 } %.fca.0.insert
386*9880d681SAndroid Build Coastguard Worker}
387*9880d681SAndroid Build Coastguard Worker
388*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: compare_v2q15_ne_:
389*9880d681SAndroid Build Coastguard Worker; CHECK: cmp.eq.ph ${{[0-9]+}}, ${{[0-9]+}}
390*9880d681SAndroid Build Coastguard Worker; CHECK: pick.ph ${{[0-9]+}}, ${{[a-z0-9]+}}, ${{[a-z0-9]+}}
391*9880d681SAndroid Build Coastguard Worker
392*9880d681SAndroid Build Coastguard Workerdefine { i32 } @compare_v2q15_ne_(i32 %a0.coerce, i32 %a1.coerce) {
393*9880d681SAndroid Build Coastguard Workerentry:
394*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32 %a0.coerce to <2 x i16>
395*9880d681SAndroid Build Coastguard Worker  %1 = bitcast i32 %a1.coerce to <2 x i16>
396*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ne <2 x i16> %0, %1
397*9880d681SAndroid Build Coastguard Worker  %sext = sext <2 x i1> %cmp to <2 x i16>
398*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <2 x i16> %sext to i32
399*9880d681SAndroid Build Coastguard Worker  %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
400*9880d681SAndroid Build Coastguard Worker  ret { i32 } %.fca.0.insert
401*9880d681SAndroid Build Coastguard Worker}
402*9880d681SAndroid Build Coastguard Worker
403*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: compare_v2q15_gt_:
404*9880d681SAndroid Build Coastguard Worker; CHECK: cmp.le.ph $4, $5
405*9880d681SAndroid Build Coastguard Worker; CHECK: pick.ph ${{[0-9]+}}, ${{[a-z0-9]+}}, ${{[a-z0-9]+}}
406*9880d681SAndroid Build Coastguard Worker
407*9880d681SAndroid Build Coastguard Workerdefine { i32 } @compare_v2q15_gt_(i32 %a0.coerce, i32 %a1.coerce) {
408*9880d681SAndroid Build Coastguard Workerentry:
409*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32 %a0.coerce to <2 x i16>
410*9880d681SAndroid Build Coastguard Worker  %1 = bitcast i32 %a1.coerce to <2 x i16>
411*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sgt <2 x i16> %0, %1
412*9880d681SAndroid Build Coastguard Worker  %sext = sext <2 x i1> %cmp to <2 x i16>
413*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <2 x i16> %sext to i32
414*9880d681SAndroid Build Coastguard Worker  %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
415*9880d681SAndroid Build Coastguard Worker  ret { i32 } %.fca.0.insert
416*9880d681SAndroid Build Coastguard Worker}
417*9880d681SAndroid Build Coastguard Worker
418*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: compare_v2q15_ge_:
419*9880d681SAndroid Build Coastguard Worker; CHECK: cmp.lt.ph $4, $5
420*9880d681SAndroid Build Coastguard Worker; CHECK: pick.ph ${{[0-9]+}}, ${{[a-z0-9]+}}, ${{[a-z0-9]+}}
421*9880d681SAndroid Build Coastguard Worker
422*9880d681SAndroid Build Coastguard Workerdefine { i32 } @compare_v2q15_ge_(i32 %a0.coerce, i32 %a1.coerce) {
423*9880d681SAndroid Build Coastguard Workerentry:
424*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32 %a0.coerce to <2 x i16>
425*9880d681SAndroid Build Coastguard Worker  %1 = bitcast i32 %a1.coerce to <2 x i16>
426*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sge <2 x i16> %0, %1
427*9880d681SAndroid Build Coastguard Worker  %sext = sext <2 x i1> %cmp to <2 x i16>
428*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <2 x i16> %sext to i32
429*9880d681SAndroid Build Coastguard Worker  %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
430*9880d681SAndroid Build Coastguard Worker  ret { i32 } %.fca.0.insert
431*9880d681SAndroid Build Coastguard Worker}
432*9880d681SAndroid Build Coastguard Worker
433*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: compare_v4ui8_eq_:
434*9880d681SAndroid Build Coastguard Worker; CHECK: cmpu.eq.qb ${{[0-9]+}}, ${{[0-9]+}}
435*9880d681SAndroid Build Coastguard Worker; CHECK: pick.qb ${{[0-9]+}}, ${{[a-z0-9]+}}, ${{[a-z0-9]+}}
436*9880d681SAndroid Build Coastguard Worker
437*9880d681SAndroid Build Coastguard Workerdefine { i32 } @compare_v4ui8_eq_(i32 %a0.coerce, i32 %a1.coerce) {
438*9880d681SAndroid Build Coastguard Workerentry:
439*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32 %a0.coerce to <4 x i8>
440*9880d681SAndroid Build Coastguard Worker  %1 = bitcast i32 %a1.coerce to <4 x i8>
441*9880d681SAndroid Build Coastguard Worker  %cmp = icmp eq <4 x i8> %0, %1
442*9880d681SAndroid Build Coastguard Worker  %sext = sext <4 x i1> %cmp to <4 x i8>
443*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <4 x i8> %sext to i32
444*9880d681SAndroid Build Coastguard Worker  %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
445*9880d681SAndroid Build Coastguard Worker  ret { i32 } %.fca.0.insert
446*9880d681SAndroid Build Coastguard Worker}
447*9880d681SAndroid Build Coastguard Worker
448*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: compare_v4ui8_lt_:
449*9880d681SAndroid Build Coastguard Worker; CHECK: cmpu.lt.qb $4, $5
450*9880d681SAndroid Build Coastguard Worker; CHECK: pick.qb ${{[0-9]+}}, ${{[a-z0-9]+}}, ${{[a-z0-9]+}}
451*9880d681SAndroid Build Coastguard Worker
452*9880d681SAndroid Build Coastguard Workerdefine { i32 } @compare_v4ui8_lt_(i32 %a0.coerce, i32 %a1.coerce) {
453*9880d681SAndroid Build Coastguard Workerentry:
454*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32 %a0.coerce to <4 x i8>
455*9880d681SAndroid Build Coastguard Worker  %1 = bitcast i32 %a1.coerce to <4 x i8>
456*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ult <4 x i8> %0, %1
457*9880d681SAndroid Build Coastguard Worker  %sext = sext <4 x i1> %cmp to <4 x i8>
458*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <4 x i8> %sext to i32
459*9880d681SAndroid Build Coastguard Worker  %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
460*9880d681SAndroid Build Coastguard Worker  ret { i32 } %.fca.0.insert
461*9880d681SAndroid Build Coastguard Worker}
462*9880d681SAndroid Build Coastguard Worker
463*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: compare_v4ui8_le_:
464*9880d681SAndroid Build Coastguard Worker; CHECK: cmpu.le.qb $4, $5
465*9880d681SAndroid Build Coastguard Worker; CHECK: pick.qb ${{[0-9]+}}, ${{[a-z0-9]+}}, ${{[a-z0-9]+}}
466*9880d681SAndroid Build Coastguard Worker
467*9880d681SAndroid Build Coastguard Workerdefine { i32 } @compare_v4ui8_le_(i32 %a0.coerce, i32 %a1.coerce) {
468*9880d681SAndroid Build Coastguard Workerentry:
469*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32 %a0.coerce to <4 x i8>
470*9880d681SAndroid Build Coastguard Worker  %1 = bitcast i32 %a1.coerce to <4 x i8>
471*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ule <4 x i8> %0, %1
472*9880d681SAndroid Build Coastguard Worker  %sext = sext <4 x i1> %cmp to <4 x i8>
473*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <4 x i8> %sext to i32
474*9880d681SAndroid Build Coastguard Worker  %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
475*9880d681SAndroid Build Coastguard Worker  ret { i32 } %.fca.0.insert
476*9880d681SAndroid Build Coastguard Worker}
477*9880d681SAndroid Build Coastguard Worker
478*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: compare_v4ui8_ne_:
479*9880d681SAndroid Build Coastguard Worker; CHECK: cmpu.eq.qb ${{[0-9]+}}, ${{[0-9]+}}
480*9880d681SAndroid Build Coastguard Worker; CHECK: pick.qb ${{[0-9]+}}, ${{[a-z0-9]+}}, ${{[a-z0-9]+}}
481*9880d681SAndroid Build Coastguard Worker
482*9880d681SAndroid Build Coastguard Workerdefine { i32 } @compare_v4ui8_ne_(i32 %a0.coerce, i32 %a1.coerce) {
483*9880d681SAndroid Build Coastguard Workerentry:
484*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32 %a0.coerce to <4 x i8>
485*9880d681SAndroid Build Coastguard Worker  %1 = bitcast i32 %a1.coerce to <4 x i8>
486*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ne <4 x i8> %0, %1
487*9880d681SAndroid Build Coastguard Worker  %sext = sext <4 x i1> %cmp to <4 x i8>
488*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <4 x i8> %sext to i32
489*9880d681SAndroid Build Coastguard Worker  %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
490*9880d681SAndroid Build Coastguard Worker  ret { i32 } %.fca.0.insert
491*9880d681SAndroid Build Coastguard Worker}
492*9880d681SAndroid Build Coastguard Worker
493*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: compare_v4ui8_gt_:
494*9880d681SAndroid Build Coastguard Worker; CHECK: cmpu.le.qb $4, $5
495*9880d681SAndroid Build Coastguard Worker; CHECK: pick.qb ${{[0-9]+}}, ${{[a-z0-9]+}}, ${{[a-z0-9]+}}
496*9880d681SAndroid Build Coastguard Worker
497*9880d681SAndroid Build Coastguard Workerdefine { i32 } @compare_v4ui8_gt_(i32 %a0.coerce, i32 %a1.coerce) {
498*9880d681SAndroid Build Coastguard Workerentry:
499*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32 %a0.coerce to <4 x i8>
500*9880d681SAndroid Build Coastguard Worker  %1 = bitcast i32 %a1.coerce to <4 x i8>
501*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ugt <4 x i8> %0, %1
502*9880d681SAndroid Build Coastguard Worker  %sext = sext <4 x i1> %cmp to <4 x i8>
503*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <4 x i8> %sext to i32
504*9880d681SAndroid Build Coastguard Worker  %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
505*9880d681SAndroid Build Coastguard Worker  ret { i32 } %.fca.0.insert
506*9880d681SAndroid Build Coastguard Worker}
507*9880d681SAndroid Build Coastguard Worker
508*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: compare_v4ui8_ge_:
509*9880d681SAndroid Build Coastguard Worker; CHECK: cmpu.lt.qb $4, $5
510*9880d681SAndroid Build Coastguard Worker; CHECK: pick.qb ${{[0-9]+}}, ${{[a-z0-9]+}}, ${{[a-z0-9]+}}
511*9880d681SAndroid Build Coastguard Worker
512*9880d681SAndroid Build Coastguard Workerdefine { i32 } @compare_v4ui8_ge_(i32 %a0.coerce, i32 %a1.coerce) {
513*9880d681SAndroid Build Coastguard Workerentry:
514*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32 %a0.coerce to <4 x i8>
515*9880d681SAndroid Build Coastguard Worker  %1 = bitcast i32 %a1.coerce to <4 x i8>
516*9880d681SAndroid Build Coastguard Worker  %cmp = icmp uge <4 x i8> %0, %1
517*9880d681SAndroid Build Coastguard Worker  %sext = sext <4 x i1> %cmp to <4 x i8>
518*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <4 x i8> %sext to i32
519*9880d681SAndroid Build Coastguard Worker  %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
520*9880d681SAndroid Build Coastguard Worker  ret { i32 } %.fca.0.insert
521*9880d681SAndroid Build Coastguard Worker}
522*9880d681SAndroid Build Coastguard Worker
523*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: compare_v2ui16_lt_:
524*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp
525*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: pick
526*9880d681SAndroid Build Coastguard Worker
527*9880d681SAndroid Build Coastguard Workerdefine { i32 } @compare_v2ui16_lt_(i32 %a0.coerce, i32 %a1.coerce) {
528*9880d681SAndroid Build Coastguard Workerentry:
529*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32 %a0.coerce to <2 x i16>
530*9880d681SAndroid Build Coastguard Worker  %1 = bitcast i32 %a1.coerce to <2 x i16>
531*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ult <2 x i16> %0, %1
532*9880d681SAndroid Build Coastguard Worker  %sext = sext <2 x i1> %cmp to <2 x i16>
533*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <2 x i16> %sext to i32
534*9880d681SAndroid Build Coastguard Worker  %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
535*9880d681SAndroid Build Coastguard Worker  ret { i32 } %.fca.0.insert
536*9880d681SAndroid Build Coastguard Worker}
537*9880d681SAndroid Build Coastguard Worker
538*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: compare_v2ui16_le_:
539*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp
540*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: pick
541*9880d681SAndroid Build Coastguard Worker
542*9880d681SAndroid Build Coastguard Workerdefine { i32 } @compare_v2ui16_le_(i32 %a0.coerce, i32 %a1.coerce) {
543*9880d681SAndroid Build Coastguard Workerentry:
544*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32 %a0.coerce to <2 x i16>
545*9880d681SAndroid Build Coastguard Worker  %1 = bitcast i32 %a1.coerce to <2 x i16>
546*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ule <2 x i16> %0, %1
547*9880d681SAndroid Build Coastguard Worker  %sext = sext <2 x i1> %cmp to <2 x i16>
548*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <2 x i16> %sext to i32
549*9880d681SAndroid Build Coastguard Worker  %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
550*9880d681SAndroid Build Coastguard Worker  ret { i32 } %.fca.0.insert
551*9880d681SAndroid Build Coastguard Worker}
552*9880d681SAndroid Build Coastguard Worker
553*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: compare_v2ui16_gt_:
554*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp
555*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: pick
556*9880d681SAndroid Build Coastguard Worker
557*9880d681SAndroid Build Coastguard Workerdefine { i32 } @compare_v2ui16_gt_(i32 %a0.coerce, i32 %a1.coerce) {
558*9880d681SAndroid Build Coastguard Workerentry:
559*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32 %a0.coerce to <2 x i16>
560*9880d681SAndroid Build Coastguard Worker  %1 = bitcast i32 %a1.coerce to <2 x i16>
561*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ugt <2 x i16> %0, %1
562*9880d681SAndroid Build Coastguard Worker  %sext = sext <2 x i1> %cmp to <2 x i16>
563*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <2 x i16> %sext to i32
564*9880d681SAndroid Build Coastguard Worker  %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
565*9880d681SAndroid Build Coastguard Worker  ret { i32 } %.fca.0.insert
566*9880d681SAndroid Build Coastguard Worker}
567*9880d681SAndroid Build Coastguard Worker
568*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: compare_v2ui16_ge_:
569*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp
570*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: pick
571*9880d681SAndroid Build Coastguard Worker
572*9880d681SAndroid Build Coastguard Workerdefine { i32 } @compare_v2ui16_ge_(i32 %a0.coerce, i32 %a1.coerce) {
573*9880d681SAndroid Build Coastguard Workerentry:
574*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32 %a0.coerce to <2 x i16>
575*9880d681SAndroid Build Coastguard Worker  %1 = bitcast i32 %a1.coerce to <2 x i16>
576*9880d681SAndroid Build Coastguard Worker  %cmp = icmp uge <2 x i16> %0, %1
577*9880d681SAndroid Build Coastguard Worker  %sext = sext <2 x i1> %cmp to <2 x i16>
578*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <2 x i16> %sext to i32
579*9880d681SAndroid Build Coastguard Worker  %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
580*9880d681SAndroid Build Coastguard Worker  ret { i32 } %.fca.0.insert
581*9880d681SAndroid Build Coastguard Worker}
582*9880d681SAndroid Build Coastguard Worker
583*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: compare_v4i8_lt_:
584*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp
585*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: pick
586*9880d681SAndroid Build Coastguard Worker
587*9880d681SAndroid Build Coastguard Workerdefine { i32 } @compare_v4i8_lt_(i32 %a0.coerce, i32 %a1.coerce) {
588*9880d681SAndroid Build Coastguard Workerentry:
589*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32 %a0.coerce to <4 x i8>
590*9880d681SAndroid Build Coastguard Worker  %1 = bitcast i32 %a1.coerce to <4 x i8>
591*9880d681SAndroid Build Coastguard Worker  %cmp = icmp slt <4 x i8> %0, %1
592*9880d681SAndroid Build Coastguard Worker  %sext = sext <4 x i1> %cmp to <4 x i8>
593*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <4 x i8> %sext to i32
594*9880d681SAndroid Build Coastguard Worker  %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
595*9880d681SAndroid Build Coastguard Worker  ret { i32 } %.fca.0.insert
596*9880d681SAndroid Build Coastguard Worker}
597*9880d681SAndroid Build Coastguard Worker
598*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: compare_v4i8_le_:
599*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp
600*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: pick
601*9880d681SAndroid Build Coastguard Worker
602*9880d681SAndroid Build Coastguard Workerdefine { i32 } @compare_v4i8_le_(i32 %a0.coerce, i32 %a1.coerce) {
603*9880d681SAndroid Build Coastguard Workerentry:
604*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32 %a0.coerce to <4 x i8>
605*9880d681SAndroid Build Coastguard Worker  %1 = bitcast i32 %a1.coerce to <4 x i8>
606*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sle <4 x i8> %0, %1
607*9880d681SAndroid Build Coastguard Worker  %sext = sext <4 x i1> %cmp to <4 x i8>
608*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <4 x i8> %sext to i32
609*9880d681SAndroid Build Coastguard Worker  %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
610*9880d681SAndroid Build Coastguard Worker  ret { i32 } %.fca.0.insert
611*9880d681SAndroid Build Coastguard Worker}
612*9880d681SAndroid Build Coastguard Worker
613*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: compare_v4i8_gt_:
614*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp
615*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: pick
616*9880d681SAndroid Build Coastguard Worker
617*9880d681SAndroid Build Coastguard Workerdefine { i32 } @compare_v4i8_gt_(i32 %a0.coerce, i32 %a1.coerce) {
618*9880d681SAndroid Build Coastguard Workerentry:
619*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32 %a0.coerce to <4 x i8>
620*9880d681SAndroid Build Coastguard Worker  %1 = bitcast i32 %a1.coerce to <4 x i8>
621*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sgt <4 x i8> %0, %1
622*9880d681SAndroid Build Coastguard Worker  %sext = sext <4 x i1> %cmp to <4 x i8>
623*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <4 x i8> %sext to i32
624*9880d681SAndroid Build Coastguard Worker  %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
625*9880d681SAndroid Build Coastguard Worker  ret { i32 } %.fca.0.insert
626*9880d681SAndroid Build Coastguard Worker}
627*9880d681SAndroid Build Coastguard Worker
628*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: compare_v4i8_ge_:
629*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp
630*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: pick
631*9880d681SAndroid Build Coastguard Worker
632*9880d681SAndroid Build Coastguard Workerdefine { i32 } @compare_v4i8_ge_(i32 %a0.coerce, i32 %a1.coerce) {
633*9880d681SAndroid Build Coastguard Workerentry:
634*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32 %a0.coerce to <4 x i8>
635*9880d681SAndroid Build Coastguard Worker  %1 = bitcast i32 %a1.coerce to <4 x i8>
636*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sge <4 x i8> %0, %1
637*9880d681SAndroid Build Coastguard Worker  %sext = sext <4 x i1> %cmp to <4 x i8>
638*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <4 x i8> %sext to i32
639*9880d681SAndroid Build Coastguard Worker  %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
640*9880d681SAndroid Build Coastguard Worker  ret { i32 } %.fca.0.insert
641*9880d681SAndroid Build Coastguard Worker}
642