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