blob: fbc268fa930074ef3ac0c50abb6a16a613b62638 [file] [log] [blame]
David Greena4a46982019-07-24 14:17:54 +00001; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
David Greeneecba952020-04-22 16:33:11 +01002; RUN: llc -mtriple=thumbv8.1m.main-none-none-eabi -mattr=+mve -verify-machineinstrs %s -o - | FileCheck %s
David Greena4a46982019-07-24 14:17:54 +00003
4define arm_aapcs_vfpcc <4 x i32> @cmpeqz_v4i1(<4 x i32> %a, <4 x i32> %b) {
5; CHECK-LABEL: cmpeqz_v4i1:
6; CHECK: @ %bb.0: @ %entry
David Greence7328c2019-09-16 13:02:41 +00007; CHECK-NEXT: vpt.i32 ne, q0, zr
David Greenbab4d8ac2019-07-24 16:42:09 +00008; CHECK-NEXT: vcmpt.i32 ne, q1, zr
Pierre-vhffdda492020-04-07 15:09:56 +01009; CHECK-NEXT: vpsel q0, q1, q0
David Greena4a46982019-07-24 14:17:54 +000010; CHECK-NEXT: bx lr
11entry:
12 %c1 = icmp eq <4 x i32> %a, zeroinitializer
13 %c2 = icmp eq <4 x i32> %b, zeroinitializer
14 %o = or <4 x i1> %c1, %c2
15 %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
16 ret <4 x i32> %s
17}
18
19define arm_aapcs_vfpcc <4 x i32> @cmpnez_v4i1(<4 x i32> %a, <4 x i32> %b) {
20; CHECK-LABEL: cmpnez_v4i1:
21; CHECK: @ %bb.0: @ %entry
David Greence7328c2019-09-16 13:02:41 +000022; CHECK-NEXT: vpt.i32 ne, q0, zr
David Greenbab4d8ac2019-07-24 16:42:09 +000023; CHECK-NEXT: vcmpt.i32 eq, q1, zr
Pierre-vhffdda492020-04-07 15:09:56 +010024; CHECK-NEXT: vpsel q0, q1, q0
David Greena4a46982019-07-24 14:17:54 +000025; CHECK-NEXT: bx lr
26entry:
27 %c1 = icmp eq <4 x i32> %a, zeroinitializer
28 %c2 = icmp ne <4 x i32> %b, zeroinitializer
29 %o = or <4 x i1> %c1, %c2
30 %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
31 ret <4 x i32> %s
32}
33
34define arm_aapcs_vfpcc <4 x i32> @cmpsltz_v4i1(<4 x i32> %a, <4 x i32> %b) {
35; CHECK-LABEL: cmpsltz_v4i1:
36; CHECK: @ %bb.0: @ %entry
David Greence7328c2019-09-16 13:02:41 +000037; CHECK-NEXT: vpt.i32 ne, q0, zr
David Greenbab4d8ac2019-07-24 16:42:09 +000038; CHECK-NEXT: vcmpt.s32 ge, q1, zr
Pierre-vhffdda492020-04-07 15:09:56 +010039; CHECK-NEXT: vpsel q0, q1, q0
David Greena4a46982019-07-24 14:17:54 +000040; CHECK-NEXT: bx lr
41entry:
42 %c1 = icmp eq <4 x i32> %a, zeroinitializer
43 %c2 = icmp slt <4 x i32> %b, zeroinitializer
44 %o = or <4 x i1> %c1, %c2
45 %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
46 ret <4 x i32> %s
47}
48
49define arm_aapcs_vfpcc <4 x i32> @cmpsgtz_v4i1(<4 x i32> %a, <4 x i32> %b) {
50; CHECK-LABEL: cmpsgtz_v4i1:
51; CHECK: @ %bb.0: @ %entry
David Greence7328c2019-09-16 13:02:41 +000052; CHECK-NEXT: vpt.i32 ne, q0, zr
David Greenbab4d8ac2019-07-24 16:42:09 +000053; CHECK-NEXT: vcmpt.s32 le, q1, zr
Pierre-vhffdda492020-04-07 15:09:56 +010054; CHECK-NEXT: vpsel q0, q1, q0
David Greena4a46982019-07-24 14:17:54 +000055; CHECK-NEXT: bx lr
56entry:
57 %c1 = icmp eq <4 x i32> %a, zeroinitializer
58 %c2 = icmp sgt <4 x i32> %b, zeroinitializer
59 %o = or <4 x i1> %c1, %c2
60 %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
61 ret <4 x i32> %s
62}
63
64define arm_aapcs_vfpcc <4 x i32> @cmpslez_v4i1(<4 x i32> %a, <4 x i32> %b) {
65; CHECK-LABEL: cmpslez_v4i1:
66; CHECK: @ %bb.0: @ %entry
David Greence7328c2019-09-16 13:02:41 +000067; CHECK-NEXT: vpt.i32 ne, q0, zr
David Greenbab4d8ac2019-07-24 16:42:09 +000068; CHECK-NEXT: vcmpt.s32 gt, q1, zr
Pierre-vhffdda492020-04-07 15:09:56 +010069; CHECK-NEXT: vpsel q0, q1, q0
David Greena4a46982019-07-24 14:17:54 +000070; CHECK-NEXT: bx lr
71entry:
72 %c1 = icmp eq <4 x i32> %a, zeroinitializer
73 %c2 = icmp sle <4 x i32> %b, zeroinitializer
74 %o = or <4 x i1> %c1, %c2
75 %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
76 ret <4 x i32> %s
77}
78
79define arm_aapcs_vfpcc <4 x i32> @cmpsgez_v4i1(<4 x i32> %a, <4 x i32> %b) {
80; CHECK-LABEL: cmpsgez_v4i1:
81; CHECK: @ %bb.0: @ %entry
David Greence7328c2019-09-16 13:02:41 +000082; CHECK-NEXT: vpt.i32 ne, q0, zr
David Greenbab4d8ac2019-07-24 16:42:09 +000083; CHECK-NEXT: vcmpt.s32 lt, q1, zr
Pierre-vhffdda492020-04-07 15:09:56 +010084; CHECK-NEXT: vpsel q0, q1, q0
David Greena4a46982019-07-24 14:17:54 +000085; CHECK-NEXT: bx lr
86entry:
87 %c1 = icmp eq <4 x i32> %a, zeroinitializer
88 %c2 = icmp sge <4 x i32> %b, zeroinitializer
89 %o = or <4 x i1> %c1, %c2
90 %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
91 ret <4 x i32> %s
92}
93
94define arm_aapcs_vfpcc <4 x i32> @cmpultz_v4i1(<4 x i32> %a, <4 x i32> %b) {
95; CHECK-LABEL: cmpultz_v4i1:
96; CHECK: @ %bb.0: @ %entry
97; CHECK-NEXT: vcmp.i32 eq, q0, zr
98; CHECK-NEXT: vpsel q0, q0, q1
99; CHECK-NEXT: bx lr
100entry:
101 %c1 = icmp eq <4 x i32> %a, zeroinitializer
102 %c2 = icmp ult <4 x i32> %b, zeroinitializer
103 %o = or <4 x i1> %c1, %c2
104 %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
105 ret <4 x i32> %s
106}
107
108define arm_aapcs_vfpcc <4 x i32> @cmpugtz_v4i1(<4 x i32> %a, <4 x i32> %b) {
109; CHECK-LABEL: cmpugtz_v4i1:
110; CHECK: @ %bb.0: @ %entry
David Greence7328c2019-09-16 13:02:41 +0000111; CHECK-NEXT: vpt.i32 ne, q0, zr
David Greenbab4d8ac2019-07-24 16:42:09 +0000112; CHECK-NEXT: vcmpt.i32 eq, q1, zr
Pierre-vhffdda492020-04-07 15:09:56 +0100113; CHECK-NEXT: vpsel q0, q1, q0
David Greena4a46982019-07-24 14:17:54 +0000114; CHECK-NEXT: bx lr
115entry:
116 %c1 = icmp eq <4 x i32> %a, zeroinitializer
117 %c2 = icmp ugt <4 x i32> %b, zeroinitializer
118 %o = or <4 x i1> %c1, %c2
119 %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
120 ret <4 x i32> %s
121}
122
123define arm_aapcs_vfpcc <4 x i32> @cmpulez_v4i1(<4 x i32> %a, <4 x i32> %b) {
124; CHECK-LABEL: cmpulez_v4i1:
125; CHECK: @ %bb.0: @ %entry
David Greencd7a6fa2019-07-24 17:36:47 +0000126; CHECK-NEXT: vcmp.u32 cs, q1, zr
Pierre-vhd5eb7ff2020-05-01 14:57:36 +0100127; CHECK-NEXT: vpnot
128; CHECK-NEXT: vpst
129; CHECK-NEXT: vcmpt.i32 ne, q0, zr
130; CHECK-NEXT: vpsel q0, q1, q0
David Greena4a46982019-07-24 14:17:54 +0000131; CHECK-NEXT: bx lr
132entry:
133 %c1 = icmp eq <4 x i32> %a, zeroinitializer
134 %c2 = icmp ule <4 x i32> %b, zeroinitializer
135 %o = or <4 x i1> %c1, %c2
136 %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
137 ret <4 x i32> %s
138}
139
140define arm_aapcs_vfpcc <4 x i32> @cmpugez_v4i1(<4 x i32> %a, <4 x i32> %b) {
141; CHECK-LABEL: cmpugez_v4i1:
142; CHECK: @ %bb.0: @ %entry
143; CHECK-NEXT: bx lr
144entry:
145 %c1 = icmp eq <4 x i32> %a, zeroinitializer
146 %c2 = icmp uge <4 x i32> %b, zeroinitializer
147 %o = or <4 x i1> %c1, %c2
148 %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
149 ret <4 x i32> %s
150}
151
152
153
154define arm_aapcs_vfpcc <4 x i32> @cmpeq_v4i1(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {
155; CHECK-LABEL: cmpeq_v4i1:
156; CHECK: @ %bb.0: @ %entry
David Greence7328c2019-09-16 13:02:41 +0000157; CHECK-NEXT: vpt.i32 ne, q0, zr
David Greenbab4d8ac2019-07-24 16:42:09 +0000158; CHECK-NEXT: vcmpt.i32 ne, q1, q2
Pierre-vhffdda492020-04-07 15:09:56 +0100159; CHECK-NEXT: vpsel q0, q1, q0
David Greena4a46982019-07-24 14:17:54 +0000160; CHECK-NEXT: bx lr
161entry:
162 %c1 = icmp eq <4 x i32> %a, zeroinitializer
163 %c2 = icmp eq <4 x i32> %b, %c
164 %o = or <4 x i1> %c1, %c2
165 %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
166 ret <4 x i32> %s
167}
168
169define arm_aapcs_vfpcc <4 x i32> @cmpne_v4i1(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {
170; CHECK-LABEL: cmpne_v4i1:
171; CHECK: @ %bb.0: @ %entry
David Greence7328c2019-09-16 13:02:41 +0000172; CHECK-NEXT: vpt.i32 ne, q0, zr
David Greenbab4d8ac2019-07-24 16:42:09 +0000173; CHECK-NEXT: vcmpt.i32 eq, q1, q2
Pierre-vhffdda492020-04-07 15:09:56 +0100174; CHECK-NEXT: vpsel q0, q1, q0
David Greena4a46982019-07-24 14:17:54 +0000175; CHECK-NEXT: bx lr
176entry:
177 %c1 = icmp eq <4 x i32> %a, zeroinitializer
178 %c2 = icmp ne <4 x i32> %b, %c
179 %o = or <4 x i1> %c1, %c2
180 %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
181 ret <4 x i32> %s
182}
183
184define arm_aapcs_vfpcc <4 x i32> @cmpslt_v4i1(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {
185; CHECK-LABEL: cmpslt_v4i1:
186; CHECK: @ %bb.0: @ %entry
David Greence7328c2019-09-16 13:02:41 +0000187; CHECK-NEXT: vpt.i32 ne, q0, zr
David Greenbab4d8ac2019-07-24 16:42:09 +0000188; CHECK-NEXT: vcmpt.s32 le, q2, q1
Pierre-vhffdda492020-04-07 15:09:56 +0100189; CHECK-NEXT: vpsel q0, q1, q0
David Greena4a46982019-07-24 14:17:54 +0000190; CHECK-NEXT: bx lr
191entry:
192 %c1 = icmp eq <4 x i32> %a, zeroinitializer
193 %c2 = icmp slt <4 x i32> %b, %c
194 %o = or <4 x i1> %c1, %c2
195 %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
196 ret <4 x i32> %s
197}
198
199define arm_aapcs_vfpcc <4 x i32> @cmpsgt_v4i1(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {
200; CHECK-LABEL: cmpsgt_v4i1:
201; CHECK: @ %bb.0: @ %entry
David Greence7328c2019-09-16 13:02:41 +0000202; CHECK-NEXT: vpt.i32 ne, q0, zr
David Greenbab4d8ac2019-07-24 16:42:09 +0000203; CHECK-NEXT: vcmpt.s32 le, q1, q2
Pierre-vhffdda492020-04-07 15:09:56 +0100204; CHECK-NEXT: vpsel q0, q1, q0
David Greena4a46982019-07-24 14:17:54 +0000205; CHECK-NEXT: bx lr
206entry:
207 %c1 = icmp eq <4 x i32> %a, zeroinitializer
208 %c2 = icmp sgt <4 x i32> %b, %c
209 %o = or <4 x i1> %c1, %c2
210 %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
211 ret <4 x i32> %s
212}
213
214define arm_aapcs_vfpcc <4 x i32> @cmpsle_v4i1(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {
215; CHECK-LABEL: cmpsle_v4i1:
216; CHECK: @ %bb.0: @ %entry
David Greence7328c2019-09-16 13:02:41 +0000217; CHECK-NEXT: vpt.i32 ne, q0, zr
David Greenbab4d8ac2019-07-24 16:42:09 +0000218; CHECK-NEXT: vcmpt.s32 lt, q2, q1
Pierre-vhffdda492020-04-07 15:09:56 +0100219; CHECK-NEXT: vpsel q0, q1, q0
David Greena4a46982019-07-24 14:17:54 +0000220; CHECK-NEXT: bx lr
221entry:
222 %c1 = icmp eq <4 x i32> %a, zeroinitializer
223 %c2 = icmp sle <4 x i32> %b, %c
224 %o = or <4 x i1> %c1, %c2
225 %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
226 ret <4 x i32> %s
227}
228
229define arm_aapcs_vfpcc <4 x i32> @cmpsge_v4i1(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {
230; CHECK-LABEL: cmpsge_v4i1:
231; CHECK: @ %bb.0: @ %entry
David Greence7328c2019-09-16 13:02:41 +0000232; CHECK-NEXT: vpt.i32 ne, q0, zr
David Greenbab4d8ac2019-07-24 16:42:09 +0000233; CHECK-NEXT: vcmpt.s32 lt, q1, q2
Pierre-vhffdda492020-04-07 15:09:56 +0100234; CHECK-NEXT: vpsel q0, q1, q0
David Greena4a46982019-07-24 14:17:54 +0000235; CHECK-NEXT: bx lr
236entry:
237 %c1 = icmp eq <4 x i32> %a, zeroinitializer
238 %c2 = icmp sge <4 x i32> %b, %c
239 %o = or <4 x i1> %c1, %c2
240 %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
241 ret <4 x i32> %s
242}
243
244define arm_aapcs_vfpcc <4 x i32> @cmpult_v4i1(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {
245; CHECK-LABEL: cmpult_v4i1:
246; CHECK: @ %bb.0: @ %entry
247; CHECK-NEXT: vcmp.u32 hi, q2, q1
Pierre-vhd5eb7ff2020-05-01 14:57:36 +0100248; CHECK-NEXT: vpnot
249; CHECK-NEXT: vpst
250; CHECK-NEXT: vcmpt.i32 ne, q0, zr
251; CHECK-NEXT: vpsel q0, q1, q0
David Greena4a46982019-07-24 14:17:54 +0000252; CHECK-NEXT: bx lr
253entry:
254 %c1 = icmp eq <4 x i32> %a, zeroinitializer
255 %c2 = icmp ult <4 x i32> %b, %c
256 %o = or <4 x i1> %c1, %c2
257 %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
258 ret <4 x i32> %s
259}
260
261define arm_aapcs_vfpcc <4 x i32> @cmpugt_v4i1(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {
262; CHECK-LABEL: cmpugt_v4i1:
263; CHECK: @ %bb.0: @ %entry
264; CHECK-NEXT: vcmp.u32 hi, q1, q2
Pierre-vhd5eb7ff2020-05-01 14:57:36 +0100265; CHECK-NEXT: vpnot
266; CHECK-NEXT: vpst
267; CHECK-NEXT: vcmpt.i32 ne, q0, zr
268; CHECK-NEXT: vpsel q0, q1, q0
David Greena4a46982019-07-24 14:17:54 +0000269; CHECK-NEXT: bx lr
270entry:
271 %c1 = icmp eq <4 x i32> %a, zeroinitializer
272 %c2 = icmp ugt <4 x i32> %b, %c
273 %o = or <4 x i1> %c1, %c2
274 %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
275 ret <4 x i32> %s
276}
277
278define arm_aapcs_vfpcc <4 x i32> @cmpule_v4i1(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {
279; CHECK-LABEL: cmpule_v4i1:
280; CHECK: @ %bb.0: @ %entry
281; CHECK-NEXT: vcmp.u32 cs, q2, q1
Pierre-vhd5eb7ff2020-05-01 14:57:36 +0100282; CHECK-NEXT: vpnot
283; CHECK-NEXT: vpst
284; CHECK-NEXT: vcmpt.i32 ne, q0, zr
285; CHECK-NEXT: vpsel q0, q1, q0
David Greena4a46982019-07-24 14:17:54 +0000286; CHECK-NEXT: bx lr
287entry:
288 %c1 = icmp eq <4 x i32> %a, zeroinitializer
289 %c2 = icmp ule <4 x i32> %b, %c
290 %o = or <4 x i1> %c1, %c2
291 %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
292 ret <4 x i32> %s
293}
294
295define arm_aapcs_vfpcc <4 x i32> @cmpuge_v4i1(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {
296; CHECK-LABEL: cmpuge_v4i1:
297; CHECK: @ %bb.0: @ %entry
298; CHECK-NEXT: vcmp.u32 cs, q1, q2
Pierre-vhd5eb7ff2020-05-01 14:57:36 +0100299; CHECK-NEXT: vpnot
300; CHECK-NEXT: vpst
301; CHECK-NEXT: vcmpt.i32 ne, q0, zr
302; CHECK-NEXT: vpsel q0, q1, q0
David Greena4a46982019-07-24 14:17:54 +0000303; CHECK-NEXT: bx lr
304entry:
305 %c1 = icmp eq <4 x i32> %a, zeroinitializer
306 %c2 = icmp uge <4 x i32> %b, %c
307 %o = or <4 x i1> %c1, %c2
308 %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b
309 ret <4 x i32> %s
310}
311
312
313
314
315define arm_aapcs_vfpcc <8 x i16> @cmpeqz_v8i1(<8 x i16> %a, <8 x i16> %b) {
316; CHECK-LABEL: cmpeqz_v8i1:
317; CHECK: @ %bb.0: @ %entry
David Greence7328c2019-09-16 13:02:41 +0000318; CHECK-NEXT: vpt.i16 ne, q0, zr
David Greenbab4d8ac2019-07-24 16:42:09 +0000319; CHECK-NEXT: vcmpt.i16 ne, q1, zr
Pierre-vhffdda492020-04-07 15:09:56 +0100320; CHECK-NEXT: vpsel q0, q1, q0
David Greena4a46982019-07-24 14:17:54 +0000321; CHECK-NEXT: bx lr
322entry:
323 %c1 = icmp eq <8 x i16> %a, zeroinitializer
324 %c2 = icmp eq <8 x i16> %b, zeroinitializer
325 %o = or <8 x i1> %c1, %c2
326 %s = select <8 x i1> %o, <8 x i16> %a, <8 x i16> %b
327 ret <8 x i16> %s
328}
329
330define arm_aapcs_vfpcc <8 x i16> @cmpeq_v8i1(<8 x i16> %a, <8 x i16> %b, <8 x i16> %c) {
331; CHECK-LABEL: cmpeq_v8i1:
332; CHECK: @ %bb.0: @ %entry
David Greence7328c2019-09-16 13:02:41 +0000333; CHECK-NEXT: vpt.i16 ne, q0, zr
David Greenbab4d8ac2019-07-24 16:42:09 +0000334; CHECK-NEXT: vcmpt.i16 ne, q1, q2
Pierre-vhffdda492020-04-07 15:09:56 +0100335; CHECK-NEXT: vpsel q0, q1, q0
David Greena4a46982019-07-24 14:17:54 +0000336; CHECK-NEXT: bx lr
337entry:
338 %c1 = icmp eq <8 x i16> %a, zeroinitializer
339 %c2 = icmp eq <8 x i16> %b, %c
340 %o = or <8 x i1> %c1, %c2
341 %s = select <8 x i1> %o, <8 x i16> %a, <8 x i16> %b
342 ret <8 x i16> %s
343}
344
345
346define arm_aapcs_vfpcc <16 x i8> @cmpeqz_v16i1(<16 x i8> %a, <16 x i8> %b) {
347; CHECK-LABEL: cmpeqz_v16i1:
348; CHECK: @ %bb.0: @ %entry
David Greence7328c2019-09-16 13:02:41 +0000349; CHECK-NEXT: vpt.i8 ne, q0, zr
David Greenbab4d8ac2019-07-24 16:42:09 +0000350; CHECK-NEXT: vcmpt.i8 ne, q1, zr
Pierre-vhffdda492020-04-07 15:09:56 +0100351; CHECK-NEXT: vpsel q0, q1, q0
David Greena4a46982019-07-24 14:17:54 +0000352; CHECK-NEXT: bx lr
353entry:
354 %c1 = icmp eq <16 x i8> %a, zeroinitializer
355 %c2 = icmp eq <16 x i8> %b, zeroinitializer
356 %o = or <16 x i1> %c1, %c2
357 %s = select <16 x i1> %o, <16 x i8> %a, <16 x i8> %b
358 ret <16 x i8> %s
359}
360
361define arm_aapcs_vfpcc <16 x i8> @cmpeq_v16i1(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c) {
362; CHECK-LABEL: cmpeq_v16i1:
363; CHECK: @ %bb.0: @ %entry
David Greence7328c2019-09-16 13:02:41 +0000364; CHECK-NEXT: vpt.i8 ne, q0, zr
David Greenbab4d8ac2019-07-24 16:42:09 +0000365; CHECK-NEXT: vcmpt.i8 ne, q1, q2
Pierre-vhffdda492020-04-07 15:09:56 +0100366; CHECK-NEXT: vpsel q0, q1, q0
David Greena4a46982019-07-24 14:17:54 +0000367; CHECK-NEXT: bx lr
368entry:
369 %c1 = icmp eq <16 x i8> %a, zeroinitializer
370 %c2 = icmp eq <16 x i8> %b, %c
371 %o = or <16 x i1> %c1, %c2
372 %s = select <16 x i1> %o, <16 x i8> %a, <16 x i8> %b
373 ret <16 x i8> %s
374}
375
376
377define arm_aapcs_vfpcc <2 x i64> @cmpeqz_v2i1(<2 x i64> %a, <2 x i64> %b) {
378; CHECK-LABEL: cmpeqz_v2i1:
379; CHECK: @ %bb.0: @ %entry
380; CHECK-NEXT: vmov r0, s5
381; CHECK-NEXT: vmov r1, s4
382; CHECK-NEXT: orrs r0, r1
383; CHECK-NEXT: vmov r1, s6
David Green2f3574c2019-09-03 11:30:54 +0000384; CHECK-NEXT: cset r0, eq
David Green57cc65ff2019-09-03 10:53:07 +0000385; CHECK-NEXT: tst.w r0, #1
David Green2f3574c2019-09-03 11:30:54 +0000386; CHECK-NEXT: csetm r0, ne
David Greena4a46982019-07-24 14:17:54 +0000387; CHECK-NEXT: vmov.32 q2[0], r0
388; CHECK-NEXT: vmov.32 q2[1], r0
389; CHECK-NEXT: vmov r0, s7
390; CHECK-NEXT: orrs r0, r1
391; CHECK-NEXT: vmov r1, s0
David Green2f3574c2019-09-03 11:30:54 +0000392; CHECK-NEXT: cset r0, eq
David Green57cc65ff2019-09-03 10:53:07 +0000393; CHECK-NEXT: tst.w r0, #1
David Green2f3574c2019-09-03 11:30:54 +0000394; CHECK-NEXT: csetm r0, ne
David Greena4a46982019-07-24 14:17:54 +0000395; CHECK-NEXT: vmov.32 q2[2], r0
396; CHECK-NEXT: vmov.32 q2[3], r0
397; CHECK-NEXT: vmov r0, s1
398; CHECK-NEXT: orrs r0, r1
399; CHECK-NEXT: vmov r1, s2
David Green2f3574c2019-09-03 11:30:54 +0000400; CHECK-NEXT: cset r0, eq
David Green57cc65ff2019-09-03 10:53:07 +0000401; CHECK-NEXT: tst.w r0, #1
David Green2f3574c2019-09-03 11:30:54 +0000402; CHECK-NEXT: csetm r0, ne
David Greena4a46982019-07-24 14:17:54 +0000403; CHECK-NEXT: vmov.32 q3[0], r0
404; CHECK-NEXT: vmov.32 q3[1], r0
405; CHECK-NEXT: vmov r0, s3
406; CHECK-NEXT: orrs r0, r1
David Green2f3574c2019-09-03 11:30:54 +0000407; CHECK-NEXT: cset r0, eq
David Green57cc65ff2019-09-03 10:53:07 +0000408; CHECK-NEXT: tst.w r0, #1
David Green2f3574c2019-09-03 11:30:54 +0000409; CHECK-NEXT: csetm r0, ne
David Greena4a46982019-07-24 14:17:54 +0000410; CHECK-NEXT: vmov.32 q3[2], r0
411; CHECK-NEXT: vmov.32 q3[3], r0
412; CHECK-NEXT: vorr q2, q3, q2
413; CHECK-NEXT: vbic q1, q1, q2
414; CHECK-NEXT: vand q0, q0, q2
415; CHECK-NEXT: vorr q0, q0, q1
416; CHECK-NEXT: bx lr
417entry:
418 %c1 = icmp eq <2 x i64> %a, zeroinitializer
419 %c2 = icmp eq <2 x i64> %b, zeroinitializer
420 %o = or <2 x i1> %c1, %c2
421 %s = select <2 x i1> %o, <2 x i64> %a, <2 x i64> %b
422 ret <2 x i64> %s
423}
424
425define arm_aapcs_vfpcc <2 x i64> @cmpeq_v2i1(<2 x i64> %a, <2 x i64> %b, <2 x i64> %c) {
426; CHECK-LABEL: cmpeq_v2i1:
427; CHECK: @ %bb.0: @ %entry
428; CHECK-NEXT: vmov r0, s9
429; CHECK-NEXT: vmov r1, s5
430; CHECK-NEXT: vmov r2, s4
431; CHECK-NEXT: eors r0, r1
432; CHECK-NEXT: vmov r1, s8
433; CHECK-NEXT: eors r1, r2
434; CHECK-NEXT: vmov r2, s6
435; CHECK-NEXT: orrs r0, r1
436; CHECK-NEXT: vmov r1, s7
David Green2f3574c2019-09-03 11:30:54 +0000437; CHECK-NEXT: cset r0, eq
David Green57cc65ff2019-09-03 10:53:07 +0000438; CHECK-NEXT: tst.w r0, #1
David Green2f3574c2019-09-03 11:30:54 +0000439; CHECK-NEXT: csetm r0, ne
David Greena4a46982019-07-24 14:17:54 +0000440; CHECK-NEXT: vmov.32 q3[0], r0
441; CHECK-NEXT: vmov.32 q3[1], r0
442; CHECK-NEXT: vmov r0, s11
443; CHECK-NEXT: eors r0, r1
444; CHECK-NEXT: vmov r1, s10
445; CHECK-NEXT: eors r1, r2
446; CHECK-NEXT: orrs r0, r1
447; CHECK-NEXT: vmov r1, s0
David Green2f3574c2019-09-03 11:30:54 +0000448; CHECK-NEXT: cset r0, eq
David Green57cc65ff2019-09-03 10:53:07 +0000449; CHECK-NEXT: tst.w r0, #1
David Green2f3574c2019-09-03 11:30:54 +0000450; CHECK-NEXT: csetm r0, ne
David Greena4a46982019-07-24 14:17:54 +0000451; CHECK-NEXT: vmov.32 q3[2], r0
452; CHECK-NEXT: vmov.32 q3[3], r0
453; CHECK-NEXT: vmov r0, s1
454; CHECK-NEXT: orrs r0, r1
455; CHECK-NEXT: vmov r1, s2
David Green2f3574c2019-09-03 11:30:54 +0000456; CHECK-NEXT: cset r0, eq
David Green57cc65ff2019-09-03 10:53:07 +0000457; CHECK-NEXT: tst.w r0, #1
David Green2f3574c2019-09-03 11:30:54 +0000458; CHECK-NEXT: csetm r0, ne
David Greena4a46982019-07-24 14:17:54 +0000459; CHECK-NEXT: vmov.32 q2[0], r0
460; CHECK-NEXT: vmov.32 q2[1], r0
461; CHECK-NEXT: vmov r0, s3
462; CHECK-NEXT: orrs r0, r1
David Green2f3574c2019-09-03 11:30:54 +0000463; CHECK-NEXT: cset r0, eq
David Green57cc65ff2019-09-03 10:53:07 +0000464; CHECK-NEXT: tst.w r0, #1
David Green2f3574c2019-09-03 11:30:54 +0000465; CHECK-NEXT: csetm r0, ne
David Greena4a46982019-07-24 14:17:54 +0000466; CHECK-NEXT: vmov.32 q2[2], r0
467; CHECK-NEXT: vmov.32 q2[3], r0
468; CHECK-NEXT: vorr q2, q2, q3
469; CHECK-NEXT: vbic q1, q1, q2
470; CHECK-NEXT: vand q0, q0, q2
471; CHECK-NEXT: vorr q0, q0, q1
472; CHECK-NEXT: bx lr
473entry:
474 %c1 = icmp eq <2 x i64> %a, zeroinitializer
475 %c2 = icmp eq <2 x i64> %b, %c
476 %o = or <2 x i1> %c1, %c2
477 %s = select <2 x i1> %o, <2 x i64> %a, <2 x i64> %b
478 ret <2 x i64> %s
479}
480
481