blob: dd15518dbd8363b9ce2512c268c14f3c236f5365 [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 <128 x i8> @test_00(<128 x i8> %v0, <128 x i8> %v1) #0 {
9 %t0 = icmp eq <128 x i8> %v0, %v1
10 %t1 = select <128 x i1> %t0, <128 x i8> %v0, <128 x i8> %v1
11 ret <128 x i8> %t1
12}
13
14; CHECK-LABEL: test_01:
15; CHECK: q[[Q010:[0-3]]] = vcmp.eq(v0.b,v1.b)
Krzysztof Parzyszek69f1d7e2018-02-06 14:16:52 +000016; CHECK: v0 = vmux(q[[Q010]],v1,v0)
Krzysztof Parzyszek47076052017-12-14 21:28:48 +000017define <128 x i8> @test_01(<128 x i8> %v0, <128 x i8> %v1) #0 {
18 %t0 = icmp ne <128 x i8> %v0, %v1
19 %t1 = select <128 x i1> %t0, <128 x i8> %v0, <128 x i8> %v1
20 ret <128 x i8> %t1
21}
22
23; CHECK-LABEL: test_02:
24; CHECK: q[[Q020:[0-3]]] = vcmp.gt(v1.b,v0.b)
25; CHECK: v0 = vmux(q[[Q020]],v0,v1)
26define <128 x i8> @test_02(<128 x i8> %v0, <128 x i8> %v1) #0 {
27 %t0 = icmp slt <128 x i8> %v0, %v1
28 %t1 = select <128 x i1> %t0, <128 x i8> %v0, <128 x i8> %v1
29 ret <128 x i8> %t1
30}
31
32; CHECK-LABEL: test_03:
33; CHECK: q[[Q030:[0-3]]] = vcmp.gt(v0.b,v1.b)
Krzysztof Parzyszek69f1d7e2018-02-06 14:16:52 +000034; CHECK: v0 = vmux(q[[Q030]],v1,v0)
Krzysztof Parzyszek47076052017-12-14 21:28:48 +000035define <128 x i8> @test_03(<128 x i8> %v0, <128 x i8> %v1) #0 {
36 %t0 = icmp sle <128 x i8> %v0, %v1
37 %t1 = select <128 x i1> %t0, <128 x i8> %v0, <128 x i8> %v1
38 ret <128 x i8> %t1
39}
40
41; CHECK-LABEL: test_04:
42; CHECK: q[[Q040:[0-3]]] = vcmp.gt(v0.b,v1.b)
43; CHECK: v0 = vmux(q[[Q040]],v0,v1)
44define <128 x i8> @test_04(<128 x i8> %v0, <128 x i8> %v1) #0 {
45 %t0 = icmp sgt <128 x i8> %v0, %v1
46 %t1 = select <128 x i1> %t0, <128 x i8> %v0, <128 x i8> %v1
47 ret <128 x i8> %t1
48}
49
50; CHECK-LABEL: test_05:
51; CHECK: q[[Q050:[0-3]]] = vcmp.gt(v1.b,v0.b)
Krzysztof Parzyszek69f1d7e2018-02-06 14:16:52 +000052; CHECK: v0 = vmux(q[[Q050]],v1,v0)
Krzysztof Parzyszek47076052017-12-14 21:28:48 +000053define <128 x i8> @test_05(<128 x i8> %v0, <128 x i8> %v1) #0 {
54 %t0 = icmp sge <128 x i8> %v0, %v1
55 %t1 = select <128 x i1> %t0, <128 x i8> %v0, <128 x i8> %v1
56 ret <128 x i8> %t1
57}
58
59; CHECK-LABEL: test_06:
60; CHECK: q[[Q060:[0-3]]] = vcmp.gt(v1.ub,v0.ub)
61; CHECK: v0 = vmux(q[[Q060]],v0,v1)
62define <128 x i8> @test_06(<128 x i8> %v0, <128 x i8> %v1) #0 {
63 %t0 = icmp ult <128 x i8> %v0, %v1
64 %t1 = select <128 x i1> %t0, <128 x i8> %v0, <128 x i8> %v1
65 ret <128 x i8> %t1
66}
67
68; CHECK-LABEL: test_07:
69; CHECK: q[[Q070:[0-3]]] = vcmp.gt(v0.ub,v1.ub)
Krzysztof Parzyszek69f1d7e2018-02-06 14:16:52 +000070; CHECK: v0 = vmux(q[[Q070]],v1,v0)
Krzysztof Parzyszek47076052017-12-14 21:28:48 +000071define <128 x i8> @test_07(<128 x i8> %v0, <128 x i8> %v1) #0 {
72 %t0 = icmp ule <128 x i8> %v0, %v1
73 %t1 = select <128 x i1> %t0, <128 x i8> %v0, <128 x i8> %v1
74 ret <128 x i8> %t1
75}
76
77; CHECK-LABEL: test_08:
78; CHECK: q[[Q080:[0-3]]] = vcmp.gt(v0.ub,v1.ub)
79; CHECK: v0 = vmux(q[[Q080]],v0,v1)
80define <128 x i8> @test_08(<128 x i8> %v0, <128 x i8> %v1) #0 {
81 %t0 = icmp ugt <128 x i8> %v0, %v1
82 %t1 = select <128 x i1> %t0, <128 x i8> %v0, <128 x i8> %v1
83 ret <128 x i8> %t1
84}
85
86; CHECK-LABEL: test_09:
87; CHECK: q[[Q090:[0-3]]] = vcmp.gt(v1.ub,v0.ub)
Krzysztof Parzyszek69f1d7e2018-02-06 14:16:52 +000088; CHECK: v0 = vmux(q[[Q090]],v1,v0)
Krzysztof Parzyszek47076052017-12-14 21:28:48 +000089define <128 x i8> @test_09(<128 x i8> %v0, <128 x i8> %v1) #0 {
90 %t0 = icmp uge <128 x i8> %v0, %v1
91 %t1 = select <128 x i1> %t0, <128 x i8> %v0, <128 x i8> %v1
92 ret <128 x i8> %t1
93}
94
95; --- Half
96
97; CHECK-LABEL: test_10:
98; CHECK: q[[Q100:[0-3]]] = vcmp.eq(v0.h,v1.h)
99; CHECK: v0 = vmux(q[[Q100]],v0,v1)
100define <64 x i16> @test_10(<64 x i16> %v0, <64 x i16> %v1) #0 {
101 %t0 = icmp eq <64 x i16> %v0, %v1
102 %t1 = select <64 x i1> %t0, <64 x i16> %v0, <64 x i16> %v1
103 ret <64 x i16> %t1
104}
105
106; CHECK-LABEL: test_11:
107; CHECK: q[[Q110:[0-3]]] = vcmp.eq(v0.h,v1.h)
Krzysztof Parzyszek69f1d7e2018-02-06 14:16:52 +0000108; CHECK: v0 = vmux(q[[Q110]],v1,v0)
Krzysztof Parzyszek47076052017-12-14 21:28:48 +0000109define <64 x i16> @test_11(<64 x i16> %v0, <64 x i16> %v1) #0 {
110 %t0 = icmp ne <64 x i16> %v0, %v1
111 %t1 = select <64 x i1> %t0, <64 x i16> %v0, <64 x i16> %v1
112 ret <64 x i16> %t1
113}
114
115; CHECK-LABEL: test_12:
116; CHECK: q[[Q120:[0-3]]] = vcmp.gt(v1.h,v0.h)
117; CHECK: v0 = vmux(q[[Q120]],v0,v1)
118define <64 x i16> @test_12(<64 x i16> %v0, <64 x i16> %v1) #0 {
119 %t0 = icmp slt <64 x i16> %v0, %v1
120 %t1 = select <64 x i1> %t0, <64 x i16> %v0, <64 x i16> %v1
121 ret <64 x i16> %t1
122}
123
124; CHECK-LABEL: test_13:
125; CHECK: q[[Q130:[0-3]]] = vcmp.gt(v0.h,v1.h)
Krzysztof Parzyszek69f1d7e2018-02-06 14:16:52 +0000126; CHECK: v0 = vmux(q[[Q130]],v1,v0)
Krzysztof Parzyszek47076052017-12-14 21:28:48 +0000127define <64 x i16> @test_13(<64 x i16> %v0, <64 x i16> %v1) #0 {
128 %t0 = icmp sle <64 x i16> %v0, %v1
129 %t1 = select <64 x i1> %t0, <64 x i16> %v0, <64 x i16> %v1
130 ret <64 x i16> %t1
131}
132
133; CHECK-LABEL: test_14:
134; CHECK: q[[Q140:[0-3]]] = vcmp.gt(v0.h,v1.h)
135; CHECK: v0 = vmux(q[[Q140]],v0,v1)
136define <64 x i16> @test_14(<64 x i16> %v0, <64 x i16> %v1) #0 {
137 %t0 = icmp sgt <64 x i16> %v0, %v1
138 %t1 = select <64 x i1> %t0, <64 x i16> %v0, <64 x i16> %v1
139 ret <64 x i16> %t1
140}
141
142; CHECK-LABEL: test_15:
143; CHECK: q[[Q150:[0-3]]] = vcmp.gt(v1.h,v0.h)
Krzysztof Parzyszek69f1d7e2018-02-06 14:16:52 +0000144; CHECK: v0 = vmux(q[[Q150]],v1,v0)
Krzysztof Parzyszek47076052017-12-14 21:28:48 +0000145define <64 x i16> @test_15(<64 x i16> %v0, <64 x i16> %v1) #0 {
146 %t0 = icmp sge <64 x i16> %v0, %v1
147 %t1 = select <64 x i1> %t0, <64 x i16> %v0, <64 x i16> %v1
148 ret <64 x i16> %t1
149}
150
151; CHECK-LABEL: test_16:
152; CHECK: q[[Q160:[0-3]]] = vcmp.gt(v1.uh,v0.uh)
153; CHECK: v0 = vmux(q[[Q160]],v0,v1)
154define <64 x i16> @test_16(<64 x i16> %v0, <64 x i16> %v1) #0 {
155 %t0 = icmp ult <64 x i16> %v0, %v1
156 %t1 = select <64 x i1> %t0, <64 x i16> %v0, <64 x i16> %v1
157 ret <64 x i16> %t1
158}
159
160; CHECK-LABEL: test_17:
161; CHECK: q[[Q170:[0-3]]] = vcmp.gt(v0.uh,v1.uh)
Krzysztof Parzyszek69f1d7e2018-02-06 14:16:52 +0000162; CHECK: v0 = vmux(q[[Q170]],v1,v0)
Krzysztof Parzyszek47076052017-12-14 21:28:48 +0000163define <64 x i16> @test_17(<64 x i16> %v0, <64 x i16> %v1) #0 {
164 %t0 = icmp ule <64 x i16> %v0, %v1
165 %t1 = select <64 x i1> %t0, <64 x i16> %v0, <64 x i16> %v1
166 ret <64 x i16> %t1
167}
168
169; CHECK-LABEL: test_18:
170; CHECK: q[[Q180:[0-3]]] = vcmp.gt(v0.uh,v1.uh)
171; CHECK: v0 = vmux(q[[Q180]],v0,v1)
172define <64 x i16> @test_18(<64 x i16> %v0, <64 x i16> %v1) #0 {
173 %t0 = icmp ugt <64 x i16> %v0, %v1
174 %t1 = select <64 x i1> %t0, <64 x i16> %v0, <64 x i16> %v1
175 ret <64 x i16> %t1
176}
177
178; CHECK-LABEL: test_19:
179; CHECK: q[[Q190:[0-3]]] = vcmp.gt(v1.uh,v0.uh)
Krzysztof Parzyszek69f1d7e2018-02-06 14:16:52 +0000180; CHECK: v0 = vmux(q[[Q190]],v1,v0)
Krzysztof Parzyszek47076052017-12-14 21:28:48 +0000181define <64 x i16> @test_19(<64 x i16> %v0, <64 x i16> %v1) #0 {
182 %t0 = icmp uge <64 x i16> %v0, %v1
183 %t1 = select <64 x i1> %t0, <64 x i16> %v0, <64 x i16> %v1
184 ret <64 x i16> %t1
185}
186
187; --- Word
188
189; CHECK-LABEL: test_20:
190; CHECK: q[[Q200:[0-3]]] = vcmp.eq(v0.w,v1.w)
191; CHECK: v0 = vmux(q[[Q200]],v0,v1)
192define <32 x i32> @test_20(<32 x i32> %v0, <32 x i32> %v1) #0 {
193 %t0 = icmp eq <32 x i32> %v0, %v1
194 %t1 = select <32 x i1> %t0, <32 x i32> %v0, <32 x i32> %v1
195 ret <32 x i32> %t1
196}
197
198; CHECK-LABEL: test_21:
199; CHECK: q[[Q210:[0-3]]] = vcmp.eq(v0.w,v1.w)
Krzysztof Parzyszek69f1d7e2018-02-06 14:16:52 +0000200; CHECK: v0 = vmux(q[[Q210]],v1,v0)
Krzysztof Parzyszek47076052017-12-14 21:28:48 +0000201define <32 x i32> @test_21(<32 x i32> %v0, <32 x i32> %v1) #0 {
202 %t0 = icmp ne <32 x i32> %v0, %v1
203 %t1 = select <32 x i1> %t0, <32 x i32> %v0, <32 x i32> %v1
204 ret <32 x i32> %t1
205}
206
207; CHECK-LABEL: test_22:
208; CHECK: q[[Q220:[0-3]]] = vcmp.gt(v1.w,v0.w)
209; CHECK: v0 = vmux(q[[Q220]],v0,v1)
210define <32 x i32> @test_22(<32 x i32> %v0, <32 x i32> %v1) #0 {
211 %t0 = icmp slt <32 x i32> %v0, %v1
212 %t1 = select <32 x i1> %t0, <32 x i32> %v0, <32 x i32> %v1
213 ret <32 x i32> %t1
214}
215
216; CHECK-LABEL: test_23:
217; CHECK: q[[Q230:[0-3]]] = vcmp.gt(v0.w,v1.w)
Krzysztof Parzyszek69f1d7e2018-02-06 14:16:52 +0000218; CHECK: v0 = vmux(q[[Q230]],v1,v0)
Krzysztof Parzyszek47076052017-12-14 21:28:48 +0000219define <32 x i32> @test_23(<32 x i32> %v0, <32 x i32> %v1) #0 {
220 %t0 = icmp sle <32 x i32> %v0, %v1
221 %t1 = select <32 x i1> %t0, <32 x i32> %v0, <32 x i32> %v1
222 ret <32 x i32> %t1
223}
224
225; CHECK-LABEL: test_24:
226; CHECK: q[[Q240:[0-3]]] = vcmp.gt(v0.w,v1.w)
227; CHECK: v0 = vmux(q[[Q240]],v0,v1)
228define <32 x i32> @test_24(<32 x i32> %v0, <32 x i32> %v1) #0 {
229 %t0 = icmp sgt <32 x i32> %v0, %v1
230 %t1 = select <32 x i1> %t0, <32 x i32> %v0, <32 x i32> %v1
231 ret <32 x i32> %t1
232}
233
234; CHECK-LABEL: test_25:
235; CHECK: q[[Q250:[0-3]]] = vcmp.gt(v1.w,v0.w)
Krzysztof Parzyszek69f1d7e2018-02-06 14:16:52 +0000236; CHECK: v0 = vmux(q[[Q250]],v1,v0)
Krzysztof Parzyszek47076052017-12-14 21:28:48 +0000237define <32 x i32> @test_25(<32 x i32> %v0, <32 x i32> %v1) #0 {
238 %t0 = icmp sge <32 x i32> %v0, %v1
239 %t1 = select <32 x i1> %t0, <32 x i32> %v0, <32 x i32> %v1
240 ret <32 x i32> %t1
241}
242
243; CHECK-LABEL: test_26:
244; CHECK: q[[Q260:[0-3]]] = vcmp.gt(v1.uw,v0.uw)
245; CHECK: v0 = vmux(q[[Q260]],v0,v1)
246define <32 x i32> @test_26(<32 x i32> %v0, <32 x i32> %v1) #0 {
247 %t0 = icmp ult <32 x i32> %v0, %v1
248 %t1 = select <32 x i1> %t0, <32 x i32> %v0, <32 x i32> %v1
249 ret <32 x i32> %t1
250}
251
252; CHECK-LABEL: test_27:
253; CHECK: q[[Q270:[0-3]]] = vcmp.gt(v0.uw,v1.uw)
Krzysztof Parzyszek69f1d7e2018-02-06 14:16:52 +0000254; CHECK: v0 = vmux(q[[Q270]],v1,v0)
Krzysztof Parzyszek47076052017-12-14 21:28:48 +0000255define <32 x i32> @test_27(<32 x i32> %v0, <32 x i32> %v1) #0 {
256 %t0 = icmp ule <32 x i32> %v0, %v1
257 %t1 = select <32 x i1> %t0, <32 x i32> %v0, <32 x i32> %v1
258 ret <32 x i32> %t1
259}
260
261; CHECK-LABEL: test_28:
262; CHECK: q[[Q280:[0-3]]] = vcmp.gt(v0.uw,v1.uw)
263; CHECK: v0 = vmux(q[[Q280]],v0,v1)
264define <32 x i32> @test_28(<32 x i32> %v0, <32 x i32> %v1) #0 {
265 %t0 = icmp ugt <32 x i32> %v0, %v1
266 %t1 = select <32 x i1> %t0, <32 x i32> %v0, <32 x i32> %v1
267 ret <32 x i32> %t1
268}
269
270; CHECK-LABEL: test_29:
271; CHECK: q[[Q290:[0-3]]] = vcmp.gt(v1.uw,v0.uw)
Krzysztof Parzyszek69f1d7e2018-02-06 14:16:52 +0000272; CHECK: v0 = vmux(q[[Q290]],v1,v0)
Krzysztof Parzyszek47076052017-12-14 21:28:48 +0000273define <32 x i32> @test_29(<32 x i32> %v0, <32 x i32> %v1) #0 {
274 %t0 = icmp uge <32 x i32> %v0, %v1
275 %t1 = select <32 x i1> %t0, <32 x i32> %v0, <32 x i32> %v1
276 ret <32 x i32> %t1
277}
278
279attributes #0 = { nounwind readnone "target-cpu"="hexagonv60" "target-features"="+hvx,+hvx-length128b" }