1 ; RUN: llc -march=hexagon < %s | FileCheck %s
6 ; CHECK: v0.b = vmin(v0.b,v1.b)
7 define <128 x i8> @test_00(<128 x i8> %v0, <128 x i8> %v1) #0 {
8 %t0 = icmp slt <128 x i8> %v0, %v1
9 %t1 = select <128 x i1> %t0, <128 x i8> %v0, <128 x i8> %v1
14 ; CHECK: v0.b = vmin(v0.b,v1.b)
15 define <128 x i8> @test_01(<128 x i8> %v0, <128 x i8> %v1) #0 {
16 %t0 = icmp sle <128 x i8> %v0, %v1
17 %t1 = select <128 x i1> %t0, <128 x i8> %v0, <128 x i8> %v1
22 ; CHECK: v0.b = vmin(v0.b,v1.b)
23 define <128 x i8> @test_02(<128 x i8> %v0, <128 x i8> %v1) #0 {
24 %t0 = icmp sgt <128 x i8> %v0, %v1
25 %t1 = select <128 x i1> %t0, <128 x i8> %v1, <128 x i8> %v0
30 ; CHECK: v0.b = vmin(v0.b,v1.b)
31 define <128 x i8> @test_03(<128 x i8> %v0, <128 x i8> %v1) #0 {
32 %t0 = icmp sge <128 x i8> %v0, %v1
33 %t1 = select <128 x i1> %t0, <128 x i8> %v1, <128 x i8> %v0
40 ; CHECK: v0.b = vmax(v0.b,v1.b)
41 define <128 x i8> @test_04(<128 x i8> %v0, <128 x i8> %v1) #0 {
42 %t0 = icmp slt <128 x i8> %v0, %v1
43 %t1 = select <128 x i1> %t0, <128 x i8> %v1, <128 x i8> %v0
48 ; CHECK: v0.b = vmax(v0.b,v1.b)
49 define <128 x i8> @test_05(<128 x i8> %v0, <128 x i8> %v1) #0 {
50 %t0 = icmp sle <128 x i8> %v0, %v1
51 %t1 = select <128 x i1> %t0, <128 x i8> %v1, <128 x i8> %v0
56 ; CHECK: v0.b = vmax(v0.b,v1.b)
57 define <128 x i8> @test_06(<128 x i8> %v0, <128 x i8> %v1) #0 {
58 %t0 = icmp sgt <128 x i8> %v0, %v1
59 %t1 = select <128 x i1> %t0, <128 x i8> %v0, <128 x i8> %v1
64 ; CHECK: v0.b = vmax(v0.b,v1.b)
65 define <128 x i8> @test_07(<128 x i8> %v0, <128 x i8> %v1) #0 {
66 %t0 = icmp sge <128 x i8> %v0, %v1
67 %t1 = select <128 x i1> %t0, <128 x i8> %v0, <128 x i8> %v1
74 ; CHECK: v0.ub = vmin(v0.ub,v1.ub)
75 define <128 x i8> @test_08(<128 x i8> %v0, <128 x i8> %v1) #0 {
76 %t0 = icmp ult <128 x i8> %v0, %v1
77 %t1 = select <128 x i1> %t0, <128 x i8> %v0, <128 x i8> %v1
82 ; CHECK: v0.ub = vmin(v0.ub,v1.ub)
83 define <128 x i8> @test_09(<128 x i8> %v0, <128 x i8> %v1) #0 {
84 %t0 = icmp ule <128 x i8> %v0, %v1
85 %t1 = select <128 x i1> %t0, <128 x i8> %v0, <128 x i8> %v1
90 ; CHECK: v0.ub = vmin(v0.ub,v1.ub)
91 define <128 x i8> @test_0a(<128 x i8> %v0, <128 x i8> %v1) #0 {
92 %t0 = icmp ugt <128 x i8> %v0, %v1
93 %t1 = select <128 x i1> %t0, <128 x i8> %v1, <128 x i8> %v0
98 ; CHECK: v0.ub = vmin(v0.ub,v1.ub)
99 define <128 x i8> @test_0b(<128 x i8> %v0, <128 x i8> %v1) #0 {
100 %t0 = icmp uge <128 x i8> %v0, %v1
101 %t1 = select <128 x i1> %t0, <128 x i8> %v1, <128 x i8> %v0
108 ; CHECK: v0.ub = vmax(v0.ub,v1.ub)
109 define <128 x i8> @test_0c(<128 x i8> %v0, <128 x i8> %v1) #0 {
110 %t0 = icmp ult <128 x i8> %v0, %v1
111 %t1 = select <128 x i1> %t0, <128 x i8> %v1, <128 x i8> %v0
116 ; CHECK: v0.ub = vmax(v0.ub,v1.ub)
117 define <128 x i8> @test_0d(<128 x i8> %v0, <128 x i8> %v1) #0 {
118 %t0 = icmp ule <128 x i8> %v0, %v1
119 %t1 = select <128 x i1> %t0, <128 x i8> %v1, <128 x i8> %v0
124 ; CHECK: v0.ub = vmax(v0.ub,v1.ub)
125 define <128 x i8> @test_0e(<128 x i8> %v0, <128 x i8> %v1) #0 {
126 %t0 = icmp ugt <128 x i8> %v0, %v1
127 %t1 = select <128 x i1> %t0, <128 x i8> %v0, <128 x i8> %v1
132 ; CHECK: v0.ub = vmax(v0.ub,v1.ub)
133 define <128 x i8> @test_0f(<128 x i8> %v0, <128 x i8> %v1) #0 {
134 %t0 = icmp uge <128 x i8> %v0, %v1
135 %t1 = select <128 x i1> %t0, <128 x i8> %v0, <128 x i8> %v1
142 ; CHECK: v0.h = vmin(v0.h,v1.h)
143 define <64 x i16> @test_10(<64 x i16> %v0, <64 x i16> %v1) #0 {
144 %t0 = icmp slt <64 x i16> %v0, %v1
145 %t1 = select <64 x i1> %t0, <64 x i16> %v0, <64 x i16> %v1
150 ; CHECK: v0.h = vmin(v0.h,v1.h)
151 define <64 x i16> @test_11(<64 x i16> %v0, <64 x i16> %v1) #0 {
152 %t0 = icmp sle <64 x i16> %v0, %v1
153 %t1 = select <64 x i1> %t0, <64 x i16> %v0, <64 x i16> %v1
158 ; CHECK: v0.h = vmin(v0.h,v1.h)
159 define <64 x i16> @test_12(<64 x i16> %v0, <64 x i16> %v1) #0 {
160 %t0 = icmp sgt <64 x i16> %v0, %v1
161 %t1 = select <64 x i1> %t0, <64 x i16> %v1, <64 x i16> %v0
166 ; CHECK: v0.h = vmin(v0.h,v1.h)
167 define <64 x i16> @test_13(<64 x i16> %v0, <64 x i16> %v1) #0 {
168 %t0 = icmp sge <64 x i16> %v0, %v1
169 %t1 = select <64 x i1> %t0, <64 x i16> %v1, <64 x i16> %v0
176 ; CHECK: v0.h = vmax(v0.h,v1.h)
177 define <64 x i16> @test_14(<64 x i16> %v0, <64 x i16> %v1) #0 {
178 %t0 = icmp slt <64 x i16> %v0, %v1
179 %t1 = select <64 x i1> %t0, <64 x i16> %v1, <64 x i16> %v0
184 ; CHECK: v0.h = vmax(v0.h,v1.h)
185 define <64 x i16> @test_15(<64 x i16> %v0, <64 x i16> %v1) #0 {
186 %t0 = icmp sle <64 x i16> %v0, %v1
187 %t1 = select <64 x i1> %t0, <64 x i16> %v1, <64 x i16> %v0
192 ; CHECK: v0.h = vmax(v0.h,v1.h)
193 define <64 x i16> @test_16(<64 x i16> %v0, <64 x i16> %v1) #0 {
194 %t0 = icmp sgt <64 x i16> %v0, %v1
195 %t1 = select <64 x i1> %t0, <64 x i16> %v0, <64 x i16> %v1
200 ; CHECK: v0.h = vmax(v0.h,v1.h)
201 define <64 x i16> @test_17(<64 x i16> %v0, <64 x i16> %v1) #0 {
202 %t0 = icmp sge <64 x i16> %v0, %v1
203 %t1 = select <64 x i1> %t0, <64 x i16> %v0, <64 x i16> %v1
210 ; CHECK: v0.uh = vmin(v0.uh,v1.uh)
211 define <64 x i16> @test_18(<64 x i16> %v0, <64 x i16> %v1) #0 {
212 %t0 = icmp ult <64 x i16> %v0, %v1
213 %t1 = select <64 x i1> %t0, <64 x i16> %v0, <64 x i16> %v1
218 ; CHECK: v0.uh = vmin(v0.uh,v1.uh)
219 define <64 x i16> @test_19(<64 x i16> %v0, <64 x i16> %v1) #0 {
220 %t0 = icmp ule <64 x i16> %v0, %v1
221 %t1 = select <64 x i1> %t0, <64 x i16> %v0, <64 x i16> %v1
226 ; CHECK: v0.uh = vmin(v0.uh,v1.uh)
227 define <64 x i16> @test_1a(<64 x i16> %v0, <64 x i16> %v1) #0 {
228 %t0 = icmp ugt <64 x i16> %v0, %v1
229 %t1 = select <64 x i1> %t0, <64 x i16> %v1, <64 x i16> %v0
234 ; CHECK: v0.uh = vmin(v0.uh,v1.uh)
235 define <64 x i16> @test_1b(<64 x i16> %v0, <64 x i16> %v1) #0 {
236 %t0 = icmp uge <64 x i16> %v0, %v1
237 %t1 = select <64 x i1> %t0, <64 x i16> %v1, <64 x i16> %v0
244 ; CHECK: v0.uh = vmax(v0.uh,v1.uh)
245 define <64 x i16> @test_1c(<64 x i16> %v0, <64 x i16> %v1) #0 {
246 %t0 = icmp ult <64 x i16> %v0, %v1
247 %t1 = select <64 x i1> %t0, <64 x i16> %v1, <64 x i16> %v0
252 ; CHECK: v0.uh = vmax(v0.uh,v1.uh)
253 define <64 x i16> @test_1d(<64 x i16> %v0, <64 x i16> %v1) #0 {
254 %t0 = icmp ule <64 x i16> %v0, %v1
255 %t1 = select <64 x i1> %t0, <64 x i16> %v1, <64 x i16> %v0
260 ; CHECK: v0.uh = vmax(v0.uh,v1.uh)
261 define <64 x i16> @test_1e(<64 x i16> %v0, <64 x i16> %v1) #0 {
262 %t0 = icmp ugt <64 x i16> %v0, %v1
263 %t1 = select <64 x i1> %t0, <64 x i16> %v0, <64 x i16> %v1
268 ; CHECK: v0.uh = vmax(v0.uh,v1.uh)
269 define <64 x i16> @test_1f(<64 x i16> %v0, <64 x i16> %v1) #0 {
270 %t0 = icmp uge <64 x i16> %v0, %v1
271 %t1 = select <64 x i1> %t0, <64 x i16> %v0, <64 x i16> %v1
278 ; CHECK: v0.w = vmin(v0.w,v1.w)
279 define <32 x i32> @test_20(<32 x i32> %v0, <32 x i32> %v1) #0 {
280 %t0 = icmp slt <32 x i32> %v0, %v1
281 %t1 = select <32 x i1> %t0, <32 x i32> %v0, <32 x i32> %v1
286 ; CHECK: v0.w = vmin(v0.w,v1.w)
287 define <32 x i32> @test_21(<32 x i32> %v0, <32 x i32> %v1) #0 {
288 %t0 = icmp sle <32 x i32> %v0, %v1
289 %t1 = select <32 x i1> %t0, <32 x i32> %v0, <32 x i32> %v1
294 ; CHECK: v0.w = vmin(v0.w,v1.w)
295 define <32 x i32> @test_22(<32 x i32> %v0, <32 x i32> %v1) #0 {
296 %t0 = icmp sgt <32 x i32> %v0, %v1
297 %t1 = select <32 x i1> %t0, <32 x i32> %v1, <32 x i32> %v0
302 ; CHECK: v0.w = vmin(v0.w,v1.w)
303 define <32 x i32> @test_23(<32 x i32> %v0, <32 x i32> %v1) #0 {
304 %t0 = icmp sge <32 x i32> %v0, %v1
305 %t1 = select <32 x i1> %t0, <32 x i32> %v1, <32 x i32> %v0
312 ; CHECK: v0.w = vmax(v0.w,v1.w)
313 define <32 x i32> @test_24(<32 x i32> %v0, <32 x i32> %v1) #0 {
314 %t0 = icmp slt <32 x i32> %v0, %v1
315 %t1 = select <32 x i1> %t0, <32 x i32> %v1, <32 x i32> %v0
320 ; CHECK: v0.w = vmax(v0.w,v1.w)
321 define <32 x i32> @test_25(<32 x i32> %v0, <32 x i32> %v1) #0 {
322 %t0 = icmp sle <32 x i32> %v0, %v1
323 %t1 = select <32 x i1> %t0, <32 x i32> %v1, <32 x i32> %v0
328 ; CHECK: v0.w = vmax(v0.w,v1.w)
329 define <32 x i32> @test_26(<32 x i32> %v0, <32 x i32> %v1) #0 {
330 %t0 = icmp sgt <32 x i32> %v0, %v1
331 %t1 = select <32 x i1> %t0, <32 x i32> %v0, <32 x i32> %v1
336 ; CHECK: v0.w = vmax(v0.w,v1.w)
337 define <32 x i32> @test_27(<32 x i32> %v0, <32 x i32> %v1) #0 {
338 %t0 = icmp sge <32 x i32> %v0, %v1
339 %t1 = select <32 x i1> %t0, <32 x i32> %v0, <32 x i32> %v1
343 attributes #0 = { readnone nounwind "target-cpu"="hexagonv62" "target-features"="+hvx,+hvx-length128b" }