AArch64/ARM64: enable more AArch64 tests on ARM64.
[oota-llvm.git] / test / CodeGen / AArch64 / neon-across.ll
1 ; RUN: llc < %s -verify-machineinstrs -mtriple=aarch64-none-linux-gnu -mattr=+neon | FileCheck %s
2
3 declare float @llvm.aarch64.neon.vminnmv(<4 x float>)
4
5 declare float @llvm.aarch64.neon.vmaxnmv(<4 x float>)
6
7 declare float @llvm.aarch64.neon.vminv(<4 x float>)
8
9 declare float @llvm.aarch64.neon.vmaxv(<4 x float>)
10
11 declare <1 x i32> @llvm.aarch64.neon.vaddv.v1i32.v4i32(<4 x i32>)
12
13 declare <1 x i16> @llvm.aarch64.neon.vaddv.v1i16.v8i16(<8 x i16>)
14
15 declare <1 x i8> @llvm.aarch64.neon.vaddv.v1i8.v16i8(<16 x i8>)
16
17 declare <1 x i16> @llvm.aarch64.neon.vaddv.v1i16.v4i16(<4 x i16>)
18
19 declare <1 x i8> @llvm.aarch64.neon.vaddv.v1i8.v8i8(<8 x i8>)
20
21 declare <1 x i32> @llvm.aarch64.neon.uminv.v1i32.v4i32(<4 x i32>)
22
23 declare <1 x i16> @llvm.aarch64.neon.uminv.v1i16.v8i16(<8 x i16>)
24
25 declare <1 x i8> @llvm.aarch64.neon.uminv.v1i8.v16i8(<16 x i8>)
26
27 declare <1 x i32> @llvm.aarch64.neon.sminv.v1i32.v4i32(<4 x i32>)
28
29 declare <1 x i16> @llvm.aarch64.neon.sminv.v1i16.v8i16(<8 x i16>)
30
31 declare <1 x i8> @llvm.aarch64.neon.sminv.v1i8.v16i8(<16 x i8>)
32
33 declare <1 x i16> @llvm.aarch64.neon.uminv.v1i16.v4i16(<4 x i16>)
34
35 declare <1 x i8> @llvm.aarch64.neon.uminv.v1i8.v8i8(<8 x i8>)
36
37 declare <1 x i16> @llvm.aarch64.neon.sminv.v1i16.v4i16(<4 x i16>)
38
39 declare <1 x i8> @llvm.aarch64.neon.sminv.v1i8.v8i8(<8 x i8>)
40
41 declare <1 x i32> @llvm.aarch64.neon.umaxv.v1i32.v4i32(<4 x i32>)
42
43 declare <1 x i16> @llvm.aarch64.neon.umaxv.v1i16.v8i16(<8 x i16>)
44
45 declare <1 x i8> @llvm.aarch64.neon.umaxv.v1i8.v16i8(<16 x i8>)
46
47 declare <1 x i32> @llvm.aarch64.neon.smaxv.v1i32.v4i32(<4 x i32>)
48
49 declare <1 x i16> @llvm.aarch64.neon.smaxv.v1i16.v8i16(<8 x i16>)
50
51 declare <1 x i8> @llvm.aarch64.neon.smaxv.v1i8.v16i8(<16 x i8>)
52
53 declare <1 x i16> @llvm.aarch64.neon.umaxv.v1i16.v4i16(<4 x i16>)
54
55 declare <1 x i8> @llvm.aarch64.neon.umaxv.v1i8.v8i8(<8 x i8>)
56
57 declare <1 x i16> @llvm.aarch64.neon.smaxv.v1i16.v4i16(<4 x i16>)
58
59 declare <1 x i8> @llvm.aarch64.neon.smaxv.v1i8.v8i8(<8 x i8>)
60
61 declare <1 x i64> @llvm.aarch64.neon.uaddlv.v1i64.v4i32(<4 x i32>)
62
63 declare <1 x i32> @llvm.aarch64.neon.uaddlv.v1i32.v8i16(<8 x i16>)
64
65 declare <1 x i16> @llvm.aarch64.neon.uaddlv.v1i16.v16i8(<16 x i8>)
66
67 declare <1 x i64> @llvm.aarch64.neon.saddlv.v1i64.v4i32(<4 x i32>)
68
69 declare <1 x i32> @llvm.aarch64.neon.saddlv.v1i32.v8i16(<8 x i16>)
70
71 declare <1 x i16> @llvm.aarch64.neon.saddlv.v1i16.v16i8(<16 x i8>)
72
73 declare <1 x i32> @llvm.aarch64.neon.uaddlv.v1i32.v4i16(<4 x i16>)
74
75 declare <1 x i16> @llvm.aarch64.neon.uaddlv.v1i16.v8i8(<8 x i8>)
76
77 declare <1 x i32> @llvm.aarch64.neon.saddlv.v1i32.v4i16(<4 x i16>)
78
79 declare <1 x i16> @llvm.aarch64.neon.saddlv.v1i16.v8i8(<8 x i8>)
80
81 define i16 @test_vaddlv_s8(<8 x i8> %a) {
82 ; CHECK: test_vaddlv_s8:
83 ; CHECK: saddlv h{{[0-9]+}}, {{v[0-9]+}}.8b
84 entry:
85   %saddlv.i = tail call <1 x i16> @llvm.aarch64.neon.saddlv.v1i16.v8i8(<8 x i8> %a)
86   %0 = extractelement <1 x i16> %saddlv.i, i32 0
87   ret i16 %0
88 }
89
90 define i32 @test_vaddlv_s16(<4 x i16> %a) {
91 ; CHECK: test_vaddlv_s16:
92 ; CHECK: saddlv s{{[0-9]+}}, {{v[0-9]+}}.4h
93 entry:
94   %saddlv.i = tail call <1 x i32> @llvm.aarch64.neon.saddlv.v1i32.v4i16(<4 x i16> %a)
95   %0 = extractelement <1 x i32> %saddlv.i, i32 0
96   ret i32 %0
97 }
98
99 define i16 @test_vaddlv_u8(<8 x i8> %a) {
100 ; CHECK: test_vaddlv_u8:
101 ; CHECK: uaddlv h{{[0-9]+}}, {{v[0-9]+}}.8b
102 entry:
103   %uaddlv.i = tail call <1 x i16> @llvm.aarch64.neon.uaddlv.v1i16.v8i8(<8 x i8> %a)
104   %0 = extractelement <1 x i16> %uaddlv.i, i32 0
105   ret i16 %0
106 }
107
108 define i32 @test_vaddlv_u16(<4 x i16> %a) {
109 ; CHECK: test_vaddlv_u16:
110 ; CHECK: uaddlv s{{[0-9]+}}, {{v[0-9]+}}.4h
111 entry:
112   %uaddlv.i = tail call <1 x i32> @llvm.aarch64.neon.uaddlv.v1i32.v4i16(<4 x i16> %a)
113   %0 = extractelement <1 x i32> %uaddlv.i, i32 0
114   ret i32 %0
115 }
116
117 define i16 @test_vaddlvq_s8(<16 x i8> %a) {
118 ; CHECK: test_vaddlvq_s8:
119 ; CHECK: saddlv h{{[0-9]+}}, {{v[0-9]+}}.16b
120 entry:
121   %saddlv.i = tail call <1 x i16> @llvm.aarch64.neon.saddlv.v1i16.v16i8(<16 x i8> %a)
122   %0 = extractelement <1 x i16> %saddlv.i, i32 0
123   ret i16 %0
124 }
125
126 define i32 @test_vaddlvq_s16(<8 x i16> %a) {
127 ; CHECK: test_vaddlvq_s16:
128 ; CHECK: saddlv s{{[0-9]+}}, {{v[0-9]+}}.8h
129 entry:
130   %saddlv.i = tail call <1 x i32> @llvm.aarch64.neon.saddlv.v1i32.v8i16(<8 x i16> %a)
131   %0 = extractelement <1 x i32> %saddlv.i, i32 0
132   ret i32 %0
133 }
134
135 define i64 @test_vaddlvq_s32(<4 x i32> %a) {
136 ; CHECK: test_vaddlvq_s32:
137 ; CHECK: saddlv d{{[0-9]+}}, {{v[0-9]+}}.4s
138 entry:
139   %saddlv.i = tail call <1 x i64> @llvm.aarch64.neon.saddlv.v1i64.v4i32(<4 x i32> %a)
140   %0 = extractelement <1 x i64> %saddlv.i, i32 0
141   ret i64 %0
142 }
143
144 define i16 @test_vaddlvq_u8(<16 x i8> %a) {
145 ; CHECK: test_vaddlvq_u8:
146 ; CHECK: uaddlv h{{[0-9]+}}, {{v[0-9]+}}.16b
147 entry:
148   %uaddlv.i = tail call <1 x i16> @llvm.aarch64.neon.uaddlv.v1i16.v16i8(<16 x i8> %a)
149   %0 = extractelement <1 x i16> %uaddlv.i, i32 0
150   ret i16 %0
151 }
152
153 define i32 @test_vaddlvq_u16(<8 x i16> %a) {
154 ; CHECK: test_vaddlvq_u16:
155 ; CHECK: uaddlv s{{[0-9]+}}, {{v[0-9]+}}.8h
156 entry:
157   %uaddlv.i = tail call <1 x i32> @llvm.aarch64.neon.uaddlv.v1i32.v8i16(<8 x i16> %a)
158   %0 = extractelement <1 x i32> %uaddlv.i, i32 0
159   ret i32 %0
160 }
161
162 define i64 @test_vaddlvq_u32(<4 x i32> %a) {
163 ; CHECK: test_vaddlvq_u32:
164 ; CHECK: uaddlv d{{[0-9]+}}, {{v[0-9]+}}.4s
165 entry:
166   %uaddlv.i = tail call <1 x i64> @llvm.aarch64.neon.uaddlv.v1i64.v4i32(<4 x i32> %a)
167   %0 = extractelement <1 x i64> %uaddlv.i, i32 0
168   ret i64 %0
169 }
170
171 define i8 @test_vmaxv_s8(<8 x i8> %a) {
172 ; CHECK: test_vmaxv_s8:
173 ; CHECK: smaxv b{{[0-9]+}}, {{v[0-9]+}}.8b
174 entry:
175   %smaxv.i = tail call <1 x i8> @llvm.aarch64.neon.smaxv.v1i8.v8i8(<8 x i8> %a)
176   %0 = extractelement <1 x i8> %smaxv.i, i32 0
177   ret i8 %0
178 }
179
180 define i16 @test_vmaxv_s16(<4 x i16> %a) {
181 ; CHECK: test_vmaxv_s16:
182 ; CHECK: smaxv h{{[0-9]+}}, {{v[0-9]+}}.4h
183 entry:
184   %smaxv.i = tail call <1 x i16> @llvm.aarch64.neon.smaxv.v1i16.v4i16(<4 x i16> %a)
185   %0 = extractelement <1 x i16> %smaxv.i, i32 0
186   ret i16 %0
187 }
188
189 define i8 @test_vmaxv_u8(<8 x i8> %a) {
190 ; CHECK: test_vmaxv_u8:
191 ; CHECK: umaxv b{{[0-9]+}}, {{v[0-9]+}}.8b
192 entry:
193   %umaxv.i = tail call <1 x i8> @llvm.aarch64.neon.umaxv.v1i8.v8i8(<8 x i8> %a)
194   %0 = extractelement <1 x i8> %umaxv.i, i32 0
195   ret i8 %0
196 }
197
198 define i16 @test_vmaxv_u16(<4 x i16> %a) {
199 ; CHECK: test_vmaxv_u16:
200 ; CHECK: umaxv h{{[0-9]+}}, {{v[0-9]+}}.4h
201 entry:
202   %umaxv.i = tail call <1 x i16> @llvm.aarch64.neon.umaxv.v1i16.v4i16(<4 x i16> %a)
203   %0 = extractelement <1 x i16> %umaxv.i, i32 0
204   ret i16 %0
205 }
206
207 define i8 @test_vmaxvq_s8(<16 x i8> %a) {
208 ; CHECK: test_vmaxvq_s8:
209 ; CHECK: smaxv b{{[0-9]+}}, {{v[0-9]+}}.16b
210 entry:
211   %smaxv.i = tail call <1 x i8> @llvm.aarch64.neon.smaxv.v1i8.v16i8(<16 x i8> %a)
212   %0 = extractelement <1 x i8> %smaxv.i, i32 0
213   ret i8 %0
214 }
215
216 define i16 @test_vmaxvq_s16(<8 x i16> %a) {
217 ; CHECK: test_vmaxvq_s16:
218 ; CHECK: smaxv h{{[0-9]+}}, {{v[0-9]+}}.8h
219 entry:
220   %smaxv.i = tail call <1 x i16> @llvm.aarch64.neon.smaxv.v1i16.v8i16(<8 x i16> %a)
221   %0 = extractelement <1 x i16> %smaxv.i, i32 0
222   ret i16 %0
223 }
224
225 define i32 @test_vmaxvq_s32(<4 x i32> %a) {
226 ; CHECK: test_vmaxvq_s32:
227 ; CHECK: smaxv s{{[0-9]+}}, {{v[0-9]+}}.4s
228 entry:
229   %smaxv.i = tail call <1 x i32> @llvm.aarch64.neon.smaxv.v1i32.v4i32(<4 x i32> %a)
230   %0 = extractelement <1 x i32> %smaxv.i, i32 0
231   ret i32 %0
232 }
233
234 define i8 @test_vmaxvq_u8(<16 x i8> %a) {
235 ; CHECK: test_vmaxvq_u8:
236 ; CHECK: umaxv b{{[0-9]+}}, {{v[0-9]+}}.16b
237 entry:
238   %umaxv.i = tail call <1 x i8> @llvm.aarch64.neon.umaxv.v1i8.v16i8(<16 x i8> %a)
239   %0 = extractelement <1 x i8> %umaxv.i, i32 0
240   ret i8 %0
241 }
242
243 define i16 @test_vmaxvq_u16(<8 x i16> %a) {
244 ; CHECK: test_vmaxvq_u16:
245 ; CHECK: umaxv h{{[0-9]+}}, {{v[0-9]+}}.8h
246 entry:
247   %umaxv.i = tail call <1 x i16> @llvm.aarch64.neon.umaxv.v1i16.v8i16(<8 x i16> %a)
248   %0 = extractelement <1 x i16> %umaxv.i, i32 0
249   ret i16 %0
250 }
251
252 define i32 @test_vmaxvq_u32(<4 x i32> %a) {
253 ; CHECK: test_vmaxvq_u32:
254 ; CHECK: umaxv s{{[0-9]+}}, {{v[0-9]+}}.4s
255 entry:
256   %umaxv.i = tail call <1 x i32> @llvm.aarch64.neon.umaxv.v1i32.v4i32(<4 x i32> %a)
257   %0 = extractelement <1 x i32> %umaxv.i, i32 0
258   ret i32 %0
259 }
260
261 define i8 @test_vminv_s8(<8 x i8> %a) {
262 ; CHECK: test_vminv_s8:
263 ; CHECK: sminv b{{[0-9]+}}, {{v[0-9]+}}.8b
264 entry:
265   %sminv.i = tail call <1 x i8> @llvm.aarch64.neon.sminv.v1i8.v8i8(<8 x i8> %a)
266   %0 = extractelement <1 x i8> %sminv.i, i32 0
267   ret i8 %0
268 }
269
270 define i16 @test_vminv_s16(<4 x i16> %a) {
271 ; CHECK: test_vminv_s16:
272 ; CHECK: sminv h{{[0-9]+}}, {{v[0-9]+}}.4h
273 entry:
274   %sminv.i = tail call <1 x i16> @llvm.aarch64.neon.sminv.v1i16.v4i16(<4 x i16> %a)
275   %0 = extractelement <1 x i16> %sminv.i, i32 0
276   ret i16 %0
277 }
278
279 define i8 @test_vminv_u8(<8 x i8> %a) {
280 ; CHECK: test_vminv_u8:
281 ; CHECK: uminv b{{[0-9]+}}, {{v[0-9]+}}.8b
282 entry:
283   %uminv.i = tail call <1 x i8> @llvm.aarch64.neon.uminv.v1i8.v8i8(<8 x i8> %a)
284   %0 = extractelement <1 x i8> %uminv.i, i32 0
285   ret i8 %0
286 }
287
288 define i16 @test_vminv_u16(<4 x i16> %a) {
289 ; CHECK: test_vminv_u16:
290 ; CHECK: uminv h{{[0-9]+}}, {{v[0-9]+}}.4h
291 entry:
292   %uminv.i = tail call <1 x i16> @llvm.aarch64.neon.uminv.v1i16.v4i16(<4 x i16> %a)
293   %0 = extractelement <1 x i16> %uminv.i, i32 0
294   ret i16 %0
295 }
296
297 define i8 @test_vminvq_s8(<16 x i8> %a) {
298 ; CHECK: test_vminvq_s8:
299 ; CHECK: sminv b{{[0-9]+}}, {{v[0-9]+}}.16b
300 entry:
301   %sminv.i = tail call <1 x i8> @llvm.aarch64.neon.sminv.v1i8.v16i8(<16 x i8> %a)
302   %0 = extractelement <1 x i8> %sminv.i, i32 0
303   ret i8 %0
304 }
305
306 define i16 @test_vminvq_s16(<8 x i16> %a) {
307 ; CHECK: test_vminvq_s16:
308 ; CHECK: sminv h{{[0-9]+}}, {{v[0-9]+}}.8h
309 entry:
310   %sminv.i = tail call <1 x i16> @llvm.aarch64.neon.sminv.v1i16.v8i16(<8 x i16> %a)
311   %0 = extractelement <1 x i16> %sminv.i, i32 0
312   ret i16 %0
313 }
314
315 define i32 @test_vminvq_s32(<4 x i32> %a) {
316 ; CHECK: test_vminvq_s32:
317 ; CHECK: sminv s{{[0-9]+}}, {{v[0-9]+}}.4s
318 entry:
319   %sminv.i = tail call <1 x i32> @llvm.aarch64.neon.sminv.v1i32.v4i32(<4 x i32> %a)
320   %0 = extractelement <1 x i32> %sminv.i, i32 0
321   ret i32 %0
322 }
323
324 define i8 @test_vminvq_u8(<16 x i8> %a) {
325 ; CHECK: test_vminvq_u8:
326 ; CHECK: uminv b{{[0-9]+}}, {{v[0-9]+}}.16b
327 entry:
328   %uminv.i = tail call <1 x i8> @llvm.aarch64.neon.uminv.v1i8.v16i8(<16 x i8> %a)
329   %0 = extractelement <1 x i8> %uminv.i, i32 0
330   ret i8 %0
331 }
332
333 define i16 @test_vminvq_u16(<8 x i16> %a) {
334 ; CHECK: test_vminvq_u16:
335 ; CHECK: uminv h{{[0-9]+}}, {{v[0-9]+}}.8h
336 entry:
337   %uminv.i = tail call <1 x i16> @llvm.aarch64.neon.uminv.v1i16.v8i16(<8 x i16> %a)
338   %0 = extractelement <1 x i16> %uminv.i, i32 0
339   ret i16 %0
340 }
341
342 define i32 @test_vminvq_u32(<4 x i32> %a) {
343 ; CHECK: test_vminvq_u32:
344 ; CHECK: uminv s{{[0-9]+}}, {{v[0-9]+}}.4s
345 entry:
346   %uminv.i = tail call <1 x i32> @llvm.aarch64.neon.uminv.v1i32.v4i32(<4 x i32> %a)
347   %0 = extractelement <1 x i32> %uminv.i, i32 0
348   ret i32 %0
349 }
350
351 define i8 @test_vaddv_s8(<8 x i8> %a) {
352 ; CHECK: test_vaddv_s8:
353 ; CHECK: addv b{{[0-9]+}}, {{v[0-9]+}}.8b
354 entry:
355   %vaddv.i = tail call <1 x i8> @llvm.aarch64.neon.vaddv.v1i8.v8i8(<8 x i8> %a)
356   %0 = extractelement <1 x i8> %vaddv.i, i32 0
357   ret i8 %0
358 }
359
360 define i16 @test_vaddv_s16(<4 x i16> %a) {
361 ; CHECK: test_vaddv_s16:
362 ; CHECK: addv h{{[0-9]+}}, {{v[0-9]+}}.4h
363 entry:
364   %vaddv.i = tail call <1 x i16> @llvm.aarch64.neon.vaddv.v1i16.v4i16(<4 x i16> %a)
365   %0 = extractelement <1 x i16> %vaddv.i, i32 0
366   ret i16 %0
367 }
368
369 define i8 @test_vaddv_u8(<8 x i8> %a) {
370 ; CHECK: test_vaddv_u8:
371 ; CHECK: addv b{{[0-9]+}}, {{v[0-9]+}}.8b
372 entry:
373   %vaddv.i = tail call <1 x i8> @llvm.aarch64.neon.vaddv.v1i8.v8i8(<8 x i8> %a)
374   %0 = extractelement <1 x i8> %vaddv.i, i32 0
375   ret i8 %0
376 }
377
378 define i16 @test_vaddv_u16(<4 x i16> %a) {
379 ; CHECK: test_vaddv_u16:
380 ; CHECK: addv h{{[0-9]+}}, {{v[0-9]+}}.4h
381 entry:
382   %vaddv.i = tail call <1 x i16> @llvm.aarch64.neon.vaddv.v1i16.v4i16(<4 x i16> %a)
383   %0 = extractelement <1 x i16> %vaddv.i, i32 0
384   ret i16 %0
385 }
386
387 define i8 @test_vaddvq_s8(<16 x i8> %a) {
388 ; CHECK: test_vaddvq_s8:
389 ; CHECK: addv b{{[0-9]+}}, {{v[0-9]+}}.16b
390 entry:
391   %vaddv.i = tail call <1 x i8> @llvm.aarch64.neon.vaddv.v1i8.v16i8(<16 x i8> %a)
392   %0 = extractelement <1 x i8> %vaddv.i, i32 0
393   ret i8 %0
394 }
395
396 define i16 @test_vaddvq_s16(<8 x i16> %a) {
397 ; CHECK: test_vaddvq_s16:
398 ; CHECK: addv h{{[0-9]+}}, {{v[0-9]+}}.8h
399 entry:
400   %vaddv.i = tail call <1 x i16> @llvm.aarch64.neon.vaddv.v1i16.v8i16(<8 x i16> %a)
401   %0 = extractelement <1 x i16> %vaddv.i, i32 0
402   ret i16 %0
403 }
404
405 define i32 @test_vaddvq_s32(<4 x i32> %a) {
406 ; CHECK: test_vaddvq_s32:
407 ; CHECK: addv s{{[0-9]+}}, {{v[0-9]+}}.4s
408 entry:
409   %vaddv.i = tail call <1 x i32> @llvm.aarch64.neon.vaddv.v1i32.v4i32(<4 x i32> %a)
410   %0 = extractelement <1 x i32> %vaddv.i, i32 0
411   ret i32 %0
412 }
413
414 define i8 @test_vaddvq_u8(<16 x i8> %a) {
415 ; CHECK: test_vaddvq_u8:
416 ; CHECK: addv b{{[0-9]+}}, {{v[0-9]+}}.16b
417 entry:
418   %vaddv.i = tail call <1 x i8> @llvm.aarch64.neon.vaddv.v1i8.v16i8(<16 x i8> %a)
419   %0 = extractelement <1 x i8> %vaddv.i, i32 0
420   ret i8 %0
421 }
422
423 define i16 @test_vaddvq_u16(<8 x i16> %a) {
424 ; CHECK: test_vaddvq_u16:
425 ; CHECK: addv h{{[0-9]+}}, {{v[0-9]+}}.8h
426 entry:
427   %vaddv.i = tail call <1 x i16> @llvm.aarch64.neon.vaddv.v1i16.v8i16(<8 x i16> %a)
428   %0 = extractelement <1 x i16> %vaddv.i, i32 0
429   ret i16 %0
430 }
431
432 define i32 @test_vaddvq_u32(<4 x i32> %a) {
433 ; CHECK: test_vaddvq_u32:
434 ; CHECK: addv s{{[0-9]+}}, {{v[0-9]+}}.4s
435 entry:
436   %vaddv.i = tail call <1 x i32> @llvm.aarch64.neon.vaddv.v1i32.v4i32(<4 x i32> %a)
437   %0 = extractelement <1 x i32> %vaddv.i, i32 0
438   ret i32 %0
439 }
440
441 define float @test_vmaxvq_f32(<4 x float> %a) {
442 ; CHECK: test_vmaxvq_f32:
443 ; CHECK: fmaxv s{{[0-9]+}}, {{v[0-9]+}}.4s
444 entry:
445   %0 = call float @llvm.aarch64.neon.vmaxv(<4 x float> %a)
446   ret float %0
447 }
448
449 define float @test_vminvq_f32(<4 x float> %a) {
450 ; CHECK: test_vminvq_f32:
451 ; CHECK: fminv s{{[0-9]+}}, {{v[0-9]+}}.4s
452 entry:
453   %0 = call float @llvm.aarch64.neon.vminv(<4 x float> %a)
454   ret float %0
455 }
456
457 define float @test_vmaxnmvq_f32(<4 x float> %a) {
458 ; CHECK: test_vmaxnmvq_f32:
459 ; CHECK: fmaxnmv s{{[0-9]+}}, {{v[0-9]+}}.4s
460 entry:
461   %0 = call float @llvm.aarch64.neon.vmaxnmv(<4 x float> %a)
462   ret float %0
463 }
464
465 define float @test_vminnmvq_f32(<4 x float> %a) {
466 ; CHECK: test_vminnmvq_f32:
467 ; CHECK: fminnmv s{{[0-9]+}}, {{v[0-9]+}}.4s
468 entry:
469   %0 = call float @llvm.aarch64.neon.vminnmv(<4 x float> %a)
470   ret float %0
471 }
472