blob: 4c0e19791d4cbb1806da7d0d78305e62fd3f9908 [file] [log] [blame]
Krzysztof Parzyszek47076052017-12-14 21:28:48 +00001; RUN: llc -march=hexagon < %s | FileCheck %s
2
3; --- Byte
4
5; CHECK-LABEL: test_00:
6; CHECK: q[[Q000:[0-3]]] = vcmp.eq(v0.b,v1.b)
7; CHECK: v0 = vmux(q[[Q000]],v0,v1)
8define <64 x i8> @test_00(<64 x i8> %v0, <64 x i8> %v1) #0 {
9 %t0 = icmp eq <64 x i8> %v0, %v1
10 %t1 = select <64 x i1> %t0, <64 x i8> %v0, <64 x i8> %v1
11 ret <64 x i8> %t1
12}
13
14; CHECK-LABEL: test_01:
15; CHECK: q[[Q010:[0-3]]] = vcmp.eq(v0.b,v1.b)
16; CHECK: q[[Q011:[0-9]]] = not(q[[Q010]])
17; CHECK: v0 = vmux(q[[Q011]],v0,v1)
18define <64 x i8> @test_01(<64 x i8> %v0, <64 x i8> %v1) #0 {
19 %t0 = icmp ne <64 x i8> %v0, %v1
20 %t1 = select <64 x i1> %t0, <64 x i8> %v0, <64 x i8> %v1
21 ret <64 x i8> %t1
22}
23
24; CHECK-LABEL: test_02:
25; CHECK: q[[Q020:[0-3]]] = vcmp.gt(v1.b,v0.b)
26; CHECK: v0 = vmux(q[[Q020]],v0,v1)
27define <64 x i8> @test_02(<64 x i8> %v0, <64 x i8> %v1) #0 {
28 %t0 = icmp slt <64 x i8> %v0, %v1
29 %t1 = select <64 x i1> %t0, <64 x i8> %v0, <64 x i8> %v1
30 ret <64 x i8> %t1
31}
32
33; CHECK-LABEL: test_03:
34; CHECK: q[[Q030:[0-3]]] = vcmp.gt(v0.b,v1.b)
35; CHECK: q[[Q031:[0-9]]] = not(q[[Q030]])
36; CHECK: v0 = vmux(q[[Q031]],v0,v1)
37define <64 x i8> @test_03(<64 x i8> %v0, <64 x i8> %v1) #0 {
38 %t0 = icmp sle <64 x i8> %v0, %v1
39 %t1 = select <64 x i1> %t0, <64 x i8> %v0, <64 x i8> %v1
40 ret <64 x i8> %t1
41}
42
43; CHECK-LABEL: test_04:
44; CHECK: q[[Q040:[0-3]]] = vcmp.gt(v0.b,v1.b)
45; CHECK: v0 = vmux(q[[Q040]],v0,v1)
46define <64 x i8> @test_04(<64 x i8> %v0, <64 x i8> %v1) #0 {
47 %t0 = icmp sgt <64 x i8> %v0, %v1
48 %t1 = select <64 x i1> %t0, <64 x i8> %v0, <64 x i8> %v1
49 ret <64 x i8> %t1
50}
51
52; CHECK-LABEL: test_05:
53; CHECK: q[[Q050:[0-3]]] = vcmp.gt(v1.b,v0.b)
54; CHECK: q[[Q051:[0-9]]] = not(q[[Q050]])
55; CHECK: v0 = vmux(q[[Q051]],v0,v1)
56define <64 x i8> @test_05(<64 x i8> %v0, <64 x i8> %v1) #0 {
57 %t0 = icmp sge <64 x i8> %v0, %v1
58 %t1 = select <64 x i1> %t0, <64 x i8> %v0, <64 x i8> %v1
59 ret <64 x i8> %t1
60}
61
62; CHECK-LABEL: test_06:
63; CHECK: q[[Q060:[0-3]]] = vcmp.gt(v1.ub,v0.ub)
64; CHECK: v0 = vmux(q[[Q060]],v0,v1)
65define <64 x i8> @test_06(<64 x i8> %v0, <64 x i8> %v1) #0 {
66 %t0 = icmp ult <64 x i8> %v0, %v1
67 %t1 = select <64 x i1> %t0, <64 x i8> %v0, <64 x i8> %v1
68 ret <64 x i8> %t1
69}
70
71; CHECK-LABEL: test_07:
72; CHECK: q[[Q070:[0-3]]] = vcmp.gt(v0.ub,v1.ub)
73; CHECK: q[[Q071:[0-9]]] = not(q[[Q070]])
74; CHECK: v0 = vmux(q[[Q071]],v0,v1)
75define <64 x i8> @test_07(<64 x i8> %v0, <64 x i8> %v1) #0 {
76 %t0 = icmp ule <64 x i8> %v0, %v1
77 %t1 = select <64 x i1> %t0, <64 x i8> %v0, <64 x i8> %v1
78 ret <64 x i8> %t1
79}
80
81; CHECK-LABEL: test_08:
82; CHECK: q[[Q080:[0-3]]] = vcmp.gt(v0.ub,v1.ub)
83; CHECK: v0 = vmux(q[[Q080]],v0,v1)
84define <64 x i8> @test_08(<64 x i8> %v0, <64 x i8> %v1) #0 {
85 %t0 = icmp ugt <64 x i8> %v0, %v1
86 %t1 = select <64 x i1> %t0, <64 x i8> %v0, <64 x i8> %v1
87 ret <64 x i8> %t1
88}
89
90; CHECK-LABEL: test_09:
91; CHECK: q[[Q090:[0-3]]] = vcmp.gt(v1.ub,v0.ub)
92; CHECK: q[[Q091:[0-9]]] = not(q[[Q090]])
93; CHECK: v0 = vmux(q[[Q091]],v0,v1)
94define <64 x i8> @test_09(<64 x i8> %v0, <64 x i8> %v1) #0 {
95 %t0 = icmp uge <64 x i8> %v0, %v1
96 %t1 = select <64 x i1> %t0, <64 x i8> %v0, <64 x i8> %v1
97 ret <64 x i8> %t1
98}
99
100; --- Half
101
102; CHECK-LABEL: test_10:
103; CHECK: q[[Q100:[0-3]]] = vcmp.eq(v0.h,v1.h)
104; CHECK: v0 = vmux(q[[Q100]],v0,v1)
105define <32 x i16> @test_10(<32 x i16> %v0, <32 x i16> %v1) #0 {
106 %t0 = icmp eq <32 x i16> %v0, %v1
107 %t1 = select <32 x i1> %t0, <32 x i16> %v0, <32 x i16> %v1
108 ret <32 x i16> %t1
109}
110
111; CHECK-LABEL: test_11:
112; CHECK: q[[Q110:[0-3]]] = vcmp.eq(v0.h,v1.h)
113; CHECK: q[[Q111:[0-9]]] = not(q[[Q110]])
114; CHECK: v0 = vmux(q[[Q111]],v0,v1)
115define <32 x i16> @test_11(<32 x i16> %v0, <32 x i16> %v1) #0 {
116 %t0 = icmp ne <32 x i16> %v0, %v1
117 %t1 = select <32 x i1> %t0, <32 x i16> %v0, <32 x i16> %v1
118 ret <32 x i16> %t1
119}
120
121; CHECK-LABEL: test_12:
122; CHECK: q[[Q120:[0-3]]] = vcmp.gt(v1.h,v0.h)
123; CHECK: v0 = vmux(q[[Q120]],v0,v1)
124define <32 x i16> @test_12(<32 x i16> %v0, <32 x i16> %v1) #0 {
125 %t0 = icmp slt <32 x i16> %v0, %v1
126 %t1 = select <32 x i1> %t0, <32 x i16> %v0, <32 x i16> %v1
127 ret <32 x i16> %t1
128}
129
130; CHECK-LABEL: test_13:
131; CHECK: q[[Q130:[0-3]]] = vcmp.gt(v0.h,v1.h)
132; CHECK: q[[Q131:[0-9]]] = not(q[[Q130]])
133; CHECK: v0 = vmux(q[[Q031]],v0,v1)
134define <32 x i16> @test_13(<32 x i16> %v0, <32 x i16> %v1) #0 {
135 %t0 = icmp sle <32 x i16> %v0, %v1
136 %t1 = select <32 x i1> %t0, <32 x i16> %v0, <32 x i16> %v1
137 ret <32 x i16> %t1
138}
139
140; CHECK-LABEL: test_14:
141; CHECK: q[[Q140:[0-3]]] = vcmp.gt(v0.h,v1.h)
142; CHECK: v0 = vmux(q[[Q140]],v0,v1)
143define <32 x i16> @test_14(<32 x i16> %v0, <32 x i16> %v1) #0 {
144 %t0 = icmp sgt <32 x i16> %v0, %v1
145 %t1 = select <32 x i1> %t0, <32 x i16> %v0, <32 x i16> %v1
146 ret <32 x i16> %t1
147}
148
149; CHECK-LABEL: test_15:
150; CHECK: q[[Q150:[0-3]]] = vcmp.gt(v1.h,v0.h)
151; CHECK: q[[Q151:[0-9]]] = not(q[[Q150]])
152; CHECK: v0 = vmux(q[[Q151]],v0,v1)
153define <32 x i16> @test_15(<32 x i16> %v0, <32 x i16> %v1) #0 {
154 %t0 = icmp sge <32 x i16> %v0, %v1
155 %t1 = select <32 x i1> %t0, <32 x i16> %v0, <32 x i16> %v1
156 ret <32 x i16> %t1
157}
158
159; CHECK-LABEL: test_16:
160; CHECK: q[[Q160:[0-3]]] = vcmp.gt(v1.uh,v0.uh)
161; CHECK: v0 = vmux(q[[Q160]],v0,v1)
162define <32 x i16> @test_16(<32 x i16> %v0, <32 x i16> %v1) #0 {
163 %t0 = icmp ult <32 x i16> %v0, %v1
164 %t1 = select <32 x i1> %t0, <32 x i16> %v0, <32 x i16> %v1
165 ret <32 x i16> %t1
166}
167
168; CHECK-LABEL: test_17:
169; CHECK: q[[Q170:[0-3]]] = vcmp.gt(v0.uh,v1.uh)
170; CHECK: q[[Q171:[0-9]]] = not(q[[Q170]])
171; CHECK: v0 = vmux(q[[Q171]],v0,v1)
172define <32 x i16> @test_17(<32 x i16> %v0, <32 x i16> %v1) #0 {
173 %t0 = icmp ule <32 x i16> %v0, %v1
174 %t1 = select <32 x i1> %t0, <32 x i16> %v0, <32 x i16> %v1
175 ret <32 x i16> %t1
176}
177
178; CHECK-LABEL: test_18:
179; CHECK: q[[Q180:[0-3]]] = vcmp.gt(v0.uh,v1.uh)
180; CHECK: v0 = vmux(q[[Q180]],v0,v1)
181define <32 x i16> @test_18(<32 x i16> %v0, <32 x i16> %v1) #0 {
182 %t0 = icmp ugt <32 x i16> %v0, %v1
183 %t1 = select <32 x i1> %t0, <32 x i16> %v0, <32 x i16> %v1
184 ret <32 x i16> %t1
185}
186
187; CHECK-LABEL: test_19:
188; CHECK: q[[Q190:[0-3]]] = vcmp.gt(v1.uh,v0.uh)
189; CHECK: q[[Q191:[0-9]]] = not(q[[Q190]])
190; CHECK: v0 = vmux(q[[Q191]],v0,v1)
191define <32 x i16> @test_19(<32 x i16> %v0, <32 x i16> %v1) #0 {
192 %t0 = icmp uge <32 x i16> %v0, %v1
193 %t1 = select <32 x i1> %t0, <32 x i16> %v0, <32 x i16> %v1
194 ret <32 x i16> %t1
195}
196
197; --- Word
198
199; CHECK-LABEL: test_20:
200; CHECK: q[[Q200:[0-3]]] = vcmp.eq(v0.w,v1.w)
201; CHECK: v0 = vmux(q[[Q200]],v0,v1)
202define <16 x i32> @test_20(<16 x i32> %v0, <16 x i32> %v1) #0 {
203 %t0 = icmp eq <16 x i32> %v0, %v1
204 %t1 = select <16 x i1> %t0, <16 x i32> %v0, <16 x i32> %v1
205 ret <16 x i32> %t1
206}
207
208; CHECK-LABEL: test_21:
209; CHECK: q[[Q210:[0-3]]] = vcmp.eq(v0.w,v1.w)
210; CHECK: q[[Q211:[0-9]]] = not(q[[Q210]])
211; CHECK: v0 = vmux(q[[Q211]],v0,v1)
212define <16 x i32> @test_21(<16 x i32> %v0, <16 x i32> %v1) #0 {
213 %t0 = icmp ne <16 x i32> %v0, %v1
214 %t1 = select <16 x i1> %t0, <16 x i32> %v0, <16 x i32> %v1
215 ret <16 x i32> %t1
216}
217
218; CHECK-LABEL: test_22:
219; CHECK: q[[Q220:[0-3]]] = vcmp.gt(v1.w,v0.w)
220; CHECK: v0 = vmux(q[[Q220]],v0,v1)
221define <16 x i32> @test_22(<16 x i32> %v0, <16 x i32> %v1) #0 {
222 %t0 = icmp slt <16 x i32> %v0, %v1
223 %t1 = select <16 x i1> %t0, <16 x i32> %v0, <16 x i32> %v1
224 ret <16 x i32> %t1
225}
226
227; CHECK-LABEL: test_23:
228; CHECK: q[[Q230:[0-3]]] = vcmp.gt(v0.w,v1.w)
229; CHECK: q[[Q231:[0-9]]] = not(q[[Q230]])
230; CHECK: v0 = vmux(q[[Q031]],v0,v1)
231define <16 x i32> @test_23(<16 x i32> %v0, <16 x i32> %v1) #0 {
232 %t0 = icmp sle <16 x i32> %v0, %v1
233 %t1 = select <16 x i1> %t0, <16 x i32> %v0, <16 x i32> %v1
234 ret <16 x i32> %t1
235}
236
237; CHECK-LABEL: test_24:
238; CHECK: q[[Q240:[0-3]]] = vcmp.gt(v0.w,v1.w)
239; CHECK: v0 = vmux(q[[Q240]],v0,v1)
240define <16 x i32> @test_24(<16 x i32> %v0, <16 x i32> %v1) #0 {
241 %t0 = icmp sgt <16 x i32> %v0, %v1
242 %t1 = select <16 x i1> %t0, <16 x i32> %v0, <16 x i32> %v1
243 ret <16 x i32> %t1
244}
245
246; CHECK-LABEL: test_25:
247; CHECK: q[[Q250:[0-3]]] = vcmp.gt(v1.w,v0.w)
248; CHECK: q[[Q251:[0-9]]] = not(q[[Q250]])
249; CHECK: v0 = vmux(q[[Q251]],v0,v1)
250define <16 x i32> @test_25(<16 x i32> %v0, <16 x i32> %v1) #0 {
251 %t0 = icmp sge <16 x i32> %v0, %v1
252 %t1 = select <16 x i1> %t0, <16 x i32> %v0, <16 x i32> %v1
253 ret <16 x i32> %t1
254}
255
256; CHECK-LABEL: test_26:
257; CHECK: q[[Q260:[0-3]]] = vcmp.gt(v1.uw,v0.uw)
258; CHECK: v0 = vmux(q[[Q260]],v0,v1)
259define <16 x i32> @test_26(<16 x i32> %v0, <16 x i32> %v1) #0 {
260 %t0 = icmp ult <16 x i32> %v0, %v1
261 %t1 = select <16 x i1> %t0, <16 x i32> %v0, <16 x i32> %v1
262 ret <16 x i32> %t1
263}
264
265; CHECK-LABEL: test_27:
266; CHECK: q[[Q270:[0-3]]] = vcmp.gt(v0.uw,v1.uw)
267; CHECK: q[[Q271:[0-9]]] = not(q[[Q270]])
268; CHECK: v0 = vmux(q[[Q271]],v0,v1)
269define <16 x i32> @test_27(<16 x i32> %v0, <16 x i32> %v1) #0 {
270 %t0 = icmp ule <16 x i32> %v0, %v1
271 %t1 = select <16 x i1> %t0, <16 x i32> %v0, <16 x i32> %v1
272 ret <16 x i32> %t1
273}
274
275; CHECK-LABEL: test_28:
276; CHECK: q[[Q280:[0-3]]] = vcmp.gt(v0.uw,v1.uw)
277; CHECK: v0 = vmux(q[[Q280]],v0,v1)
278define <16 x i32> @test_28(<16 x i32> %v0, <16 x i32> %v1) #0 {
279 %t0 = icmp ugt <16 x i32> %v0, %v1
280 %t1 = select <16 x i1> %t0, <16 x i32> %v0, <16 x i32> %v1
281 ret <16 x i32> %t1
282}
283
284; CHECK-LABEL: test_29:
285; CHECK: q[[Q290:[0-3]]] = vcmp.gt(v1.uw,v0.uw)
286; CHECK: q[[Q291:[0-9]]] = not(q[[Q290]])
287; CHECK: v0 = vmux(q[[Q291]],v0,v1)
288define <16 x i32> @test_29(<16 x i32> %v0, <16 x i32> %v1) #0 {
289 %t0 = icmp uge <16 x i32> %v0, %v1
290 %t1 = select <16 x i1> %t0, <16 x i32> %v0, <16 x i32> %v1
291 ret <16 x i32> %t1
292}
293
294attributes #0 = { nounwind readnone "target-cpu"="hexagonv60" "target-features"="+hvx,+hvx-length64b" }