[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / X86 / vector-reduce-smin.ll
blob16d58b7742ab22dda68a8932579a21f16b32a8e4
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefixes=SSE,SSE2
3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefixes=SSE,SSE4,SSE41
4 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.2 | FileCheck %s --check-prefixes=SSE,SSE4,SSE42
5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=AVX,AVX1
6 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=AVX,AVX2
7 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512bw | FileCheck %s --check-prefixes=AVX512,AVX512BW
8 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512bw,+avx512vl | FileCheck %s --check-prefixes=AVX512,AVX512VL
11 ; vXi64
14 define i64 @test_v2i64(<2 x i64> %a0) {
15 ; SSE2-LABEL: test_v2i64:
16 ; SSE2:       # %bb.0:
17 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
18 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
19 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
20 ; SSE2-NEXT:    pxor %xmm2, %xmm3
21 ; SSE2-NEXT:    pxor %xmm1, %xmm2
22 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
23 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
24 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
25 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
26 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
27 ; SSE2-NEXT:    pand %xmm5, %xmm2
28 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
29 ; SSE2-NEXT:    por %xmm2, %xmm3
30 ; SSE2-NEXT:    pand %xmm3, %xmm0
31 ; SSE2-NEXT:    pandn %xmm1, %xmm3
32 ; SSE2-NEXT:    por %xmm0, %xmm3
33 ; SSE2-NEXT:    movq %xmm3, %rax
34 ; SSE2-NEXT:    retq
36 ; SSE41-LABEL: test_v2i64:
37 ; SSE41:       # %bb.0:
38 ; SSE41-NEXT:    movdqa %xmm0, %xmm1
39 ; SSE41-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[2,3,2,3]
40 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [2147483648,2147483648]
41 ; SSE41-NEXT:    pxor %xmm3, %xmm0
42 ; SSE41-NEXT:    pxor %xmm2, %xmm3
43 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
44 ; SSE41-NEXT:    pcmpeqd %xmm0, %xmm4
45 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm3
46 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[0,0,2,2]
47 ; SSE41-NEXT:    pand %xmm4, %xmm0
48 ; SSE41-NEXT:    por %xmm3, %xmm0
49 ; SSE41-NEXT:    blendvpd %xmm0, %xmm1, %xmm2
50 ; SSE41-NEXT:    movq %xmm2, %rax
51 ; SSE41-NEXT:    retq
53 ; SSE42-LABEL: test_v2i64:
54 ; SSE42:       # %bb.0:
55 ; SSE42-NEXT:    movdqa %xmm0, %xmm1
56 ; SSE42-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[2,3,2,3]
57 ; SSE42-NEXT:    movdqa %xmm2, %xmm0
58 ; SSE42-NEXT:    pcmpgtq %xmm1, %xmm0
59 ; SSE42-NEXT:    blendvpd %xmm0, %xmm1, %xmm2
60 ; SSE42-NEXT:    movq %xmm2, %rax
61 ; SSE42-NEXT:    retq
63 ; AVX-LABEL: test_v2i64:
64 ; AVX:       # %bb.0:
65 ; AVX-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
66 ; AVX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
67 ; AVX-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
68 ; AVX-NEXT:    vmovq %xmm0, %rax
69 ; AVX-NEXT:    retq
71 ; AVX512BW-LABEL: test_v2i64:
72 ; AVX512BW:       # %bb.0:
73 ; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
74 ; AVX512BW-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
75 ; AVX512BW-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
76 ; AVX512BW-NEXT:    vmovq %xmm0, %rax
77 ; AVX512BW-NEXT:    vzeroupper
78 ; AVX512BW-NEXT:    retq
80 ; AVX512VL-LABEL: test_v2i64:
81 ; AVX512VL:       # %bb.0:
82 ; AVX512VL-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
83 ; AVX512VL-NEXT:    vpminsq %xmm1, %xmm0, %xmm0
84 ; AVX512VL-NEXT:    vmovq %xmm0, %rax
85 ; AVX512VL-NEXT:    retq
86   %1 = call i64 @llvm.vector.reduce.smin.v2i64(<2 x i64> %a0)
87   ret i64 %1
90 define i64 @test_v4i64(<4 x i64> %a0) {
91 ; SSE2-LABEL: test_v4i64:
92 ; SSE2:       # %bb.0:
93 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
94 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
95 ; SSE2-NEXT:    pxor %xmm2, %xmm3
96 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
97 ; SSE2-NEXT:    pxor %xmm2, %xmm4
98 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
99 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm5
100 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
101 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm4
102 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
103 ; SSE2-NEXT:    pand %xmm6, %xmm3
104 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
105 ; SSE2-NEXT:    por %xmm3, %xmm4
106 ; SSE2-NEXT:    pand %xmm4, %xmm0
107 ; SSE2-NEXT:    pandn %xmm1, %xmm4
108 ; SSE2-NEXT:    por %xmm0, %xmm4
109 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[2,3,2,3]
110 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
111 ; SSE2-NEXT:    pxor %xmm2, %xmm1
112 ; SSE2-NEXT:    pxor %xmm0, %xmm2
113 ; SSE2-NEXT:    movdqa %xmm2, %xmm3
114 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm3
115 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm3[0,0,2,2]
116 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm2
117 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]
118 ; SSE2-NEXT:    pand %xmm5, %xmm1
119 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm3[1,1,3,3]
120 ; SSE2-NEXT:    por %xmm1, %xmm2
121 ; SSE2-NEXT:    pand %xmm2, %xmm4
122 ; SSE2-NEXT:    pandn %xmm0, %xmm2
123 ; SSE2-NEXT:    por %xmm4, %xmm2
124 ; SSE2-NEXT:    movq %xmm2, %rax
125 ; SSE2-NEXT:    retq
127 ; SSE41-LABEL: test_v4i64:
128 ; SSE41:       # %bb.0:
129 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
130 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [2147483648,2147483648]
131 ; SSE41-NEXT:    pxor %xmm3, %xmm0
132 ; SSE41-NEXT:    movdqa %xmm1, %xmm4
133 ; SSE41-NEXT:    pxor %xmm3, %xmm4
134 ; SSE41-NEXT:    movdqa %xmm4, %xmm5
135 ; SSE41-NEXT:    pcmpeqd %xmm0, %xmm5
136 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm4
137 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[0,0,2,2]
138 ; SSE41-NEXT:    pand %xmm5, %xmm0
139 ; SSE41-NEXT:    por %xmm4, %xmm0
140 ; SSE41-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
141 ; SSE41-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[2,3,2,3]
142 ; SSE41-NEXT:    movdqa %xmm1, %xmm0
143 ; SSE41-NEXT:    pxor %xmm3, %xmm0
144 ; SSE41-NEXT:    pxor %xmm2, %xmm3
145 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
146 ; SSE41-NEXT:    pcmpeqd %xmm0, %xmm4
147 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm3
148 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[0,0,2,2]
149 ; SSE41-NEXT:    pand %xmm4, %xmm0
150 ; SSE41-NEXT:    por %xmm3, %xmm0
151 ; SSE41-NEXT:    blendvpd %xmm0, %xmm1, %xmm2
152 ; SSE41-NEXT:    movq %xmm2, %rax
153 ; SSE41-NEXT:    retq
155 ; SSE42-LABEL: test_v4i64:
156 ; SSE42:       # %bb.0:
157 ; SSE42-NEXT:    movdqa %xmm0, %xmm2
158 ; SSE42-NEXT:    movdqa %xmm1, %xmm0
159 ; SSE42-NEXT:    pcmpgtq %xmm2, %xmm0
160 ; SSE42-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
161 ; SSE42-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[2,3,2,3]
162 ; SSE42-NEXT:    movdqa %xmm2, %xmm0
163 ; SSE42-NEXT:    pcmpgtq %xmm1, %xmm0
164 ; SSE42-NEXT:    blendvpd %xmm0, %xmm1, %xmm2
165 ; SSE42-NEXT:    movq %xmm2, %rax
166 ; SSE42-NEXT:    retq
168 ; AVX1-LABEL: test_v4i64:
169 ; AVX1:       # %bb.0:
170 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
171 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
172 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
173 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm1 = xmm0[2,3,2,3]
174 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
175 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
176 ; AVX1-NEXT:    vmovq %xmm0, %rax
177 ; AVX1-NEXT:    vzeroupper
178 ; AVX1-NEXT:    retq
180 ; AVX2-LABEL: test_v4i64:
181 ; AVX2:       # %bb.0:
182 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
183 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
184 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
185 ; AVX2-NEXT:    vpermilps {{.*#+}} xmm1 = xmm0[2,3,2,3]
186 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
187 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
188 ; AVX2-NEXT:    vmovq %xmm0, %rax
189 ; AVX2-NEXT:    vzeroupper
190 ; AVX2-NEXT:    retq
192 ; AVX512BW-LABEL: test_v4i64:
193 ; AVX512BW:       # %bb.0:
194 ; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
195 ; AVX512BW-NEXT:    vextracti128 $1, %ymm0, %xmm1
196 ; AVX512BW-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
197 ; AVX512BW-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
198 ; AVX512BW-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
199 ; AVX512BW-NEXT:    vmovq %xmm0, %rax
200 ; AVX512BW-NEXT:    vzeroupper
201 ; AVX512BW-NEXT:    retq
203 ; AVX512VL-LABEL: test_v4i64:
204 ; AVX512VL:       # %bb.0:
205 ; AVX512VL-NEXT:    vextracti128 $1, %ymm0, %xmm1
206 ; AVX512VL-NEXT:    vpminsq %xmm1, %xmm0, %xmm0
207 ; AVX512VL-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
208 ; AVX512VL-NEXT:    vpminsq %xmm1, %xmm0, %xmm0
209 ; AVX512VL-NEXT:    vmovq %xmm0, %rax
210 ; AVX512VL-NEXT:    vzeroupper
211 ; AVX512VL-NEXT:    retq
212   %1 = call i64 @llvm.vector.reduce.smin.v4i64(<4 x i64> %a0)
213   ret i64 %1
216 define i64 @test_v8i64(<8 x i64> %a0) {
217 ; SSE2-LABEL: test_v8i64:
218 ; SSE2:       # %bb.0:
219 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
220 ; SSE2-NEXT:    movdqa %xmm1, %xmm5
221 ; SSE2-NEXT:    pxor %xmm4, %xmm5
222 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
223 ; SSE2-NEXT:    pxor %xmm4, %xmm6
224 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
225 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
226 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
227 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
228 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
229 ; SSE2-NEXT:    pand %xmm8, %xmm6
230 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
231 ; SSE2-NEXT:    por %xmm6, %xmm5
232 ; SSE2-NEXT:    pand %xmm5, %xmm1
233 ; SSE2-NEXT:    pandn %xmm3, %xmm5
234 ; SSE2-NEXT:    por %xmm1, %xmm5
235 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
236 ; SSE2-NEXT:    pxor %xmm4, %xmm1
237 ; SSE2-NEXT:    movdqa %xmm2, %xmm3
238 ; SSE2-NEXT:    pxor %xmm4, %xmm3
239 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
240 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm6
241 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
242 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm3
243 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[1,1,3,3]
244 ; SSE2-NEXT:    pand %xmm7, %xmm1
245 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm6[1,1,3,3]
246 ; SSE2-NEXT:    por %xmm1, %xmm3
247 ; SSE2-NEXT:    pand %xmm3, %xmm0
248 ; SSE2-NEXT:    pandn %xmm2, %xmm3
249 ; SSE2-NEXT:    por %xmm0, %xmm3
250 ; SSE2-NEXT:    movdqa %xmm3, %xmm0
251 ; SSE2-NEXT:    pxor %xmm4, %xmm0
252 ; SSE2-NEXT:    movdqa %xmm5, %xmm1
253 ; SSE2-NEXT:    pxor %xmm4, %xmm1
254 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
255 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
256 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm2[0,0,2,2]
257 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1
258 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
259 ; SSE2-NEXT:    pand %xmm6, %xmm0
260 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]
261 ; SSE2-NEXT:    por %xmm0, %xmm1
262 ; SSE2-NEXT:    pand %xmm1, %xmm3
263 ; SSE2-NEXT:    pandn %xmm5, %xmm1
264 ; SSE2-NEXT:    por %xmm3, %xmm1
265 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]
266 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
267 ; SSE2-NEXT:    pxor %xmm4, %xmm2
268 ; SSE2-NEXT:    pxor %xmm0, %xmm4
269 ; SSE2-NEXT:    movdqa %xmm4, %xmm3
270 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm3
271 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm3[0,0,2,2]
272 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
273 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
274 ; SSE2-NEXT:    pand %xmm5, %xmm2
275 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
276 ; SSE2-NEXT:    por %xmm2, %xmm3
277 ; SSE2-NEXT:    pand %xmm3, %xmm1
278 ; SSE2-NEXT:    pandn %xmm0, %xmm3
279 ; SSE2-NEXT:    por %xmm1, %xmm3
280 ; SSE2-NEXT:    movq %xmm3, %rax
281 ; SSE2-NEXT:    retq
283 ; SSE41-LABEL: test_v8i64:
284 ; SSE41:       # %bb.0:
285 ; SSE41-NEXT:    movdqa %xmm0, %xmm4
286 ; SSE41-NEXT:    movdqa {{.*#+}} xmm5 = [2147483648,2147483648]
287 ; SSE41-NEXT:    movdqa %xmm1, %xmm0
288 ; SSE41-NEXT:    pxor %xmm5, %xmm0
289 ; SSE41-NEXT:    movdqa %xmm3, %xmm6
290 ; SSE41-NEXT:    pxor %xmm5, %xmm6
291 ; SSE41-NEXT:    movdqa %xmm6, %xmm7
292 ; SSE41-NEXT:    pcmpeqd %xmm0, %xmm7
293 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm6
294 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm6[0,0,2,2]
295 ; SSE41-NEXT:    pand %xmm7, %xmm0
296 ; SSE41-NEXT:    por %xmm6, %xmm0
297 ; SSE41-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
298 ; SSE41-NEXT:    movdqa %xmm4, %xmm0
299 ; SSE41-NEXT:    pxor %xmm5, %xmm0
300 ; SSE41-NEXT:    movdqa %xmm2, %xmm1
301 ; SSE41-NEXT:    pxor %xmm5, %xmm1
302 ; SSE41-NEXT:    movdqa %xmm1, %xmm6
303 ; SSE41-NEXT:    pcmpeqd %xmm0, %xmm6
304 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm1
305 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[0,0,2,2]
306 ; SSE41-NEXT:    pand %xmm6, %xmm0
307 ; SSE41-NEXT:    por %xmm1, %xmm0
308 ; SSE41-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
309 ; SSE41-NEXT:    movapd %xmm2, %xmm0
310 ; SSE41-NEXT:    xorpd %xmm5, %xmm0
311 ; SSE41-NEXT:    movapd %xmm3, %xmm1
312 ; SSE41-NEXT:    xorpd %xmm5, %xmm1
313 ; SSE41-NEXT:    movapd %xmm1, %xmm4
314 ; SSE41-NEXT:    pcmpeqd %xmm0, %xmm4
315 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm1
316 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[0,0,2,2]
317 ; SSE41-NEXT:    pand %xmm4, %xmm0
318 ; SSE41-NEXT:    por %xmm1, %xmm0
319 ; SSE41-NEXT:    blendvpd %xmm0, %xmm2, %xmm3
320 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[2,3,2,3]
321 ; SSE41-NEXT:    movdqa %xmm3, %xmm0
322 ; SSE41-NEXT:    pxor %xmm5, %xmm0
323 ; SSE41-NEXT:    pxor %xmm1, %xmm5
324 ; SSE41-NEXT:    movdqa %xmm5, %xmm2
325 ; SSE41-NEXT:    pcmpeqd %xmm0, %xmm2
326 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm5
327 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm5[0,0,2,2]
328 ; SSE41-NEXT:    pand %xmm2, %xmm0
329 ; SSE41-NEXT:    por %xmm5, %xmm0
330 ; SSE41-NEXT:    blendvpd %xmm0, %xmm3, %xmm1
331 ; SSE41-NEXT:    movq %xmm1, %rax
332 ; SSE41-NEXT:    retq
334 ; SSE42-LABEL: test_v8i64:
335 ; SSE42:       # %bb.0:
336 ; SSE42-NEXT:    movdqa %xmm0, %xmm4
337 ; SSE42-NEXT:    movdqa %xmm2, %xmm0
338 ; SSE42-NEXT:    pcmpgtq %xmm4, %xmm0
339 ; SSE42-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
340 ; SSE42-NEXT:    movdqa %xmm3, %xmm0
341 ; SSE42-NEXT:    pcmpgtq %xmm1, %xmm0
342 ; SSE42-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
343 ; SSE42-NEXT:    movapd %xmm3, %xmm0
344 ; SSE42-NEXT:    pcmpgtq %xmm2, %xmm0
345 ; SSE42-NEXT:    blendvpd %xmm0, %xmm2, %xmm3
346 ; SSE42-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[2,3,2,3]
347 ; SSE42-NEXT:    movdqa %xmm1, %xmm0
348 ; SSE42-NEXT:    pcmpgtq %xmm3, %xmm0
349 ; SSE42-NEXT:    blendvpd %xmm0, %xmm3, %xmm1
350 ; SSE42-NEXT:    movq %xmm1, %rax
351 ; SSE42-NEXT:    retq
353 ; AVX1-LABEL: test_v8i64:
354 ; AVX1:       # %bb.0:
355 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
356 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
357 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm4
358 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm5
359 ; AVX1-NEXT:    vblendvpd %xmm5, %xmm0, %xmm1, %xmm0
360 ; AVX1-NEXT:    vblendvpd %xmm4, %xmm2, %xmm3, %xmm1
361 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
362 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
363 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm1 = xmm0[2,3,2,3]
364 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
365 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
366 ; AVX1-NEXT:    vmovq %xmm0, %rax
367 ; AVX1-NEXT:    vzeroupper
368 ; AVX1-NEXT:    retq
370 ; AVX2-LABEL: test_v8i64:
371 ; AVX2:       # %bb.0:
372 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
373 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
374 ; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm1
375 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
376 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
377 ; AVX2-NEXT:    vpermilps {{.*#+}} xmm1 = xmm0[2,3,2,3]
378 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
379 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
380 ; AVX2-NEXT:    vmovq %xmm0, %rax
381 ; AVX2-NEXT:    vzeroupper
382 ; AVX2-NEXT:    retq
384 ; AVX512BW-LABEL: test_v8i64:
385 ; AVX512BW:       # %bb.0:
386 ; AVX512BW-NEXT:    vextracti64x4 $1, %zmm0, %ymm1
387 ; AVX512BW-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
388 ; AVX512BW-NEXT:    vextracti128 $1, %ymm0, %xmm1
389 ; AVX512BW-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
390 ; AVX512BW-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
391 ; AVX512BW-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
392 ; AVX512BW-NEXT:    vmovq %xmm0, %rax
393 ; AVX512BW-NEXT:    vzeroupper
394 ; AVX512BW-NEXT:    retq
396 ; AVX512VL-LABEL: test_v8i64:
397 ; AVX512VL:       # %bb.0:
398 ; AVX512VL-NEXT:    vextracti64x4 $1, %zmm0, %ymm1
399 ; AVX512VL-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
400 ; AVX512VL-NEXT:    vextracti128 $1, %ymm0, %xmm1
401 ; AVX512VL-NEXT:    vpminsq %xmm1, %xmm0, %xmm0
402 ; AVX512VL-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
403 ; AVX512VL-NEXT:    vpminsq %xmm1, %xmm0, %xmm0
404 ; AVX512VL-NEXT:    vmovq %xmm0, %rax
405 ; AVX512VL-NEXT:    vzeroupper
406 ; AVX512VL-NEXT:    retq
407   %1 = call i64 @llvm.vector.reduce.smin.v8i64(<8 x i64> %a0)
408   ret i64 %1
411 define i64 @test_v16i64(<16 x i64> %a0) {
412 ; SSE2-LABEL: test_v16i64:
413 ; SSE2:       # %bb.0:
414 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648]
415 ; SSE2-NEXT:    movdqa %xmm2, %xmm9
416 ; SSE2-NEXT:    pxor %xmm8, %xmm9
417 ; SSE2-NEXT:    movdqa %xmm6, %xmm10
418 ; SSE2-NEXT:    pxor %xmm8, %xmm10
419 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
420 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
421 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
422 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
423 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
424 ; SSE2-NEXT:    pand %xmm12, %xmm10
425 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm11[1,1,3,3]
426 ; SSE2-NEXT:    por %xmm10, %xmm9
427 ; SSE2-NEXT:    pand %xmm9, %xmm2
428 ; SSE2-NEXT:    pandn %xmm6, %xmm9
429 ; SSE2-NEXT:    por %xmm2, %xmm9
430 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
431 ; SSE2-NEXT:    pxor %xmm8, %xmm2
432 ; SSE2-NEXT:    movdqa %xmm4, %xmm6
433 ; SSE2-NEXT:    pxor %xmm8, %xmm6
434 ; SSE2-NEXT:    movdqa %xmm6, %xmm10
435 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm10
436 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
437 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm6
438 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
439 ; SSE2-NEXT:    pand %xmm11, %xmm6
440 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm10[1,1,3,3]
441 ; SSE2-NEXT:    por %xmm6, %xmm2
442 ; SSE2-NEXT:    pand %xmm2, %xmm0
443 ; SSE2-NEXT:    pandn %xmm4, %xmm2
444 ; SSE2-NEXT:    por %xmm0, %xmm2
445 ; SSE2-NEXT:    movdqa %xmm3, %xmm0
446 ; SSE2-NEXT:    pxor %xmm8, %xmm0
447 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
448 ; SSE2-NEXT:    pxor %xmm8, %xmm4
449 ; SSE2-NEXT:    movdqa %xmm4, %xmm6
450 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm6
451 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm6[0,0,2,2]
452 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm4
453 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
454 ; SSE2-NEXT:    pand %xmm10, %xmm4
455 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm6[1,1,3,3]
456 ; SSE2-NEXT:    por %xmm4, %xmm0
457 ; SSE2-NEXT:    pand %xmm0, %xmm3
458 ; SSE2-NEXT:    pandn %xmm7, %xmm0
459 ; SSE2-NEXT:    por %xmm3, %xmm0
460 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
461 ; SSE2-NEXT:    pxor %xmm8, %xmm3
462 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
463 ; SSE2-NEXT:    pxor %xmm8, %xmm4
464 ; SSE2-NEXT:    movdqa %xmm4, %xmm6
465 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm6
466 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
467 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm4
468 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
469 ; SSE2-NEXT:    pand %xmm7, %xmm3
470 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm6[1,1,3,3]
471 ; SSE2-NEXT:    por %xmm3, %xmm4
472 ; SSE2-NEXT:    pand %xmm4, %xmm1
473 ; SSE2-NEXT:    pandn %xmm5, %xmm4
474 ; SSE2-NEXT:    por %xmm1, %xmm4
475 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
476 ; SSE2-NEXT:    pxor %xmm8, %xmm1
477 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
478 ; SSE2-NEXT:    pxor %xmm8, %xmm3
479 ; SSE2-NEXT:    movdqa %xmm3, %xmm5
480 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm5
481 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
482 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm3
483 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
484 ; SSE2-NEXT:    pand %xmm6, %xmm3
485 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm5[1,1,3,3]
486 ; SSE2-NEXT:    por %xmm3, %xmm1
487 ; SSE2-NEXT:    pand %xmm1, %xmm4
488 ; SSE2-NEXT:    pandn %xmm0, %xmm1
489 ; SSE2-NEXT:    por %xmm4, %xmm1
490 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
491 ; SSE2-NEXT:    pxor %xmm8, %xmm0
492 ; SSE2-NEXT:    movdqa %xmm9, %xmm3
493 ; SSE2-NEXT:    pxor %xmm8, %xmm3
494 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
495 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
496 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
497 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm3
498 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[1,1,3,3]
499 ; SSE2-NEXT:    pand %xmm5, %xmm0
500 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
501 ; SSE2-NEXT:    por %xmm0, %xmm3
502 ; SSE2-NEXT:    pand %xmm3, %xmm2
503 ; SSE2-NEXT:    pandn %xmm9, %xmm3
504 ; SSE2-NEXT:    por %xmm2, %xmm3
505 ; SSE2-NEXT:    movdqa %xmm3, %xmm0
506 ; SSE2-NEXT:    pxor %xmm8, %xmm0
507 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
508 ; SSE2-NEXT:    pxor %xmm8, %xmm2
509 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
510 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
511 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
512 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm2
513 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
514 ; SSE2-NEXT:    pand %xmm5, %xmm0
515 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
516 ; SSE2-NEXT:    por %xmm0, %xmm2
517 ; SSE2-NEXT:    pand %xmm2, %xmm3
518 ; SSE2-NEXT:    pandn %xmm1, %xmm2
519 ; SSE2-NEXT:    por %xmm3, %xmm2
520 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[2,3,2,3]
521 ; SSE2-NEXT:    movdqa %xmm2, %xmm1
522 ; SSE2-NEXT:    pxor %xmm8, %xmm1
523 ; SSE2-NEXT:    pxor %xmm0, %xmm8
524 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
525 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm3
526 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
527 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm8
528 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm8[1,1,3,3]
529 ; SSE2-NEXT:    pand %xmm4, %xmm1
530 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
531 ; SSE2-NEXT:    por %xmm1, %xmm3
532 ; SSE2-NEXT:    pand %xmm3, %xmm2
533 ; SSE2-NEXT:    pandn %xmm0, %xmm3
534 ; SSE2-NEXT:    por %xmm2, %xmm3
535 ; SSE2-NEXT:    movq %xmm3, %rax
536 ; SSE2-NEXT:    retq
538 ; SSE41-LABEL: test_v16i64:
539 ; SSE41:       # %bb.0:
540 ; SSE41-NEXT:    movdqa %xmm0, %xmm8
541 ; SSE41-NEXT:    movdqa {{.*#+}} xmm9 = [2147483648,2147483648]
542 ; SSE41-NEXT:    movdqa %xmm2, %xmm0
543 ; SSE41-NEXT:    pxor %xmm9, %xmm0
544 ; SSE41-NEXT:    movdqa %xmm6, %xmm10
545 ; SSE41-NEXT:    pxor %xmm9, %xmm10
546 ; SSE41-NEXT:    movdqa %xmm10, %xmm11
547 ; SSE41-NEXT:    pcmpeqd %xmm0, %xmm11
548 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm10
549 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm10[0,0,2,2]
550 ; SSE41-NEXT:    pand %xmm11, %xmm0
551 ; SSE41-NEXT:    por %xmm10, %xmm0
552 ; SSE41-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
553 ; SSE41-NEXT:    movdqa %xmm8, %xmm0
554 ; SSE41-NEXT:    pxor %xmm9, %xmm0
555 ; SSE41-NEXT:    movdqa %xmm4, %xmm2
556 ; SSE41-NEXT:    pxor %xmm9, %xmm2
557 ; SSE41-NEXT:    movdqa %xmm2, %xmm10
558 ; SSE41-NEXT:    pcmpeqd %xmm0, %xmm10
559 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm2
560 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[0,0,2,2]
561 ; SSE41-NEXT:    pand %xmm10, %xmm0
562 ; SSE41-NEXT:    por %xmm2, %xmm0
563 ; SSE41-NEXT:    blendvpd %xmm0, %xmm8, %xmm4
564 ; SSE41-NEXT:    movdqa %xmm3, %xmm0
565 ; SSE41-NEXT:    pxor %xmm9, %xmm0
566 ; SSE41-NEXT:    movdqa %xmm7, %xmm2
567 ; SSE41-NEXT:    pxor %xmm9, %xmm2
568 ; SSE41-NEXT:    movdqa %xmm2, %xmm8
569 ; SSE41-NEXT:    pcmpeqd %xmm0, %xmm8
570 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm2
571 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[0,0,2,2]
572 ; SSE41-NEXT:    pand %xmm8, %xmm0
573 ; SSE41-NEXT:    por %xmm2, %xmm0
574 ; SSE41-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
575 ; SSE41-NEXT:    movdqa %xmm1, %xmm0
576 ; SSE41-NEXT:    pxor %xmm9, %xmm0
577 ; SSE41-NEXT:    movdqa %xmm5, %xmm2
578 ; SSE41-NEXT:    pxor %xmm9, %xmm2
579 ; SSE41-NEXT:    movdqa %xmm2, %xmm3
580 ; SSE41-NEXT:    pcmpeqd %xmm0, %xmm3
581 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm2
582 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[0,0,2,2]
583 ; SSE41-NEXT:    pand %xmm3, %xmm0
584 ; SSE41-NEXT:    por %xmm2, %xmm0
585 ; SSE41-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
586 ; SSE41-NEXT:    movapd %xmm5, %xmm0
587 ; SSE41-NEXT:    xorpd %xmm9, %xmm0
588 ; SSE41-NEXT:    movapd %xmm7, %xmm1
589 ; SSE41-NEXT:    xorpd %xmm9, %xmm1
590 ; SSE41-NEXT:    movapd %xmm1, %xmm2
591 ; SSE41-NEXT:    pcmpeqd %xmm0, %xmm2
592 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm1
593 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[0,0,2,2]
594 ; SSE41-NEXT:    pand %xmm2, %xmm0
595 ; SSE41-NEXT:    por %xmm1, %xmm0
596 ; SSE41-NEXT:    blendvpd %xmm0, %xmm5, %xmm7
597 ; SSE41-NEXT:    movapd %xmm4, %xmm0
598 ; SSE41-NEXT:    xorpd %xmm9, %xmm0
599 ; SSE41-NEXT:    movapd %xmm6, %xmm1
600 ; SSE41-NEXT:    xorpd %xmm9, %xmm1
601 ; SSE41-NEXT:    movapd %xmm1, %xmm2
602 ; SSE41-NEXT:    pcmpeqd %xmm0, %xmm2
603 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm1
604 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[0,0,2,2]
605 ; SSE41-NEXT:    pand %xmm2, %xmm0
606 ; SSE41-NEXT:    por %xmm1, %xmm0
607 ; SSE41-NEXT:    blendvpd %xmm0, %xmm4, %xmm6
608 ; SSE41-NEXT:    movapd %xmm6, %xmm0
609 ; SSE41-NEXT:    xorpd %xmm9, %xmm0
610 ; SSE41-NEXT:    movapd %xmm7, %xmm1
611 ; SSE41-NEXT:    xorpd %xmm9, %xmm1
612 ; SSE41-NEXT:    movapd %xmm1, %xmm2
613 ; SSE41-NEXT:    pcmpeqd %xmm0, %xmm2
614 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm1
615 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[0,0,2,2]
616 ; SSE41-NEXT:    pand %xmm2, %xmm0
617 ; SSE41-NEXT:    por %xmm1, %xmm0
618 ; SSE41-NEXT:    blendvpd %xmm0, %xmm6, %xmm7
619 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm7[2,3,2,3]
620 ; SSE41-NEXT:    movdqa %xmm7, %xmm0
621 ; SSE41-NEXT:    pxor %xmm9, %xmm0
622 ; SSE41-NEXT:    pxor %xmm1, %xmm9
623 ; SSE41-NEXT:    movdqa %xmm9, %xmm2
624 ; SSE41-NEXT:    pcmpeqd %xmm0, %xmm2
625 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm9
626 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm9[0,0,2,2]
627 ; SSE41-NEXT:    pand %xmm2, %xmm0
628 ; SSE41-NEXT:    por %xmm9, %xmm0
629 ; SSE41-NEXT:    blendvpd %xmm0, %xmm7, %xmm1
630 ; SSE41-NEXT:    movq %xmm1, %rax
631 ; SSE41-NEXT:    retq
633 ; SSE42-LABEL: test_v16i64:
634 ; SSE42:       # %bb.0:
635 ; SSE42-NEXT:    movdqa %xmm0, %xmm8
636 ; SSE42-NEXT:    movdqa %xmm5, %xmm0
637 ; SSE42-NEXT:    pcmpgtq %xmm1, %xmm0
638 ; SSE42-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
639 ; SSE42-NEXT:    movdqa %xmm7, %xmm0
640 ; SSE42-NEXT:    pcmpgtq %xmm3, %xmm0
641 ; SSE42-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
642 ; SSE42-NEXT:    movdqa %xmm4, %xmm0
643 ; SSE42-NEXT:    pcmpgtq %xmm8, %xmm0
644 ; SSE42-NEXT:    blendvpd %xmm0, %xmm8, %xmm4
645 ; SSE42-NEXT:    movdqa %xmm6, %xmm0
646 ; SSE42-NEXT:    pcmpgtq %xmm2, %xmm0
647 ; SSE42-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
648 ; SSE42-NEXT:    movapd %xmm6, %xmm0
649 ; SSE42-NEXT:    pcmpgtq %xmm4, %xmm0
650 ; SSE42-NEXT:    blendvpd %xmm0, %xmm4, %xmm6
651 ; SSE42-NEXT:    movapd %xmm7, %xmm0
652 ; SSE42-NEXT:    pcmpgtq %xmm5, %xmm0
653 ; SSE42-NEXT:    blendvpd %xmm0, %xmm5, %xmm7
654 ; SSE42-NEXT:    movapd %xmm7, %xmm0
655 ; SSE42-NEXT:    pcmpgtq %xmm6, %xmm0
656 ; SSE42-NEXT:    blendvpd %xmm0, %xmm6, %xmm7
657 ; SSE42-NEXT:    pshufd {{.*#+}} xmm1 = xmm7[2,3,2,3]
658 ; SSE42-NEXT:    movdqa %xmm1, %xmm0
659 ; SSE42-NEXT:    pcmpgtq %xmm7, %xmm0
660 ; SSE42-NEXT:    blendvpd %xmm0, %xmm7, %xmm1
661 ; SSE42-NEXT:    movq %xmm1, %rax
662 ; SSE42-NEXT:    retq
664 ; AVX1-LABEL: test_v16i64:
665 ; AVX1:       # %bb.0:
666 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm3, %xmm8
667 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm2, %xmm9
668 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm11
669 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm7
670 ; AVX1-NEXT:    vpcmpgtq %xmm11, %xmm7, %xmm10
671 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
672 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
673 ; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm4, %xmm6
674 ; AVX1-NEXT:    vblendvpd %xmm6, %xmm5, %xmm4, %xmm4
675 ; AVX1-NEXT:    vblendvpd %xmm10, %xmm11, %xmm7, %xmm5
676 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm6
677 ; AVX1-NEXT:    vblendvpd %xmm9, %xmm0, %xmm2, %xmm0
678 ; AVX1-NEXT:    vblendvpd %xmm8, %xmm1, %xmm3, %xmm1
679 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
680 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
681 ; AVX1-NEXT:    vblendvpd %xmm6, %xmm4, %xmm5, %xmm1
682 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
683 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
684 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm1 = xmm0[2,3,2,3]
685 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
686 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
687 ; AVX1-NEXT:    vmovq %xmm0, %rax
688 ; AVX1-NEXT:    vzeroupper
689 ; AVX1-NEXT:    retq
691 ; AVX2-LABEL: test_v16i64:
692 ; AVX2:       # %bb.0:
693 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm2, %ymm4
694 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
695 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm3, %ymm2
696 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
697 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
698 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
699 ; AVX2-NEXT:    vextractf128 $1, %ymm0, %xmm1
700 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
701 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
702 ; AVX2-NEXT:    vpermilps {{.*#+}} xmm1 = xmm0[2,3,2,3]
703 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
704 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
705 ; AVX2-NEXT:    vmovq %xmm0, %rax
706 ; AVX2-NEXT:    vzeroupper
707 ; AVX2-NEXT:    retq
709 ; AVX512BW-LABEL: test_v16i64:
710 ; AVX512BW:       # %bb.0:
711 ; AVX512BW-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
712 ; AVX512BW-NEXT:    vextracti64x4 $1, %zmm0, %ymm1
713 ; AVX512BW-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
714 ; AVX512BW-NEXT:    vextracti128 $1, %ymm0, %xmm1
715 ; AVX512BW-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
716 ; AVX512BW-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
717 ; AVX512BW-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
718 ; AVX512BW-NEXT:    vmovq %xmm0, %rax
719 ; AVX512BW-NEXT:    vzeroupper
720 ; AVX512BW-NEXT:    retq
722 ; AVX512VL-LABEL: test_v16i64:
723 ; AVX512VL:       # %bb.0:
724 ; AVX512VL-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
725 ; AVX512VL-NEXT:    vextracti64x4 $1, %zmm0, %ymm1
726 ; AVX512VL-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
727 ; AVX512VL-NEXT:    vextracti128 $1, %ymm0, %xmm1
728 ; AVX512VL-NEXT:    vpminsq %xmm1, %xmm0, %xmm0
729 ; AVX512VL-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
730 ; AVX512VL-NEXT:    vpminsq %xmm1, %xmm0, %xmm0
731 ; AVX512VL-NEXT:    vmovq %xmm0, %rax
732 ; AVX512VL-NEXT:    vzeroupper
733 ; AVX512VL-NEXT:    retq
734   %1 = call i64 @llvm.vector.reduce.smin.v16i64(<16 x i64> %a0)
735   ret i64 %1
739 ; vXi32
742 define i32 @test_v2i32(<2 x i32> %a0) {
743 ; SSE2-LABEL: test_v2i32:
744 ; SSE2:       # %bb.0:
745 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
746 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
747 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
748 ; SSE2-NEXT:    pand %xmm2, %xmm0
749 ; SSE2-NEXT:    pandn %xmm1, %xmm2
750 ; SSE2-NEXT:    por %xmm0, %xmm2
751 ; SSE2-NEXT:    movd %xmm2, %eax
752 ; SSE2-NEXT:    retq
754 ; SSE4-LABEL: test_v2i32:
755 ; SSE4:       # %bb.0:
756 ; SSE4-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
757 ; SSE4-NEXT:    pminsd %xmm0, %xmm1
758 ; SSE4-NEXT:    movd %xmm1, %eax
759 ; SSE4-NEXT:    retq
761 ; AVX-LABEL: test_v2i32:
762 ; AVX:       # %bb.0:
763 ; AVX-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
764 ; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
765 ; AVX-NEXT:    vmovd %xmm0, %eax
766 ; AVX-NEXT:    retq
768 ; AVX512-LABEL: test_v2i32:
769 ; AVX512:       # %bb.0:
770 ; AVX512-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
771 ; AVX512-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
772 ; AVX512-NEXT:    vmovd %xmm0, %eax
773 ; AVX512-NEXT:    retq
774   %1 = call i32 @llvm.vector.reduce.smin.v2i32(<2 x i32> %a0)
775   ret i32 %1
778 define i32 @test_v4i32(<4 x i32> %a0) {
779 ; SSE2-LABEL: test_v4i32:
780 ; SSE2:       # %bb.0:
781 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
782 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
783 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
784 ; SSE2-NEXT:    pand %xmm2, %xmm0
785 ; SSE2-NEXT:    pandn %xmm1, %xmm2
786 ; SSE2-NEXT:    por %xmm0, %xmm2
787 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,1,1]
788 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
789 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm1
790 ; SSE2-NEXT:    pand %xmm1, %xmm2
791 ; SSE2-NEXT:    pandn %xmm0, %xmm1
792 ; SSE2-NEXT:    por %xmm2, %xmm1
793 ; SSE2-NEXT:    movd %xmm1, %eax
794 ; SSE2-NEXT:    retq
796 ; SSE4-LABEL: test_v4i32:
797 ; SSE4:       # %bb.0:
798 ; SSE4-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
799 ; SSE4-NEXT:    pminsd %xmm0, %xmm1
800 ; SSE4-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,1,1]
801 ; SSE4-NEXT:    pminsd %xmm1, %xmm0
802 ; SSE4-NEXT:    movd %xmm0, %eax
803 ; SSE4-NEXT:    retq
805 ; AVX-LABEL: test_v4i32:
806 ; AVX:       # %bb.0:
807 ; AVX-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
808 ; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
809 ; AVX-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
810 ; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
811 ; AVX-NEXT:    vmovd %xmm0, %eax
812 ; AVX-NEXT:    retq
814 ; AVX512-LABEL: test_v4i32:
815 ; AVX512:       # %bb.0:
816 ; AVX512-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
817 ; AVX512-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
818 ; AVX512-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
819 ; AVX512-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
820 ; AVX512-NEXT:    vmovd %xmm0, %eax
821 ; AVX512-NEXT:    retq
822   %1 = call i32 @llvm.vector.reduce.smin.v4i32(<4 x i32> %a0)
823   ret i32 %1
826 define i32 @test_v8i32(<8 x i32> %a0) {
827 ; SSE2-LABEL: test_v8i32:
828 ; SSE2:       # %bb.0:
829 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
830 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
831 ; SSE2-NEXT:    pand %xmm2, %xmm0
832 ; SSE2-NEXT:    pandn %xmm1, %xmm2
833 ; SSE2-NEXT:    por %xmm0, %xmm2
834 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[2,3,2,3]
835 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
836 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm1
837 ; SSE2-NEXT:    pand %xmm1, %xmm2
838 ; SSE2-NEXT:    pandn %xmm0, %xmm1
839 ; SSE2-NEXT:    por %xmm2, %xmm1
840 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,1,1]
841 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
842 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
843 ; SSE2-NEXT:    pand %xmm2, %xmm1
844 ; SSE2-NEXT:    pandn %xmm0, %xmm2
845 ; SSE2-NEXT:    por %xmm1, %xmm2
846 ; SSE2-NEXT:    movd %xmm2, %eax
847 ; SSE2-NEXT:    retq
849 ; SSE4-LABEL: test_v8i32:
850 ; SSE4:       # %bb.0:
851 ; SSE4-NEXT:    pminsd %xmm1, %xmm0
852 ; SSE4-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
853 ; SSE4-NEXT:    pminsd %xmm0, %xmm1
854 ; SSE4-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,1,1]
855 ; SSE4-NEXT:    pminsd %xmm1, %xmm0
856 ; SSE4-NEXT:    movd %xmm0, %eax
857 ; SSE4-NEXT:    retq
859 ; AVX1-LABEL: test_v8i32:
860 ; AVX1:       # %bb.0:
861 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
862 ; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
863 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
864 ; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
865 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
866 ; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
867 ; AVX1-NEXT:    vmovd %xmm0, %eax
868 ; AVX1-NEXT:    vzeroupper
869 ; AVX1-NEXT:    retq
871 ; AVX2-LABEL: test_v8i32:
872 ; AVX2:       # %bb.0:
873 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
874 ; AVX2-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
875 ; AVX2-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
876 ; AVX2-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
877 ; AVX2-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
878 ; AVX2-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
879 ; AVX2-NEXT:    vmovd %xmm0, %eax
880 ; AVX2-NEXT:    vzeroupper
881 ; AVX2-NEXT:    retq
883 ; AVX512-LABEL: test_v8i32:
884 ; AVX512:       # %bb.0:
885 ; AVX512-NEXT:    vextracti128 $1, %ymm0, %xmm1
886 ; AVX512-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
887 ; AVX512-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
888 ; AVX512-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
889 ; AVX512-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
890 ; AVX512-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
891 ; AVX512-NEXT:    vmovd %xmm0, %eax
892 ; AVX512-NEXT:    vzeroupper
893 ; AVX512-NEXT:    retq
894   %1 = call i32 @llvm.vector.reduce.smin.v8i32(<8 x i32> %a0)
895   ret i32 %1
898 define i32 @test_v16i32(<16 x i32> %a0) {
899 ; SSE2-LABEL: test_v16i32:
900 ; SSE2:       # %bb.0:
901 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
902 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
903 ; SSE2-NEXT:    pand %xmm4, %xmm0
904 ; SSE2-NEXT:    pandn %xmm2, %xmm4
905 ; SSE2-NEXT:    por %xmm0, %xmm4
906 ; SSE2-NEXT:    movdqa %xmm3, %xmm0
907 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
908 ; SSE2-NEXT:    pand %xmm0, %xmm1
909 ; SSE2-NEXT:    pandn %xmm3, %xmm0
910 ; SSE2-NEXT:    por %xmm1, %xmm0
911 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
912 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm1
913 ; SSE2-NEXT:    pand %xmm1, %xmm4
914 ; SSE2-NEXT:    pandn %xmm0, %xmm1
915 ; SSE2-NEXT:    por %xmm4, %xmm1
916 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]
917 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
918 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
919 ; SSE2-NEXT:    pand %xmm2, %xmm1
920 ; SSE2-NEXT:    pandn %xmm0, %xmm2
921 ; SSE2-NEXT:    por %xmm1, %xmm2
922 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,1,1]
923 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
924 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm1
925 ; SSE2-NEXT:    pand %xmm1, %xmm2
926 ; SSE2-NEXT:    pandn %xmm0, %xmm1
927 ; SSE2-NEXT:    por %xmm2, %xmm1
928 ; SSE2-NEXT:    movd %xmm1, %eax
929 ; SSE2-NEXT:    retq
931 ; SSE4-LABEL: test_v16i32:
932 ; SSE4:       # %bb.0:
933 ; SSE4-NEXT:    pminsd %xmm3, %xmm1
934 ; SSE4-NEXT:    pminsd %xmm2, %xmm1
935 ; SSE4-NEXT:    pminsd %xmm0, %xmm1
936 ; SSE4-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]
937 ; SSE4-NEXT:    pminsd %xmm1, %xmm0
938 ; SSE4-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
939 ; SSE4-NEXT:    pminsd %xmm0, %xmm1
940 ; SSE4-NEXT:    movd %xmm1, %eax
941 ; SSE4-NEXT:    retq
943 ; AVX1-LABEL: test_v16i32:
944 ; AVX1:       # %bb.0:
945 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
946 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
947 ; AVX1-NEXT:    vpminsd %xmm2, %xmm3, %xmm2
948 ; AVX1-NEXT:    vpminsd %xmm2, %xmm1, %xmm1
949 ; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
950 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
951 ; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
952 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
953 ; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
954 ; AVX1-NEXT:    vmovd %xmm0, %eax
955 ; AVX1-NEXT:    vzeroupper
956 ; AVX1-NEXT:    retq
958 ; AVX2-LABEL: test_v16i32:
959 ; AVX2:       # %bb.0:
960 ; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
961 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
962 ; AVX2-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
963 ; AVX2-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
964 ; AVX2-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
965 ; AVX2-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
966 ; AVX2-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
967 ; AVX2-NEXT:    vmovd %xmm0, %eax
968 ; AVX2-NEXT:    vzeroupper
969 ; AVX2-NEXT:    retq
971 ; AVX512-LABEL: test_v16i32:
972 ; AVX512:       # %bb.0:
973 ; AVX512-NEXT:    vextracti64x4 $1, %zmm0, %ymm1
974 ; AVX512-NEXT:    vpminsd %zmm1, %zmm0, %zmm0
975 ; AVX512-NEXT:    vextracti128 $1, %ymm0, %xmm1
976 ; AVX512-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
977 ; AVX512-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
978 ; AVX512-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
979 ; AVX512-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
980 ; AVX512-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
981 ; AVX512-NEXT:    vmovd %xmm0, %eax
982 ; AVX512-NEXT:    vzeroupper
983 ; AVX512-NEXT:    retq
984   %1 = call i32 @llvm.vector.reduce.smin.v16i32(<16 x i32> %a0)
985   ret i32 %1
988 define i32 @test_v32i32(<32 x i32> %a0) {
989 ; SSE2-LABEL: test_v32i32:
990 ; SSE2:       # %bb.0:
991 ; SSE2-NEXT:    movdqa %xmm5, %xmm8
992 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm8
993 ; SSE2-NEXT:    pand %xmm8, %xmm1
994 ; SSE2-NEXT:    pandn %xmm5, %xmm8
995 ; SSE2-NEXT:    por %xmm1, %xmm8
996 ; SSE2-NEXT:    movdqa %xmm7, %xmm1
997 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm1
998 ; SSE2-NEXT:    pand %xmm1, %xmm3
999 ; SSE2-NEXT:    pandn %xmm7, %xmm1
1000 ; SSE2-NEXT:    por %xmm3, %xmm1
1001 ; SSE2-NEXT:    movdqa %xmm4, %xmm3
1002 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm3
1003 ; SSE2-NEXT:    pand %xmm3, %xmm0
1004 ; SSE2-NEXT:    pandn %xmm4, %xmm3
1005 ; SSE2-NEXT:    por %xmm0, %xmm3
1006 ; SSE2-NEXT:    movdqa %xmm6, %xmm0
1007 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm0
1008 ; SSE2-NEXT:    pand %xmm0, %xmm2
1009 ; SSE2-NEXT:    pandn %xmm6, %xmm0
1010 ; SSE2-NEXT:    por %xmm2, %xmm0
1011 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
1012 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
1013 ; SSE2-NEXT:    pand %xmm2, %xmm3
1014 ; SSE2-NEXT:    pandn %xmm0, %xmm2
1015 ; SSE2-NEXT:    por %xmm3, %xmm2
1016 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
1017 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm0
1018 ; SSE2-NEXT:    pand %xmm0, %xmm8
1019 ; SSE2-NEXT:    pandn %xmm1, %xmm0
1020 ; SSE2-NEXT:    por %xmm8, %xmm0
1021 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
1022 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm1
1023 ; SSE2-NEXT:    pand %xmm1, %xmm2
1024 ; SSE2-NEXT:    pandn %xmm0, %xmm1
1025 ; SSE2-NEXT:    por %xmm2, %xmm1
1026 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]
1027 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
1028 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
1029 ; SSE2-NEXT:    pand %xmm2, %xmm1
1030 ; SSE2-NEXT:    pandn %xmm0, %xmm2
1031 ; SSE2-NEXT:    por %xmm1, %xmm2
1032 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,1,1]
1033 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
1034 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm1
1035 ; SSE2-NEXT:    pand %xmm1, %xmm2
1036 ; SSE2-NEXT:    pandn %xmm0, %xmm1
1037 ; SSE2-NEXT:    por %xmm2, %xmm1
1038 ; SSE2-NEXT:    movd %xmm1, %eax
1039 ; SSE2-NEXT:    retq
1041 ; SSE4-LABEL: test_v32i32:
1042 ; SSE4:       # %bb.0:
1043 ; SSE4-NEXT:    pminsd %xmm6, %xmm2
1044 ; SSE4-NEXT:    pminsd %xmm7, %xmm3
1045 ; SSE4-NEXT:    pminsd %xmm5, %xmm3
1046 ; SSE4-NEXT:    pminsd %xmm1, %xmm3
1047 ; SSE4-NEXT:    pminsd %xmm4, %xmm2
1048 ; SSE4-NEXT:    pminsd %xmm3, %xmm2
1049 ; SSE4-NEXT:    pminsd %xmm0, %xmm2
1050 ; SSE4-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[2,3,2,3]
1051 ; SSE4-NEXT:    pminsd %xmm2, %xmm0
1052 ; SSE4-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
1053 ; SSE4-NEXT:    pminsd %xmm0, %xmm1
1054 ; SSE4-NEXT:    movd %xmm1, %eax
1055 ; SSE4-NEXT:    retq
1057 ; AVX1-LABEL: test_v32i32:
1058 ; AVX1:       # %bb.0:
1059 ; AVX1-NEXT:    vpminsd %xmm3, %xmm1, %xmm4
1060 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm3
1061 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm1
1062 ; AVX1-NEXT:    vpminsd %xmm3, %xmm1, %xmm1
1063 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm3
1064 ; AVX1-NEXT:    vpminsd %xmm1, %xmm3, %xmm1
1065 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1066 ; AVX1-NEXT:    vpminsd %xmm1, %xmm3, %xmm1
1067 ; AVX1-NEXT:    vpminsd %xmm4, %xmm2, %xmm2
1068 ; AVX1-NEXT:    vpminsd %xmm1, %xmm2, %xmm1
1069 ; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
1070 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
1071 ; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
1072 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
1073 ; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
1074 ; AVX1-NEXT:    vmovd %xmm0, %eax
1075 ; AVX1-NEXT:    vzeroupper
1076 ; AVX1-NEXT:    retq
1078 ; AVX2-LABEL: test_v32i32:
1079 ; AVX2:       # %bb.0:
1080 ; AVX2-NEXT:    vpminsd %ymm3, %ymm1, %ymm1
1081 ; AVX2-NEXT:    vpminsd %ymm1, %ymm2, %ymm1
1082 ; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
1083 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
1084 ; AVX2-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
1085 ; AVX2-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
1086 ; AVX2-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
1087 ; AVX2-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
1088 ; AVX2-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
1089 ; AVX2-NEXT:    vmovd %xmm0, %eax
1090 ; AVX2-NEXT:    vzeroupper
1091 ; AVX2-NEXT:    retq
1093 ; AVX512-LABEL: test_v32i32:
1094 ; AVX512:       # %bb.0:
1095 ; AVX512-NEXT:    vpminsd %zmm1, %zmm0, %zmm0
1096 ; AVX512-NEXT:    vextracti64x4 $1, %zmm0, %ymm1
1097 ; AVX512-NEXT:    vpminsd %zmm1, %zmm0, %zmm0
1098 ; AVX512-NEXT:    vextracti128 $1, %ymm0, %xmm1
1099 ; AVX512-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
1100 ; AVX512-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
1101 ; AVX512-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
1102 ; AVX512-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
1103 ; AVX512-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
1104 ; AVX512-NEXT:    vmovd %xmm0, %eax
1105 ; AVX512-NEXT:    vzeroupper
1106 ; AVX512-NEXT:    retq
1107   %1 = call i32 @llvm.vector.reduce.smin.v32i32(<32 x i32> %a0)
1108   ret i32 %1
1112 ; vXi16
1115 define i16 @test_v2i16(<2 x i16> %a0) {
1116 ; SSE-LABEL: test_v2i16:
1117 ; SSE:       # %bb.0:
1118 ; SSE-NEXT:    movdqa %xmm0, %xmm1
1119 ; SSE-NEXT:    psrld $16, %xmm1
1120 ; SSE-NEXT:    pminsw %xmm0, %xmm1
1121 ; SSE-NEXT:    movd %xmm1, %eax
1122 ; SSE-NEXT:    # kill: def $ax killed $ax killed $eax
1123 ; SSE-NEXT:    retq
1125 ; AVX-LABEL: test_v2i16:
1126 ; AVX:       # %bb.0:
1127 ; AVX-NEXT:    vpsrld $16, %xmm0, %xmm1
1128 ; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
1129 ; AVX-NEXT:    vmovd %xmm0, %eax
1130 ; AVX-NEXT:    # kill: def $ax killed $ax killed $eax
1131 ; AVX-NEXT:    retq
1133 ; AVX512-LABEL: test_v2i16:
1134 ; AVX512:       # %bb.0:
1135 ; AVX512-NEXT:    vpsrld $16, %xmm0, %xmm1
1136 ; AVX512-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
1137 ; AVX512-NEXT:    vmovd %xmm0, %eax
1138 ; AVX512-NEXT:    # kill: def $ax killed $ax killed $eax
1139 ; AVX512-NEXT:    retq
1140   %1 = call i16 @llvm.vector.reduce.smin.v2i16(<2 x i16> %a0)
1141   ret i16 %1
1144 define i16 @test_v4i16(<4 x i16> %a0) {
1145 ; SSE-LABEL: test_v4i16:
1146 ; SSE:       # %bb.0:
1147 ; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
1148 ; SSE-NEXT:    pminsw %xmm0, %xmm1
1149 ; SSE-NEXT:    movdqa %xmm1, %xmm0
1150 ; SSE-NEXT:    psrld $16, %xmm0
1151 ; SSE-NEXT:    pminsw %xmm1, %xmm0
1152 ; SSE-NEXT:    movd %xmm0, %eax
1153 ; SSE-NEXT:    # kill: def $ax killed $ax killed $eax
1154 ; SSE-NEXT:    retq
1156 ; AVX-LABEL: test_v4i16:
1157 ; AVX:       # %bb.0:
1158 ; AVX-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
1159 ; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
1160 ; AVX-NEXT:    vpsrld $16, %xmm0, %xmm1
1161 ; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
1162 ; AVX-NEXT:    vmovd %xmm0, %eax
1163 ; AVX-NEXT:    # kill: def $ax killed $ax killed $eax
1164 ; AVX-NEXT:    retq
1166 ; AVX512-LABEL: test_v4i16:
1167 ; AVX512:       # %bb.0:
1168 ; AVX512-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
1169 ; AVX512-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
1170 ; AVX512-NEXT:    vpsrld $16, %xmm0, %xmm1
1171 ; AVX512-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
1172 ; AVX512-NEXT:    vmovd %xmm0, %eax
1173 ; AVX512-NEXT:    # kill: def $ax killed $ax killed $eax
1174 ; AVX512-NEXT:    retq
1175   %1 = call i16 @llvm.vector.reduce.smin.v4i16(<4 x i16> %a0)
1176   ret i16 %1
1179 define i16 @test_v8i16(<8 x i16> %a0) {
1180 ; SSE2-LABEL: test_v8i16:
1181 ; SSE2:       # %bb.0:
1182 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
1183 ; SSE2-NEXT:    pminsw %xmm0, %xmm1
1184 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,1,1]
1185 ; SSE2-NEXT:    pminsw %xmm1, %xmm0
1186 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
1187 ; SSE2-NEXT:    psrld $16, %xmm1
1188 ; SSE2-NEXT:    pminsw %xmm0, %xmm1
1189 ; SSE2-NEXT:    movd %xmm1, %eax
1190 ; SSE2-NEXT:    # kill: def $ax killed $ax killed $eax
1191 ; SSE2-NEXT:    retq
1193 ; SSE4-LABEL: test_v8i16:
1194 ; SSE4:       # %bb.0:
1195 ; SSE4-NEXT:    pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1196 ; SSE4-NEXT:    phminposuw %xmm0, %xmm0
1197 ; SSE4-NEXT:    movd %xmm0, %eax
1198 ; SSE4-NEXT:    xorl $32768, %eax # imm = 0x8000
1199 ; SSE4-NEXT:    # kill: def $ax killed $ax killed $eax
1200 ; SSE4-NEXT:    retq
1202 ; AVX-LABEL: test_v8i16:
1203 ; AVX:       # %bb.0:
1204 ; AVX-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1205 ; AVX-NEXT:    vphminposuw %xmm0, %xmm0
1206 ; AVX-NEXT:    vmovd %xmm0, %eax
1207 ; AVX-NEXT:    xorl $32768, %eax # imm = 0x8000
1208 ; AVX-NEXT:    # kill: def $ax killed $ax killed $eax
1209 ; AVX-NEXT:    retq
1211 ; AVX512-LABEL: test_v8i16:
1212 ; AVX512:       # %bb.0:
1213 ; AVX512-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1214 ; AVX512-NEXT:    vphminposuw %xmm0, %xmm0
1215 ; AVX512-NEXT:    vmovd %xmm0, %eax
1216 ; AVX512-NEXT:    xorl $32768, %eax # imm = 0x8000
1217 ; AVX512-NEXT:    # kill: def $ax killed $ax killed $eax
1218 ; AVX512-NEXT:    retq
1219   %1 = call i16 @llvm.vector.reduce.smin.v8i16(<8 x i16> %a0)
1220   ret i16 %1
1223 define i16 @test_v16i16(<16 x i16> %a0) {
1224 ; SSE2-LABEL: test_v16i16:
1225 ; SSE2:       # %bb.0:
1226 ; SSE2-NEXT:    pminsw %xmm1, %xmm0
1227 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
1228 ; SSE2-NEXT:    pminsw %xmm0, %xmm1
1229 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,1,1]
1230 ; SSE2-NEXT:    pminsw %xmm1, %xmm0
1231 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
1232 ; SSE2-NEXT:    psrld $16, %xmm1
1233 ; SSE2-NEXT:    pminsw %xmm0, %xmm1
1234 ; SSE2-NEXT:    movd %xmm1, %eax
1235 ; SSE2-NEXT:    # kill: def $ax killed $ax killed $eax
1236 ; SSE2-NEXT:    retq
1238 ; SSE4-LABEL: test_v16i16:
1239 ; SSE4:       # %bb.0:
1240 ; SSE4-NEXT:    pminsw %xmm1, %xmm0
1241 ; SSE4-NEXT:    pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1242 ; SSE4-NEXT:    phminposuw %xmm0, %xmm0
1243 ; SSE4-NEXT:    movd %xmm0, %eax
1244 ; SSE4-NEXT:    xorl $32768, %eax # imm = 0x8000
1245 ; SSE4-NEXT:    # kill: def $ax killed $ax killed $eax
1246 ; SSE4-NEXT:    retq
1248 ; AVX1-LABEL: test_v16i16:
1249 ; AVX1:       # %bb.0:
1250 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
1251 ; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
1252 ; AVX1-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1253 ; AVX1-NEXT:    vphminposuw %xmm0, %xmm0
1254 ; AVX1-NEXT:    vmovd %xmm0, %eax
1255 ; AVX1-NEXT:    xorl $32768, %eax # imm = 0x8000
1256 ; AVX1-NEXT:    # kill: def $ax killed $ax killed $eax
1257 ; AVX1-NEXT:    vzeroupper
1258 ; AVX1-NEXT:    retq
1260 ; AVX2-LABEL: test_v16i16:
1261 ; AVX2:       # %bb.0:
1262 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
1263 ; AVX2-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
1264 ; AVX2-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1265 ; AVX2-NEXT:    vphminposuw %xmm0, %xmm0
1266 ; AVX2-NEXT:    vmovd %xmm0, %eax
1267 ; AVX2-NEXT:    xorl $32768, %eax # imm = 0x8000
1268 ; AVX2-NEXT:    # kill: def $ax killed $ax killed $eax
1269 ; AVX2-NEXT:    vzeroupper
1270 ; AVX2-NEXT:    retq
1272 ; AVX512-LABEL: test_v16i16:
1273 ; AVX512:       # %bb.0:
1274 ; AVX512-NEXT:    vextracti128 $1, %ymm0, %xmm1
1275 ; AVX512-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
1276 ; AVX512-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1277 ; AVX512-NEXT:    vphminposuw %xmm0, %xmm0
1278 ; AVX512-NEXT:    vmovd %xmm0, %eax
1279 ; AVX512-NEXT:    xorl $32768, %eax # imm = 0x8000
1280 ; AVX512-NEXT:    # kill: def $ax killed $ax killed $eax
1281 ; AVX512-NEXT:    vzeroupper
1282 ; AVX512-NEXT:    retq
1283   %1 = call i16 @llvm.vector.reduce.smin.v16i16(<16 x i16> %a0)
1284   ret i16 %1
1287 define i16 @test_v32i16(<32 x i16> %a0) {
1288 ; SSE2-LABEL: test_v32i16:
1289 ; SSE2:       # %bb.0:
1290 ; SSE2-NEXT:    pminsw %xmm3, %xmm1
1291 ; SSE2-NEXT:    pminsw %xmm2, %xmm1
1292 ; SSE2-NEXT:    pminsw %xmm0, %xmm1
1293 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]
1294 ; SSE2-NEXT:    pminsw %xmm1, %xmm0
1295 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
1296 ; SSE2-NEXT:    pminsw %xmm0, %xmm1
1297 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
1298 ; SSE2-NEXT:    psrld $16, %xmm0
1299 ; SSE2-NEXT:    pminsw %xmm1, %xmm0
1300 ; SSE2-NEXT:    movd %xmm0, %eax
1301 ; SSE2-NEXT:    # kill: def $ax killed $ax killed $eax
1302 ; SSE2-NEXT:    retq
1304 ; SSE4-LABEL: test_v32i16:
1305 ; SSE4:       # %bb.0:
1306 ; SSE4-NEXT:    pminsw %xmm3, %xmm1
1307 ; SSE4-NEXT:    pminsw %xmm2, %xmm1
1308 ; SSE4-NEXT:    pminsw %xmm0, %xmm1
1309 ; SSE4-NEXT:    pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
1310 ; SSE4-NEXT:    phminposuw %xmm1, %xmm0
1311 ; SSE4-NEXT:    movd %xmm0, %eax
1312 ; SSE4-NEXT:    xorl $32768, %eax # imm = 0x8000
1313 ; SSE4-NEXT:    # kill: def $ax killed $ax killed $eax
1314 ; SSE4-NEXT:    retq
1316 ; AVX1-LABEL: test_v32i16:
1317 ; AVX1:       # %bb.0:
1318 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1319 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1320 ; AVX1-NEXT:    vpminsw %xmm2, %xmm3, %xmm2
1321 ; AVX1-NEXT:    vpminsw %xmm2, %xmm1, %xmm1
1322 ; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
1323 ; AVX1-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1324 ; AVX1-NEXT:    vphminposuw %xmm0, %xmm0
1325 ; AVX1-NEXT:    vmovd %xmm0, %eax
1326 ; AVX1-NEXT:    xorl $32768, %eax # imm = 0x8000
1327 ; AVX1-NEXT:    # kill: def $ax killed $ax killed $eax
1328 ; AVX1-NEXT:    vzeroupper
1329 ; AVX1-NEXT:    retq
1331 ; AVX2-LABEL: test_v32i16:
1332 ; AVX2:       # %bb.0:
1333 ; AVX2-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
1334 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
1335 ; AVX2-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
1336 ; AVX2-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1337 ; AVX2-NEXT:    vphminposuw %xmm0, %xmm0
1338 ; AVX2-NEXT:    vmovd %xmm0, %eax
1339 ; AVX2-NEXT:    xorl $32768, %eax # imm = 0x8000
1340 ; AVX2-NEXT:    # kill: def $ax killed $ax killed $eax
1341 ; AVX2-NEXT:    vzeroupper
1342 ; AVX2-NEXT:    retq
1344 ; AVX512-LABEL: test_v32i16:
1345 ; AVX512:       # %bb.0:
1346 ; AVX512-NEXT:    vextracti64x4 $1, %zmm0, %ymm1
1347 ; AVX512-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
1348 ; AVX512-NEXT:    vextracti128 $1, %ymm0, %xmm1
1349 ; AVX512-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
1350 ; AVX512-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1351 ; AVX512-NEXT:    vphminposuw %xmm0, %xmm0
1352 ; AVX512-NEXT:    vmovd %xmm0, %eax
1353 ; AVX512-NEXT:    xorl $32768, %eax # imm = 0x8000
1354 ; AVX512-NEXT:    # kill: def $ax killed $ax killed $eax
1355 ; AVX512-NEXT:    vzeroupper
1356 ; AVX512-NEXT:    retq
1357   %1 = call i16 @llvm.vector.reduce.smin.v32i16(<32 x i16> %a0)
1358   ret i16 %1
1361 define i16 @test_v64i16(<64 x i16> %a0) {
1362 ; SSE2-LABEL: test_v64i16:
1363 ; SSE2:       # %bb.0:
1364 ; SSE2-NEXT:    pminsw %xmm6, %xmm2
1365 ; SSE2-NEXT:    pminsw %xmm7, %xmm3
1366 ; SSE2-NEXT:    pminsw %xmm5, %xmm3
1367 ; SSE2-NEXT:    pminsw %xmm1, %xmm3
1368 ; SSE2-NEXT:    pminsw %xmm4, %xmm2
1369 ; SSE2-NEXT:    pminsw %xmm3, %xmm2
1370 ; SSE2-NEXT:    pminsw %xmm0, %xmm2
1371 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[2,3,2,3]
1372 ; SSE2-NEXT:    pminsw %xmm2, %xmm0
1373 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
1374 ; SSE2-NEXT:    pminsw %xmm0, %xmm1
1375 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
1376 ; SSE2-NEXT:    psrld $16, %xmm0
1377 ; SSE2-NEXT:    pminsw %xmm1, %xmm0
1378 ; SSE2-NEXT:    movd %xmm0, %eax
1379 ; SSE2-NEXT:    # kill: def $ax killed $ax killed $eax
1380 ; SSE2-NEXT:    retq
1382 ; SSE4-LABEL: test_v64i16:
1383 ; SSE4:       # %bb.0:
1384 ; SSE4-NEXT:    pminsw %xmm7, %xmm3
1385 ; SSE4-NEXT:    pminsw %xmm5, %xmm3
1386 ; SSE4-NEXT:    pminsw %xmm1, %xmm3
1387 ; SSE4-NEXT:    pminsw %xmm6, %xmm2
1388 ; SSE4-NEXT:    pminsw %xmm4, %xmm2
1389 ; SSE4-NEXT:    pminsw %xmm3, %xmm2
1390 ; SSE4-NEXT:    pminsw %xmm0, %xmm2
1391 ; SSE4-NEXT:    pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
1392 ; SSE4-NEXT:    phminposuw %xmm2, %xmm0
1393 ; SSE4-NEXT:    movd %xmm0, %eax
1394 ; SSE4-NEXT:    xorl $32768, %eax # imm = 0x8000
1395 ; SSE4-NEXT:    # kill: def $ax killed $ax killed $eax
1396 ; SSE4-NEXT:    retq
1398 ; AVX1-LABEL: test_v64i16:
1399 ; AVX1:       # %bb.0:
1400 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
1401 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5
1402 ; AVX1-NEXT:    vpminsw %xmm4, %xmm5, %xmm4
1403 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm5
1404 ; AVX1-NEXT:    vpminsw %xmm4, %xmm5, %xmm4
1405 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
1406 ; AVX1-NEXT:    vpminsw %xmm4, %xmm5, %xmm4
1407 ; AVX1-NEXT:    vpminsw %xmm3, %xmm1, %xmm1
1408 ; AVX1-NEXT:    vpminsw %xmm1, %xmm2, %xmm1
1409 ; AVX1-NEXT:    vpminsw %xmm4, %xmm1, %xmm1
1410 ; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
1411 ; AVX1-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1412 ; AVX1-NEXT:    vphminposuw %xmm0, %xmm0
1413 ; AVX1-NEXT:    vmovd %xmm0, %eax
1414 ; AVX1-NEXT:    xorl $32768, %eax # imm = 0x8000
1415 ; AVX1-NEXT:    # kill: def $ax killed $ax killed $eax
1416 ; AVX1-NEXT:    vzeroupper
1417 ; AVX1-NEXT:    retq
1419 ; AVX2-LABEL: test_v64i16:
1420 ; AVX2:       # %bb.0:
1421 ; AVX2-NEXT:    vpminsw %ymm3, %ymm1, %ymm1
1422 ; AVX2-NEXT:    vpminsw %ymm1, %ymm2, %ymm1
1423 ; AVX2-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
1424 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
1425 ; AVX2-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
1426 ; AVX2-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1427 ; AVX2-NEXT:    vphminposuw %xmm0, %xmm0
1428 ; AVX2-NEXT:    vmovd %xmm0, %eax
1429 ; AVX2-NEXT:    xorl $32768, %eax # imm = 0x8000
1430 ; AVX2-NEXT:    # kill: def $ax killed $ax killed $eax
1431 ; AVX2-NEXT:    vzeroupper
1432 ; AVX2-NEXT:    retq
1434 ; AVX512-LABEL: test_v64i16:
1435 ; AVX512:       # %bb.0:
1436 ; AVX512-NEXT:    vpminsw %zmm1, %zmm0, %zmm0
1437 ; AVX512-NEXT:    vextracti64x4 $1, %zmm0, %ymm1
1438 ; AVX512-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
1439 ; AVX512-NEXT:    vextracti128 $1, %ymm0, %xmm1
1440 ; AVX512-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
1441 ; AVX512-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1442 ; AVX512-NEXT:    vphminposuw %xmm0, %xmm0
1443 ; AVX512-NEXT:    vmovd %xmm0, %eax
1444 ; AVX512-NEXT:    xorl $32768, %eax # imm = 0x8000
1445 ; AVX512-NEXT:    # kill: def $ax killed $ax killed $eax
1446 ; AVX512-NEXT:    vzeroupper
1447 ; AVX512-NEXT:    retq
1448   %1 = call i16 @llvm.vector.reduce.smin.v64i16(<64 x i16> %a0)
1449   ret i16 %1
1453 ; vXi8
1456 define i8 @test_v2i8(<2 x i8> %a0) {
1457 ; SSE2-LABEL: test_v2i8:
1458 ; SSE2:       # %bb.0:
1459 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
1460 ; SSE2-NEXT:    psrlw $8, %xmm1
1461 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
1462 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm2
1463 ; SSE2-NEXT:    pand %xmm2, %xmm0
1464 ; SSE2-NEXT:    pandn %xmm1, %xmm2
1465 ; SSE2-NEXT:    por %xmm0, %xmm2
1466 ; SSE2-NEXT:    movd %xmm2, %eax
1467 ; SSE2-NEXT:    # kill: def $al killed $al killed $eax
1468 ; SSE2-NEXT:    retq
1470 ; SSE4-LABEL: test_v2i8:
1471 ; SSE4:       # %bb.0:
1472 ; SSE4-NEXT:    movdqa %xmm0, %xmm1
1473 ; SSE4-NEXT:    psrlw $8, %xmm1
1474 ; SSE4-NEXT:    pminsb %xmm0, %xmm1
1475 ; SSE4-NEXT:    movd %xmm1, %eax
1476 ; SSE4-NEXT:    # kill: def $al killed $al killed $eax
1477 ; SSE4-NEXT:    retq
1479 ; AVX-LABEL: test_v2i8:
1480 ; AVX:       # %bb.0:
1481 ; AVX-NEXT:    vpsrlw $8, %xmm0, %xmm1
1482 ; AVX-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
1483 ; AVX-NEXT:    vmovd %xmm0, %eax
1484 ; AVX-NEXT:    # kill: def $al killed $al killed $eax
1485 ; AVX-NEXT:    retq
1487 ; AVX512-LABEL: test_v2i8:
1488 ; AVX512:       # %bb.0:
1489 ; AVX512-NEXT:    vpsrlw $8, %xmm0, %xmm1
1490 ; AVX512-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
1491 ; AVX512-NEXT:    vmovd %xmm0, %eax
1492 ; AVX512-NEXT:    # kill: def $al killed $al killed $eax
1493 ; AVX512-NEXT:    retq
1494   %1 = call i8 @llvm.vector.reduce.smin.v2i8(<2 x i8> %a0)
1495   ret i8 %1
1498 define i8 @test_v4i8(<4 x i8> %a0) {
1499 ; SSE2-LABEL: test_v4i8:
1500 ; SSE2:       # %bb.0:
1501 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
1502 ; SSE2-NEXT:    psrld $16, %xmm1
1503 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
1504 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm2
1505 ; SSE2-NEXT:    pand %xmm2, %xmm0
1506 ; SSE2-NEXT:    pandn %xmm1, %xmm2
1507 ; SSE2-NEXT:    por %xmm0, %xmm2
1508 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
1509 ; SSE2-NEXT:    psrlw $8, %xmm0
1510 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
1511 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm1
1512 ; SSE2-NEXT:    pand %xmm1, %xmm2
1513 ; SSE2-NEXT:    pandn %xmm0, %xmm1
1514 ; SSE2-NEXT:    por %xmm2, %xmm1
1515 ; SSE2-NEXT:    movd %xmm1, %eax
1516 ; SSE2-NEXT:    # kill: def $al killed $al killed $eax
1517 ; SSE2-NEXT:    retq
1519 ; SSE4-LABEL: test_v4i8:
1520 ; SSE4:       # %bb.0:
1521 ; SSE4-NEXT:    movdqa %xmm0, %xmm1
1522 ; SSE4-NEXT:    psrld $16, %xmm1
1523 ; SSE4-NEXT:    pminsb %xmm0, %xmm1
1524 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
1525 ; SSE4-NEXT:    psrlw $8, %xmm0
1526 ; SSE4-NEXT:    pminsb %xmm1, %xmm0
1527 ; SSE4-NEXT:    movd %xmm0, %eax
1528 ; SSE4-NEXT:    # kill: def $al killed $al killed $eax
1529 ; SSE4-NEXT:    retq
1531 ; AVX-LABEL: test_v4i8:
1532 ; AVX:       # %bb.0:
1533 ; AVX-NEXT:    vpsrld $16, %xmm0, %xmm1
1534 ; AVX-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
1535 ; AVX-NEXT:    vpsrlw $8, %xmm0, %xmm1
1536 ; AVX-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
1537 ; AVX-NEXT:    vmovd %xmm0, %eax
1538 ; AVX-NEXT:    # kill: def $al killed $al killed $eax
1539 ; AVX-NEXT:    retq
1541 ; AVX512-LABEL: test_v4i8:
1542 ; AVX512:       # %bb.0:
1543 ; AVX512-NEXT:    vpsrld $16, %xmm0, %xmm1
1544 ; AVX512-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
1545 ; AVX512-NEXT:    vpsrlw $8, %xmm0, %xmm1
1546 ; AVX512-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
1547 ; AVX512-NEXT:    vmovd %xmm0, %eax
1548 ; AVX512-NEXT:    # kill: def $al killed $al killed $eax
1549 ; AVX512-NEXT:    retq
1550   %1 = call i8 @llvm.vector.reduce.smin.v4i8(<4 x i8> %a0)
1551   ret i8 %1
1554 define i8 @test_v8i8(<8 x i8> %a0) {
1555 ; SSE2-LABEL: test_v8i8:
1556 ; SSE2:       # %bb.0:
1557 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
1558 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
1559 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm2
1560 ; SSE2-NEXT:    pand %xmm2, %xmm0
1561 ; SSE2-NEXT:    pandn %xmm1, %xmm2
1562 ; SSE2-NEXT:    por %xmm0, %xmm2
1563 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
1564 ; SSE2-NEXT:    psrld $16, %xmm0
1565 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
1566 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm1
1567 ; SSE2-NEXT:    pand %xmm1, %xmm2
1568 ; SSE2-NEXT:    pandn %xmm0, %xmm1
1569 ; SSE2-NEXT:    por %xmm2, %xmm1
1570 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
1571 ; SSE2-NEXT:    psrlw $8, %xmm0
1572 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
1573 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
1574 ; SSE2-NEXT:    pand %xmm2, %xmm1
1575 ; SSE2-NEXT:    pandn %xmm0, %xmm2
1576 ; SSE2-NEXT:    por %xmm1, %xmm2
1577 ; SSE2-NEXT:    movd %xmm2, %eax
1578 ; SSE2-NEXT:    # kill: def $al killed $al killed $eax
1579 ; SSE2-NEXT:    retq
1581 ; SSE4-LABEL: test_v8i8:
1582 ; SSE4:       # %bb.0:
1583 ; SSE4-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
1584 ; SSE4-NEXT:    pminsb %xmm0, %xmm1
1585 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
1586 ; SSE4-NEXT:    psrld $16, %xmm0
1587 ; SSE4-NEXT:    pminsb %xmm1, %xmm0
1588 ; SSE4-NEXT:    movdqa %xmm0, %xmm1
1589 ; SSE4-NEXT:    psrlw $8, %xmm1
1590 ; SSE4-NEXT:    pminsb %xmm0, %xmm1
1591 ; SSE4-NEXT:    movd %xmm1, %eax
1592 ; SSE4-NEXT:    # kill: def $al killed $al killed $eax
1593 ; SSE4-NEXT:    retq
1595 ; AVX-LABEL: test_v8i8:
1596 ; AVX:       # %bb.0:
1597 ; AVX-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
1598 ; AVX-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
1599 ; AVX-NEXT:    vpsrld $16, %xmm0, %xmm1
1600 ; AVX-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
1601 ; AVX-NEXT:    vpsrlw $8, %xmm0, %xmm1
1602 ; AVX-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
1603 ; AVX-NEXT:    vmovd %xmm0, %eax
1604 ; AVX-NEXT:    # kill: def $al killed $al killed $eax
1605 ; AVX-NEXT:    retq
1607 ; AVX512-LABEL: test_v8i8:
1608 ; AVX512:       # %bb.0:
1609 ; AVX512-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
1610 ; AVX512-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
1611 ; AVX512-NEXT:    vpsrld $16, %xmm0, %xmm1
1612 ; AVX512-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
1613 ; AVX512-NEXT:    vpsrlw $8, %xmm0, %xmm1
1614 ; AVX512-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
1615 ; AVX512-NEXT:    vmovd %xmm0, %eax
1616 ; AVX512-NEXT:    # kill: def $al killed $al killed $eax
1617 ; AVX512-NEXT:    retq
1618   %1 = call i8 @llvm.vector.reduce.smin.v8i8(<8 x i8> %a0)
1619   ret i8 %1
1622 define i8 @test_v16i8(<16 x i8> %a0) {
1623 ; SSE2-LABEL: test_v16i8:
1624 ; SSE2:       # %bb.0:
1625 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3]
1626 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
1627 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm2
1628 ; SSE2-NEXT:    pand %xmm2, %xmm0
1629 ; SSE2-NEXT:    pandn %xmm1, %xmm2
1630 ; SSE2-NEXT:    por %xmm0, %xmm2
1631 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,1,1]
1632 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
1633 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm1
1634 ; SSE2-NEXT:    pand %xmm1, %xmm2
1635 ; SSE2-NEXT:    pandn %xmm0, %xmm1
1636 ; SSE2-NEXT:    por %xmm2, %xmm1
1637 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
1638 ; SSE2-NEXT:    psrld $16, %xmm0
1639 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
1640 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
1641 ; SSE2-NEXT:    pand %xmm2, %xmm1
1642 ; SSE2-NEXT:    pandn %xmm0, %xmm2
1643 ; SSE2-NEXT:    por %xmm1, %xmm2
1644 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
1645 ; SSE2-NEXT:    psrlw $8, %xmm0
1646 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
1647 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm1
1648 ; SSE2-NEXT:    pand %xmm1, %xmm2
1649 ; SSE2-NEXT:    pandn %xmm0, %xmm1
1650 ; SSE2-NEXT:    por %xmm2, %xmm1
1651 ; SSE2-NEXT:    movd %xmm1, %eax
1652 ; SSE2-NEXT:    # kill: def $al killed $al killed $eax
1653 ; SSE2-NEXT:    retq
1655 ; SSE4-LABEL: test_v16i8:
1656 ; SSE4:       # %bb.0:
1657 ; SSE4-NEXT:    pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1658 ; SSE4-NEXT:    movdqa %xmm0, %xmm1
1659 ; SSE4-NEXT:    psrlw $8, %xmm1
1660 ; SSE4-NEXT:    pminub %xmm0, %xmm1
1661 ; SSE4-NEXT:    phminposuw %xmm1, %xmm0
1662 ; SSE4-NEXT:    movd %xmm0, %eax
1663 ; SSE4-NEXT:    xorb $-128, %al
1664 ; SSE4-NEXT:    # kill: def $al killed $al killed $eax
1665 ; SSE4-NEXT:    retq
1667 ; AVX-LABEL: test_v16i8:
1668 ; AVX:       # %bb.0:
1669 ; AVX-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1670 ; AVX-NEXT:    vpsrlw $8, %xmm0, %xmm1
1671 ; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm0
1672 ; AVX-NEXT:    vphminposuw %xmm0, %xmm0
1673 ; AVX-NEXT:    vmovd %xmm0, %eax
1674 ; AVX-NEXT:    xorb $-128, %al
1675 ; AVX-NEXT:    # kill: def $al killed $al killed $eax
1676 ; AVX-NEXT:    retq
1678 ; AVX512-LABEL: test_v16i8:
1679 ; AVX512:       # %bb.0:
1680 ; AVX512-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1681 ; AVX512-NEXT:    vpsrlw $8, %xmm0, %xmm1
1682 ; AVX512-NEXT:    vpminub %xmm1, %xmm0, %xmm0
1683 ; AVX512-NEXT:    vphminposuw %xmm0, %xmm0
1684 ; AVX512-NEXT:    vmovd %xmm0, %eax
1685 ; AVX512-NEXT:    xorb $-128, %al
1686 ; AVX512-NEXT:    # kill: def $al killed $al killed $eax
1687 ; AVX512-NEXT:    retq
1688   %1 = call i8 @llvm.vector.reduce.smin.v16i8(<16 x i8> %a0)
1689   ret i8 %1
1692 define i8 @test_v32i8(<32 x i8> %a0) {
1693 ; SSE2-LABEL: test_v32i8:
1694 ; SSE2:       # %bb.0:
1695 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
1696 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm2
1697 ; SSE2-NEXT:    pand %xmm2, %xmm0
1698 ; SSE2-NEXT:    pandn %xmm1, %xmm2
1699 ; SSE2-NEXT:    por %xmm0, %xmm2
1700 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[2,3,2,3]
1701 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
1702 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm1
1703 ; SSE2-NEXT:    pand %xmm1, %xmm2
1704 ; SSE2-NEXT:    pandn %xmm0, %xmm1
1705 ; SSE2-NEXT:    por %xmm2, %xmm1
1706 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,1,1]
1707 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
1708 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
1709 ; SSE2-NEXT:    pand %xmm2, %xmm1
1710 ; SSE2-NEXT:    pandn %xmm0, %xmm2
1711 ; SSE2-NEXT:    por %xmm1, %xmm2
1712 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
1713 ; SSE2-NEXT:    psrld $16, %xmm0
1714 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
1715 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm1
1716 ; SSE2-NEXT:    pand %xmm1, %xmm2
1717 ; SSE2-NEXT:    pandn %xmm0, %xmm1
1718 ; SSE2-NEXT:    por %xmm2, %xmm1
1719 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
1720 ; SSE2-NEXT:    psrlw $8, %xmm0
1721 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
1722 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
1723 ; SSE2-NEXT:    pand %xmm2, %xmm1
1724 ; SSE2-NEXT:    pandn %xmm0, %xmm2
1725 ; SSE2-NEXT:    por %xmm1, %xmm2
1726 ; SSE2-NEXT:    movd %xmm2, %eax
1727 ; SSE2-NEXT:    # kill: def $al killed $al killed $eax
1728 ; SSE2-NEXT:    retq
1730 ; SSE4-LABEL: test_v32i8:
1731 ; SSE4:       # %bb.0:
1732 ; SSE4-NEXT:    pminsb %xmm1, %xmm0
1733 ; SSE4-NEXT:    pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1734 ; SSE4-NEXT:    movdqa %xmm0, %xmm1
1735 ; SSE4-NEXT:    psrlw $8, %xmm1
1736 ; SSE4-NEXT:    pminub %xmm0, %xmm1
1737 ; SSE4-NEXT:    phminposuw %xmm1, %xmm0
1738 ; SSE4-NEXT:    movd %xmm0, %eax
1739 ; SSE4-NEXT:    xorb $-128, %al
1740 ; SSE4-NEXT:    # kill: def $al killed $al killed $eax
1741 ; SSE4-NEXT:    retq
1743 ; AVX1-LABEL: test_v32i8:
1744 ; AVX1:       # %bb.0:
1745 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
1746 ; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
1747 ; AVX1-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1748 ; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm1
1749 ; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm0
1750 ; AVX1-NEXT:    vphminposuw %xmm0, %xmm0
1751 ; AVX1-NEXT:    vmovd %xmm0, %eax
1752 ; AVX1-NEXT:    xorb $-128, %al
1753 ; AVX1-NEXT:    # kill: def $al killed $al killed $eax
1754 ; AVX1-NEXT:    vzeroupper
1755 ; AVX1-NEXT:    retq
1757 ; AVX2-LABEL: test_v32i8:
1758 ; AVX2:       # %bb.0:
1759 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
1760 ; AVX2-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
1761 ; AVX2-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1762 ; AVX2-NEXT:    vpsrlw $8, %xmm0, %xmm1
1763 ; AVX2-NEXT:    vpminub %xmm1, %xmm0, %xmm0
1764 ; AVX2-NEXT:    vphminposuw %xmm0, %xmm0
1765 ; AVX2-NEXT:    vmovd %xmm0, %eax
1766 ; AVX2-NEXT:    xorb $-128, %al
1767 ; AVX2-NEXT:    # kill: def $al killed $al killed $eax
1768 ; AVX2-NEXT:    vzeroupper
1769 ; AVX2-NEXT:    retq
1771 ; AVX512-LABEL: test_v32i8:
1772 ; AVX512:       # %bb.0:
1773 ; AVX512-NEXT:    vextracti128 $1, %ymm0, %xmm1
1774 ; AVX512-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
1775 ; AVX512-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1776 ; AVX512-NEXT:    vpsrlw $8, %xmm0, %xmm1
1777 ; AVX512-NEXT:    vpminub %xmm1, %xmm0, %xmm0
1778 ; AVX512-NEXT:    vphminposuw %xmm0, %xmm0
1779 ; AVX512-NEXT:    vmovd %xmm0, %eax
1780 ; AVX512-NEXT:    xorb $-128, %al
1781 ; AVX512-NEXT:    # kill: def $al killed $al killed $eax
1782 ; AVX512-NEXT:    vzeroupper
1783 ; AVX512-NEXT:    retq
1784   %1 = call i8 @llvm.vector.reduce.smin.v32i8(<32 x i8> %a0)
1785   ret i8 %1
1788 define i8 @test_v64i8(<64 x i8> %a0) {
1789 ; SSE2-LABEL: test_v64i8:
1790 ; SSE2:       # %bb.0:
1791 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
1792 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm4
1793 ; SSE2-NEXT:    pand %xmm4, %xmm0
1794 ; SSE2-NEXT:    pandn %xmm2, %xmm4
1795 ; SSE2-NEXT:    por %xmm0, %xmm4
1796 ; SSE2-NEXT:    movdqa %xmm3, %xmm0
1797 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm0
1798 ; SSE2-NEXT:    pand %xmm0, %xmm1
1799 ; SSE2-NEXT:    pandn %xmm3, %xmm0
1800 ; SSE2-NEXT:    por %xmm1, %xmm0
1801 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
1802 ; SSE2-NEXT:    pcmpgtb %xmm4, %xmm1
1803 ; SSE2-NEXT:    pand %xmm1, %xmm4
1804 ; SSE2-NEXT:    pandn %xmm0, %xmm1
1805 ; SSE2-NEXT:    por %xmm4, %xmm1
1806 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]
1807 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
1808 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
1809 ; SSE2-NEXT:    pand %xmm2, %xmm1
1810 ; SSE2-NEXT:    pandn %xmm0, %xmm2
1811 ; SSE2-NEXT:    por %xmm1, %xmm2
1812 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,1,1]
1813 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
1814 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm1
1815 ; SSE2-NEXT:    pand %xmm1, %xmm2
1816 ; SSE2-NEXT:    pandn %xmm0, %xmm1
1817 ; SSE2-NEXT:    por %xmm2, %xmm1
1818 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
1819 ; SSE2-NEXT:    psrld $16, %xmm0
1820 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
1821 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
1822 ; SSE2-NEXT:    pand %xmm2, %xmm1
1823 ; SSE2-NEXT:    pandn %xmm0, %xmm2
1824 ; SSE2-NEXT:    por %xmm1, %xmm2
1825 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
1826 ; SSE2-NEXT:    psrlw $8, %xmm0
1827 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
1828 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm1
1829 ; SSE2-NEXT:    pand %xmm1, %xmm2
1830 ; SSE2-NEXT:    pandn %xmm0, %xmm1
1831 ; SSE2-NEXT:    por %xmm2, %xmm1
1832 ; SSE2-NEXT:    movd %xmm1, %eax
1833 ; SSE2-NEXT:    # kill: def $al killed $al killed $eax
1834 ; SSE2-NEXT:    retq
1836 ; SSE4-LABEL: test_v64i8:
1837 ; SSE4:       # %bb.0:
1838 ; SSE4-NEXT:    pminsb %xmm3, %xmm1
1839 ; SSE4-NEXT:    pminsb %xmm2, %xmm1
1840 ; SSE4-NEXT:    pminsb %xmm0, %xmm1
1841 ; SSE4-NEXT:    pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
1842 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
1843 ; SSE4-NEXT:    psrlw $8, %xmm0
1844 ; SSE4-NEXT:    pminub %xmm1, %xmm0
1845 ; SSE4-NEXT:    phminposuw %xmm0, %xmm0
1846 ; SSE4-NEXT:    movd %xmm0, %eax
1847 ; SSE4-NEXT:    xorb $-128, %al
1848 ; SSE4-NEXT:    # kill: def $al killed $al killed $eax
1849 ; SSE4-NEXT:    retq
1851 ; AVX1-LABEL: test_v64i8:
1852 ; AVX1:       # %bb.0:
1853 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1854 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1855 ; AVX1-NEXT:    vpminsb %xmm2, %xmm3, %xmm2
1856 ; AVX1-NEXT:    vpminsb %xmm2, %xmm1, %xmm1
1857 ; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
1858 ; AVX1-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1859 ; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm1
1860 ; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm0
1861 ; AVX1-NEXT:    vphminposuw %xmm0, %xmm0
1862 ; AVX1-NEXT:    vmovd %xmm0, %eax
1863 ; AVX1-NEXT:    xorb $-128, %al
1864 ; AVX1-NEXT:    # kill: def $al killed $al killed $eax
1865 ; AVX1-NEXT:    vzeroupper
1866 ; AVX1-NEXT:    retq
1868 ; AVX2-LABEL: test_v64i8:
1869 ; AVX2:       # %bb.0:
1870 ; AVX2-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
1871 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
1872 ; AVX2-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
1873 ; AVX2-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1874 ; AVX2-NEXT:    vpsrlw $8, %xmm0, %xmm1
1875 ; AVX2-NEXT:    vpminub %xmm1, %xmm0, %xmm0
1876 ; AVX2-NEXT:    vphminposuw %xmm0, %xmm0
1877 ; AVX2-NEXT:    vmovd %xmm0, %eax
1878 ; AVX2-NEXT:    xorb $-128, %al
1879 ; AVX2-NEXT:    # kill: def $al killed $al killed $eax
1880 ; AVX2-NEXT:    vzeroupper
1881 ; AVX2-NEXT:    retq
1883 ; AVX512-LABEL: test_v64i8:
1884 ; AVX512:       # %bb.0:
1885 ; AVX512-NEXT:    vextracti64x4 $1, %zmm0, %ymm1
1886 ; AVX512-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
1887 ; AVX512-NEXT:    vextracti128 $1, %ymm0, %xmm1
1888 ; AVX512-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
1889 ; AVX512-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1890 ; AVX512-NEXT:    vpsrlw $8, %xmm0, %xmm1
1891 ; AVX512-NEXT:    vpminub %xmm1, %xmm0, %xmm0
1892 ; AVX512-NEXT:    vphminposuw %xmm0, %xmm0
1893 ; AVX512-NEXT:    vmovd %xmm0, %eax
1894 ; AVX512-NEXT:    xorb $-128, %al
1895 ; AVX512-NEXT:    # kill: def $al killed $al killed $eax
1896 ; AVX512-NEXT:    vzeroupper
1897 ; AVX512-NEXT:    retq
1898   %1 = call i8 @llvm.vector.reduce.smin.v64i8(<64 x i8> %a0)
1899   ret i8 %1
1902 define i8 @test_v128i8(<128 x i8> %a0) {
1903 ; SSE2-LABEL: test_v128i8:
1904 ; SSE2:       # %bb.0:
1905 ; SSE2-NEXT:    movdqa %xmm5, %xmm8
1906 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm8
1907 ; SSE2-NEXT:    pand %xmm8, %xmm1
1908 ; SSE2-NEXT:    pandn %xmm5, %xmm8
1909 ; SSE2-NEXT:    por %xmm1, %xmm8
1910 ; SSE2-NEXT:    movdqa %xmm7, %xmm1
1911 ; SSE2-NEXT:    pcmpgtb %xmm3, %xmm1
1912 ; SSE2-NEXT:    pand %xmm1, %xmm3
1913 ; SSE2-NEXT:    pandn %xmm7, %xmm1
1914 ; SSE2-NEXT:    por %xmm3, %xmm1
1915 ; SSE2-NEXT:    movdqa %xmm4, %xmm3
1916 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm3
1917 ; SSE2-NEXT:    pand %xmm3, %xmm0
1918 ; SSE2-NEXT:    pandn %xmm4, %xmm3
1919 ; SSE2-NEXT:    por %xmm0, %xmm3
1920 ; SSE2-NEXT:    movdqa %xmm6, %xmm0
1921 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm0
1922 ; SSE2-NEXT:    pand %xmm0, %xmm2
1923 ; SSE2-NEXT:    pandn %xmm6, %xmm0
1924 ; SSE2-NEXT:    por %xmm2, %xmm0
1925 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
1926 ; SSE2-NEXT:    pcmpgtb %xmm3, %xmm2
1927 ; SSE2-NEXT:    pand %xmm2, %xmm3
1928 ; SSE2-NEXT:    pandn %xmm0, %xmm2
1929 ; SSE2-NEXT:    por %xmm3, %xmm2
1930 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
1931 ; SSE2-NEXT:    pcmpgtb %xmm8, %xmm0
1932 ; SSE2-NEXT:    pand %xmm0, %xmm8
1933 ; SSE2-NEXT:    pandn %xmm1, %xmm0
1934 ; SSE2-NEXT:    por %xmm8, %xmm0
1935 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
1936 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm1
1937 ; SSE2-NEXT:    pand %xmm1, %xmm2
1938 ; SSE2-NEXT:    pandn %xmm0, %xmm1
1939 ; SSE2-NEXT:    por %xmm2, %xmm1
1940 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3]
1941 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
1942 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
1943 ; SSE2-NEXT:    pand %xmm2, %xmm1
1944 ; SSE2-NEXT:    pandn %xmm0, %xmm2
1945 ; SSE2-NEXT:    por %xmm1, %xmm2
1946 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,1,1]
1947 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
1948 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm1
1949 ; SSE2-NEXT:    pand %xmm1, %xmm2
1950 ; SSE2-NEXT:    pandn %xmm0, %xmm1
1951 ; SSE2-NEXT:    por %xmm2, %xmm1
1952 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
1953 ; SSE2-NEXT:    psrld $16, %xmm0
1954 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
1955 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
1956 ; SSE2-NEXT:    pand %xmm2, %xmm1
1957 ; SSE2-NEXT:    pandn %xmm0, %xmm2
1958 ; SSE2-NEXT:    por %xmm1, %xmm2
1959 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
1960 ; SSE2-NEXT:    psrlw $8, %xmm0
1961 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
1962 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm1
1963 ; SSE2-NEXT:    pand %xmm1, %xmm2
1964 ; SSE2-NEXT:    pandn %xmm0, %xmm1
1965 ; SSE2-NEXT:    por %xmm2, %xmm1
1966 ; SSE2-NEXT:    movd %xmm1, %eax
1967 ; SSE2-NEXT:    # kill: def $al killed $al killed $eax
1968 ; SSE2-NEXT:    retq
1970 ; SSE4-LABEL: test_v128i8:
1971 ; SSE4:       # %bb.0:
1972 ; SSE4-NEXT:    pminsb %xmm7, %xmm3
1973 ; SSE4-NEXT:    pminsb %xmm5, %xmm3
1974 ; SSE4-NEXT:    pminsb %xmm1, %xmm3
1975 ; SSE4-NEXT:    pminsb %xmm6, %xmm2
1976 ; SSE4-NEXT:    pminsb %xmm4, %xmm2
1977 ; SSE4-NEXT:    pminsb %xmm3, %xmm2
1978 ; SSE4-NEXT:    pminsb %xmm0, %xmm2
1979 ; SSE4-NEXT:    pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
1980 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
1981 ; SSE4-NEXT:    psrlw $8, %xmm0
1982 ; SSE4-NEXT:    pminub %xmm2, %xmm0
1983 ; SSE4-NEXT:    phminposuw %xmm0, %xmm0
1984 ; SSE4-NEXT:    movd %xmm0, %eax
1985 ; SSE4-NEXT:    xorb $-128, %al
1986 ; SSE4-NEXT:    # kill: def $al killed $al killed $eax
1987 ; SSE4-NEXT:    retq
1989 ; AVX1-LABEL: test_v128i8:
1990 ; AVX1:       # %bb.0:
1991 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
1992 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5
1993 ; AVX1-NEXT:    vpminsb %xmm4, %xmm5, %xmm4
1994 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm5
1995 ; AVX1-NEXT:    vpminsb %xmm4, %xmm5, %xmm4
1996 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
1997 ; AVX1-NEXT:    vpminsb %xmm4, %xmm5, %xmm4
1998 ; AVX1-NEXT:    vpminsb %xmm3, %xmm1, %xmm1
1999 ; AVX1-NEXT:    vpminsb %xmm1, %xmm2, %xmm1
2000 ; AVX1-NEXT:    vpminsb %xmm4, %xmm1, %xmm1
2001 ; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
2002 ; AVX1-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
2003 ; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm1
2004 ; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm0
2005 ; AVX1-NEXT:    vphminposuw %xmm0, %xmm0
2006 ; AVX1-NEXT:    vmovd %xmm0, %eax
2007 ; AVX1-NEXT:    xorb $-128, %al
2008 ; AVX1-NEXT:    # kill: def $al killed $al killed $eax
2009 ; AVX1-NEXT:    vzeroupper
2010 ; AVX1-NEXT:    retq
2012 ; AVX2-LABEL: test_v128i8:
2013 ; AVX2:       # %bb.0:
2014 ; AVX2-NEXT:    vpminsb %ymm3, %ymm1, %ymm1
2015 ; AVX2-NEXT:    vpminsb %ymm1, %ymm2, %ymm1
2016 ; AVX2-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
2017 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
2018 ; AVX2-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
2019 ; AVX2-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
2020 ; AVX2-NEXT:    vpsrlw $8, %xmm0, %xmm1
2021 ; AVX2-NEXT:    vpminub %xmm1, %xmm0, %xmm0
2022 ; AVX2-NEXT:    vphminposuw %xmm0, %xmm0
2023 ; AVX2-NEXT:    vmovd %xmm0, %eax
2024 ; AVX2-NEXT:    xorb $-128, %al
2025 ; AVX2-NEXT:    # kill: def $al killed $al killed $eax
2026 ; AVX2-NEXT:    vzeroupper
2027 ; AVX2-NEXT:    retq
2029 ; AVX512-LABEL: test_v128i8:
2030 ; AVX512:       # %bb.0:
2031 ; AVX512-NEXT:    vpminsb %zmm1, %zmm0, %zmm0
2032 ; AVX512-NEXT:    vextracti64x4 $1, %zmm0, %ymm1
2033 ; AVX512-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
2034 ; AVX512-NEXT:    vextracti128 $1, %ymm0, %xmm1
2035 ; AVX512-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
2036 ; AVX512-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
2037 ; AVX512-NEXT:    vpsrlw $8, %xmm0, %xmm1
2038 ; AVX512-NEXT:    vpminub %xmm1, %xmm0, %xmm0
2039 ; AVX512-NEXT:    vphminposuw %xmm0, %xmm0
2040 ; AVX512-NEXT:    vmovd %xmm0, %eax
2041 ; AVX512-NEXT:    xorb $-128, %al
2042 ; AVX512-NEXT:    # kill: def $al killed $al killed $eax
2043 ; AVX512-NEXT:    vzeroupper
2044 ; AVX512-NEXT:    retq
2045   %1 = call i8 @llvm.vector.reduce.smin.v128i8(<128 x i8> %a0)
2046   ret i8 %1
2049 declare i64 @llvm.vector.reduce.smin.v2i64(<2 x i64>)
2050 declare i64 @llvm.vector.reduce.smin.v4i64(<4 x i64>)
2051 declare i64 @llvm.vector.reduce.smin.v8i64(<8 x i64>)
2052 declare i64 @llvm.vector.reduce.smin.v16i64(<16 x i64>)
2054 declare i32 @llvm.vector.reduce.smin.v2i32(<2 x i32>)
2055 declare i32 @llvm.vector.reduce.smin.v4i32(<4 x i32>)
2056 declare i32 @llvm.vector.reduce.smin.v8i32(<8 x i32>)
2057 declare i32 @llvm.vector.reduce.smin.v16i32(<16 x i32>)
2058 declare i32 @llvm.vector.reduce.smin.v32i32(<32 x i32>)
2060 declare i16 @llvm.vector.reduce.smin.v2i16(<2 x i16>)
2061 declare i16 @llvm.vector.reduce.smin.v4i16(<4 x i16>)
2062 declare i16 @llvm.vector.reduce.smin.v8i16(<8 x i16>)
2063 declare i16 @llvm.vector.reduce.smin.v16i16(<16 x i16>)
2064 declare i16 @llvm.vector.reduce.smin.v32i16(<32 x i16>)
2065 declare i16 @llvm.vector.reduce.smin.v64i16(<64 x i16>)
2067 declare i8 @llvm.vector.reduce.smin.v2i8(<2 x i8>)
2068 declare i8 @llvm.vector.reduce.smin.v4i8(<4 x i8>)
2069 declare i8 @llvm.vector.reduce.smin.v8i8(<8 x i8>)
2070 declare i8 @llvm.vector.reduce.smin.v16i8(<16 x i8>)
2071 declare i8 @llvm.vector.reduce.smin.v32i8(<32 x i8>)
2072 declare i8 @llvm.vector.reduce.smin.v64i8(<64 x i8>)
2073 declare i8 @llvm.vector.reduce.smin.v128i8(<128 x i8>)