[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / CodeGen / WebAssembly / simd-unsupported.ll
blobb539c885c087af599e68980ec8156f440725cae9
1 ; RUN: llc < %s -asm-verbose=false -verify-machineinstrs -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers -mattr=+unimplemented-simd128 | FileCheck %s
3 ; Test that operations that are not supported by SIMD are properly
4 ; unrolled.
6 target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"
7 target triple = "wasm32-unknown-unknown"
9 ; ==============================================================================
10 ; 16 x i8
11 ; ==============================================================================
13 ; CHECK-LABEL: ctlz_v16i8:
14 ; CHECK: i32.clz
15 declare <16 x i8> @llvm.ctlz.v16i8(<16 x i8>, i1)
16 define <16 x i8> @ctlz_v16i8(<16 x i8> %x) {
17   %v = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %x, i1 false)
18   ret <16 x i8> %v
21 ; CHECK-LABEL: ctlz_v16i8_undef:
22 ; CHECK: i32.clz
23 define <16 x i8> @ctlz_v16i8_undef(<16 x i8> %x) {
24   %v = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %x, i1 true)
25   ret <16 x i8> %v
28 ; CHECK-LABEL: cttz_v16i8:
29 ; CHECK: i32.ctz
30 declare <16 x i8> @llvm.cttz.v16i8(<16 x i8>, i1)
31 define <16 x i8> @cttz_v16i8(<16 x i8> %x) {
32   %v = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> %x, i1 false)
33   ret <16 x i8> %v
36 ; CHECK-LABEL: cttz_v16i8_undef:
37 ; CHECK: i32.ctz
38 define <16 x i8> @cttz_v16i8_undef(<16 x i8> %x) {
39   %v = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> %x, i1 true)
40   ret <16 x i8> %v
43 ; CHECK-LABEL: ctpop_v16i8:
44 ; Note: expansion does not use i32.popcnt
45 ; CHECK: v128.and
46 declare <16 x i8> @llvm.ctpop.v16i8(<16 x i8>)
47 define <16 x i8> @ctpop_v16i8(<16 x i8> %x) {
48   %v = call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %x)
49   ret <16 x i8> %v
52 ; CHECK-LABEL: sdiv_v16i8:
53 ; CHECK: i32.div_s
54 define <16 x i8> @sdiv_v16i8(<16 x i8> %x, <16 x i8> %y) {
55   %v = sdiv <16 x i8> %x, %y
56   ret <16 x i8> %v
59 ; CHECK-LABEL: udiv_v16i8:
60 ; CHECK: i32.div_u
61 define <16 x i8> @udiv_v16i8(<16 x i8> %x, <16 x i8> %y) {
62   %v = udiv <16 x i8> %x, %y
63   ret <16 x i8> %v
66 ; CHECK-LABEL: srem_v16i8:
67 ; CHECK: i32.rem_s
68 define <16 x i8> @srem_v16i8(<16 x i8> %x, <16 x i8> %y) {
69   %v = srem <16 x i8> %x, %y
70   ret <16 x i8> %v
73 ; CHECK-LABEL: urem_v16i8:
74 ; CHECK: i32.rem_u
75 define <16 x i8> @urem_v16i8(<16 x i8> %x, <16 x i8> %y) {
76   %v = urem <16 x i8> %x, %y
77   ret <16 x i8> %v
80 ; CHECK-LABEL: rotl_v16i8:
81 ; Note: expansion does not use i32.rotl
82 ; CHECK: i32.shl
83 declare <16 x i8> @llvm.fshl.v16i8(<16 x i8>, <16 x i8>, <16 x i8>)
84 define <16 x i8> @rotl_v16i8(<16 x i8> %x, <16 x i8> %y) {
85   %v = call <16 x i8> @llvm.fshl.v16i8(<16 x i8> %x, <16 x i8> %x, <16 x i8> %y)
86   ret <16 x i8> %v
89 ; CHECK-LABEL: rotr_v16i8:
90 ; Note: expansion does not use i32.rotr
91 ; CHECK: i32.shr_u
92 declare <16 x i8> @llvm.fshr.v16i8(<16 x i8>, <16 x i8>, <16 x i8>)
93 define <16 x i8> @rotr_v16i8(<16 x i8> %x, <16 x i8> %y) {
94   %v = call <16 x i8> @llvm.fshr.v16i8(<16 x i8> %x, <16 x i8> %x, <16 x i8> %y)
95   ret <16 x i8> %v
98 ; ==============================================================================
99 ; 8 x i16
100 ; ==============================================================================
102 ; CHECK-LABEL: ctlz_v8i16:
103 ; CHECK: i32.clz
104 declare <8 x i16> @llvm.ctlz.v8i16(<8 x i16>, i1)
105 define <8 x i16> @ctlz_v8i16(<8 x i16> %x) {
106   %v = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %x, i1 false)
107   ret <8 x i16> %v
110 ; CHECK-LABEL: ctlz_v8i16_undef:
111 ; CHECK: i32.clz
112 define <8 x i16> @ctlz_v8i16_undef(<8 x i16> %x) {
113   %v = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %x, i1 true)
114   ret <8 x i16> %v
117 ; CHECK-LABEL: cttz_v8i16:
118 ; CHECK: i32.ctz
119 declare <8 x i16> @llvm.cttz.v8i16(<8 x i16>, i1)
120 define <8 x i16> @cttz_v8i16(<8 x i16> %x) {
121   %v = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> %x, i1 false)
122   ret <8 x i16> %v
125 ; CHECK-LABEL: cttz_v8i16_undef:
126 ; CHECK: i32.ctz
127 define <8 x i16> @cttz_v8i16_undef(<8 x i16> %x) {
128   %v = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> %x, i1 true)
129   ret <8 x i16> %v
132 ; CHECK-LABEL: ctpop_v8i16:
133 ; Note: expansion does not use i32.popcnt
134 ; CHECK: v128.and
135 declare <8 x i16> @llvm.ctpop.v8i16(<8 x i16>)
136 define <8 x i16> @ctpop_v8i16(<8 x i16> %x) {
137   %v = call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %x)
138   ret <8 x i16> %v
141 ; CHECK-LABEL: sdiv_v8i16:
142 ; CHECK: i32.div_s
143 define <8 x i16> @sdiv_v8i16(<8 x i16> %x, <8 x i16> %y) {
144   %v = sdiv <8 x i16> %x, %y
145   ret <8 x i16> %v
148 ; CHECK-LABEL: udiv_v8i16:
149 ; CHECK: i32.div_u
150 define <8 x i16> @udiv_v8i16(<8 x i16> %x, <8 x i16> %y) {
151   %v = udiv <8 x i16> %x, %y
152   ret <8 x i16> %v
155 ; CHECK-LABEL: srem_v8i16:
156 ; CHECK: i32.rem_s
157 define <8 x i16> @srem_v8i16(<8 x i16> %x, <8 x i16> %y) {
158   %v = srem <8 x i16> %x, %y
159   ret <8 x i16> %v
162 ; CHECK-LABEL: urem_v8i16:
163 ; CHECK: i32.rem_u
164 define <8 x i16> @urem_v8i16(<8 x i16> %x, <8 x i16> %y) {
165   %v = urem <8 x i16> %x, %y
166   ret <8 x i16> %v
169 ; CHECK-LABEL: rotl_v8i16:
170 ; Note: expansion does not use i32.rotl
171 ; CHECK: i32.shl
172 declare <8 x i16> @llvm.fshl.v8i16(<8 x i16>, <8 x i16>, <8 x i16>)
173 define <8 x i16> @rotl_v8i16(<8 x i16> %x, <8 x i16> %y) {
174   %v = call <8 x i16> @llvm.fshl.v8i16(<8 x i16> %x, <8 x i16> %x, <8 x i16> %y)
175   ret <8 x i16> %v
178 ; CHECK-LABEL: rotr_v8i16:
179 ; Note: expansion does not use i32.rotr
180 ; CHECK: i32.shr_u
181 declare <8 x i16> @llvm.fshr.v8i16(<8 x i16>, <8 x i16>, <8 x i16>)
182 define <8 x i16> @rotr_v8i16(<8 x i16> %x, <8 x i16> %y) {
183   %v = call <8 x i16> @llvm.fshr.v8i16(<8 x i16> %x, <8 x i16> %x, <8 x i16> %y)
184   ret <8 x i16> %v
187 ; ==============================================================================
188 ; 4 x i32
189 ; ==============================================================================
191 ; CHECK-LABEL: ctlz_v4i32:
192 ; CHECK: i32.clz
193 declare <4 x i32> @llvm.ctlz.v4i32(<4 x i32>, i1)
194 define <4 x i32> @ctlz_v4i32(<4 x i32> %x) {
195   %v = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %x, i1 false)
196   ret <4 x i32> %v
199 ; CHECK-LABEL: ctlz_v4i32_undef:
200 ; CHECK: i32.clz
201 define <4 x i32> @ctlz_v4i32_undef(<4 x i32> %x) {
202   %v = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %x, i1 true)
203   ret <4 x i32> %v
206 ; CHECK-LABEL: cttz_v4i32:
207 ; CHECK: i32.ctz
208 declare <4 x i32> @llvm.cttz.v4i32(<4 x i32>, i1)
209 define <4 x i32> @cttz_v4i32(<4 x i32> %x) {
210   %v = call <4 x i32> @llvm.cttz.v4i32(<4 x i32> %x, i1 false)
211   ret <4 x i32> %v
214 ; CHECK-LABEL: cttz_v4i32_undef:
215 ; CHECK: i32.ctz
216 define <4 x i32> @cttz_v4i32_undef(<4 x i32> %x) {
217   %v = call <4 x i32> @llvm.cttz.v4i32(<4 x i32> %x, i1 true)
218   ret <4 x i32> %v
221 ; CHECK-LABEL: ctpop_v4i32:
222 ; Note: expansion does not use i32.popcnt
223 ; CHECK: v128.and
224 declare <4 x i32> @llvm.ctpop.v4i32(<4 x i32>)
225 define <4 x i32> @ctpop_v4i32(<4 x i32> %x) {
226   %v = call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %x)
227   ret <4 x i32> %v
230 ; CHECK-LABEL: sdiv_v4i32:
231 ; CHECK: i32.div_s
232 define <4 x i32> @sdiv_v4i32(<4 x i32> %x, <4 x i32> %y) {
233   %v = sdiv <4 x i32> %x, %y
234   ret <4 x i32> %v
237 ; CHECK-LABEL: udiv_v4i32:
238 ; CHECK: i32.div_u
239 define <4 x i32> @udiv_v4i32(<4 x i32> %x, <4 x i32> %y) {
240   %v = udiv <4 x i32> %x, %y
241   ret <4 x i32> %v
244 ; CHECK-LABEL: srem_v4i32:
245 ; CHECK: i32.rem_s
246 define <4 x i32> @srem_v4i32(<4 x i32> %x, <4 x i32> %y) {
247   %v = srem <4 x i32> %x, %y
248   ret <4 x i32> %v
251 ; CHECK-LABEL: urem_v4i32:
252 ; CHECK: i32.rem_u
253 define <4 x i32> @urem_v4i32(<4 x i32> %x, <4 x i32> %y) {
254   %v = urem <4 x i32> %x, %y
255   ret <4 x i32> %v
258 ; CHECK-LABEL: rotl_v4i32:
259 ; Note: expansion does not use i32.rotl
260 ; CHECK: i32.shl
261 declare <4 x i32> @llvm.fshl.v4i32(<4 x i32>, <4 x i32>, <4 x i32>)
262 define <4 x i32> @rotl_v4i32(<4 x i32> %x, <4 x i32> %y) {
263   %v = call <4 x i32> @llvm.fshl.v4i32(<4 x i32> %x, <4 x i32> %x, <4 x i32> %y)
264   ret <4 x i32> %v
267 ; CHECK-LABEL: rotr_v4i32:
268 ; Note: expansion does not use i32.rotr
269 ; CHECK: i32.shr_u
270 declare <4 x i32> @llvm.fshr.v4i32(<4 x i32>, <4 x i32>, <4 x i32>)
271 define <4 x i32> @rotr_v4i32(<4 x i32> %x, <4 x i32> %y) {
272   %v = call <4 x i32> @llvm.fshr.v4i32(<4 x i32> %x, <4 x i32> %x, <4 x i32> %y)
273   ret <4 x i32> %v
276 ; ==============================================================================
277 ; 2 x i64
278 ; ==============================================================================
280 ; CHECK-LABEL: ctlz_v2i64:
281 ; CHECK: i64.clz
282 declare <2 x i64> @llvm.ctlz.v2i64(<2 x i64>, i1)
283 define <2 x i64> @ctlz_v2i64(<2 x i64> %x) {
284   %v = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %x, i1 false)
285   ret <2 x i64> %v
288 ; CHECK-LABEL: ctlz_v2i64_undef:
289 ; CHECK: i64.clz
290 define <2 x i64> @ctlz_v2i64_undef(<2 x i64> %x) {
291   %v = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %x, i1 true)
292   ret <2 x i64> %v
295 ; CHECK-LABEL: cttz_v2i64:
296 ; CHECK: i64.ctz
297 declare <2 x i64> @llvm.cttz.v2i64(<2 x i64>, i1)
298 define <2 x i64> @cttz_v2i64(<2 x i64> %x) {
299   %v = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> %x, i1 false)
300   ret <2 x i64> %v
303 ; CHECK-LABEL: cttz_v2i64_undef:
304 ; CHECK: i64.ctz
305 define <2 x i64> @cttz_v2i64_undef(<2 x i64> %x) {
306   %v = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> %x, i1 true)
307   ret <2 x i64> %v
310 ; CHECK-LABEL: ctpop_v2i64:
311 ; CHECK: i64.popcnt
312 declare <2 x i64> @llvm.ctpop.v2i64(<2 x i64>)
313 define <2 x i64> @ctpop_v2i64(<2 x i64> %x) {
314   %v = call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %x)
315   ret <2 x i64> %v
318 ; CHECK-LABEL: sdiv_v2i64:
319 ; CHECK: i64.div_s
320 define <2 x i64> @sdiv_v2i64(<2 x i64> %x, <2 x i64> %y) {
321   %v = sdiv <2 x i64> %x, %y
322   ret <2 x i64> %v
325 ; CHECK-LABEL: udiv_v2i64:
326 ; CHECK: i64.div_u
327 define <2 x i64> @udiv_v2i64(<2 x i64> %x, <2 x i64> %y) {
328   %v = udiv <2 x i64> %x, %y
329   ret <2 x i64> %v
332 ; CHECK-LABEL: srem_v2i64:
333 ; CHECK: i64.rem_s
334 define <2 x i64> @srem_v2i64(<2 x i64> %x, <2 x i64> %y) {
335   %v = srem <2 x i64> %x, %y
336   ret <2 x i64> %v
339 ; CHECK-LABEL: urem_v2i64:
340 ; CHECK: i64.rem_u
341 define <2 x i64> @urem_v2i64(<2 x i64> %x, <2 x i64> %y) {
342   %v = urem <2 x i64> %x, %y
343   ret <2 x i64> %v
346 ; CHECK-LABEL: rotl_v2i64:
347 ; Note: expansion does not use i64.rotl
348 ; CHECK: i64.shl
349 declare <2 x i64> @llvm.fshl.v2i64(<2 x i64>, <2 x i64>, <2 x i64>)
350 define <2 x i64> @rotl_v2i64(<2 x i64> %x, <2 x i64> %y) {
351   %v = call <2 x i64> @llvm.fshl.v2i64(<2 x i64> %x, <2 x i64> %x, <2 x i64> %y)
352   ret <2 x i64> %v
355 ; CHECK-LABEL: rotr_v2i64:
356 ; Note: expansion does not use i64.rotr
357 ; CHECK: i64.shr_u
358 declare <2 x i64> @llvm.fshr.v2i64(<2 x i64>, <2 x i64>, <2 x i64>)
359 define <2 x i64> @rotr_v2i64(<2 x i64> %x, <2 x i64> %y) {
360   %v = call <2 x i64> @llvm.fshr.v2i64(<2 x i64> %x, <2 x i64> %x, <2 x i64> %y)
361   ret <2 x i64> %v
364 ; ==============================================================================
365 ; 4 x f32
366 ; ==============================================================================
368 ; CHECK-LABEL: ceil_v4f32:
369 ; CHECK: f32.ceil
370 declare <4 x float> @llvm.ceil.v4f32(<4 x float>)
371 define <4 x float> @ceil_v4f32(<4 x float> %x) {
372   %v = call <4 x float> @llvm.ceil.v4f32(<4 x float> %x)
373   ret <4 x float> %v
376 ; CHECK-LABEL: floor_v4f32:
377 ; CHECK: f32.floor
378 declare <4 x float> @llvm.floor.v4f32(<4 x float>)
379 define <4 x float> @floor_v4f32(<4 x float> %x) {
380   %v = call <4 x float> @llvm.floor.v4f32(<4 x float> %x)
381   ret <4 x float> %v
384 ; CHECK-LABEL: trunc_v4f32:
385 ; CHECK: f32.trunc
386 declare <4 x float> @llvm.trunc.v4f32(<4 x float>)
387 define <4 x float> @trunc_v4f32(<4 x float> %x) {
388   %v = call <4 x float> @llvm.trunc.v4f32(<4 x float> %x)
389   ret <4 x float> %v
392 ; CHECK-LABEL: nearbyint_v4f32:
393 ; CHECK: f32.nearest
394 declare <4 x float> @llvm.nearbyint.v4f32(<4 x float>)
395 define <4 x float> @nearbyint_v4f32(<4 x float> %x) {
396   %v = call <4 x float> @llvm.nearbyint.v4f32(<4 x float> %x)
397   ret <4 x float> %v
400 ; CHECK-LABEL: copysign_v4f32:
401 ; CHECK: f32.copysign
402 declare <4 x float> @llvm.copysign.v4f32(<4 x float>, <4 x float>)
403 define <4 x float> @copysign_v4f32(<4 x float> %x, <4 x float> %y) {
404   %v = call <4 x float> @llvm.copysign.v4f32(<4 x float> %x, <4 x float> %y)
405   ret <4 x float> %v
408 ; CHECK-LABEL: sin_v4f32:
409 ; CHECK: f32.call $push[[L:[0-9]+]]=, sinf
410 declare <4 x float> @llvm.sin.v4f32(<4 x float>)
411 define <4 x float> @sin_v4f32(<4 x float> %x) {
412   %v = call <4 x float> @llvm.sin.v4f32(<4 x float> %x)
413   ret <4 x float> %v
416 ; CHECK-LABEL: cos_v4f32:
417 ; CHECK: f32.call $push[[L:[0-9]+]]=, cosf
418 declare <4 x float> @llvm.cos.v4f32(<4 x float>)
419 define <4 x float> @cos_v4f32(<4 x float> %x) {
420   %v = call <4 x float> @llvm.cos.v4f32(<4 x float> %x)
421   ret <4 x float> %v
424 ; CHECK-LABEL: powi_v4f32:
425 ; CHECK: f32.call $push[[L:[0-9]+]]=, __powisf2
426 declare <4 x float> @llvm.powi.v4f32(<4 x float>, i32)
427 define <4 x float> @powi_v4f32(<4 x float> %x, i32 %y) {
428   %v = call <4 x float> @llvm.powi.v4f32(<4 x float> %x, i32 %y)
429   ret <4 x float> %v
432 ; CHECK-LABEL: pow_v4f32:
433 ; CHECK: f32.call $push[[L:[0-9]+]]=, powf
434 declare <4 x float> @llvm.pow.v4f32(<4 x float>, <4 x float>)
435 define <4 x float> @pow_v4f32(<4 x float> %x, <4 x float> %y) {
436   %v = call <4 x float> @llvm.pow.v4f32(<4 x float> %x, <4 x float> %y)
437   ret <4 x float> %v
440 ; CHECK-LABEL: log_v4f32:
441 ; CHECK: f32.call $push[[L:[0-9]+]]=, logf
442 declare <4 x float> @llvm.log.v4f32(<4 x float>)
443 define <4 x float> @log_v4f32(<4 x float> %x) {
444   %v = call <4 x float> @llvm.log.v4f32(<4 x float> %x)
445   ret <4 x float> %v
448 ; CHECK-LABEL: log2_v4f32:
449 ; CHECK: f32.call $push[[L:[0-9]+]]=, log2f
450 declare <4 x float> @llvm.log2.v4f32(<4 x float>)
451 define <4 x float> @log2_v4f32(<4 x float> %x) {
452   %v = call <4 x float> @llvm.log2.v4f32(<4 x float> %x)
453   ret <4 x float> %v
456 ; CHECK-LABEL: log10_v4f32:
457 ; CHECK: f32.call $push[[L:[0-9]+]]=, log10f
458 declare <4 x float> @llvm.log10.v4f32(<4 x float>)
459 define <4 x float> @log10_v4f32(<4 x float> %x) {
460   %v = call <4 x float> @llvm.log10.v4f32(<4 x float> %x)
461   ret <4 x float> %v
464 ; CHECK-LABEL: exp_v4f32:
465 ; CHECK: f32.call $push[[L:[0-9]+]]=, expf
466 declare <4 x float> @llvm.exp.v4f32(<4 x float>)
467 define <4 x float> @exp_v4f32(<4 x float> %x) {
468   %v = call <4 x float> @llvm.exp.v4f32(<4 x float> %x)
469   ret <4 x float> %v
472 ; CHECK-LABEL: exp2_v4f32:
473 ; CHECK: f32.call $push[[L:[0-9]+]]=, exp2f
474 declare <4 x float> @llvm.exp2.v4f32(<4 x float>)
475 define <4 x float> @exp2_v4f32(<4 x float> %x) {
476   %v = call <4 x float> @llvm.exp2.v4f32(<4 x float> %x)
477   ret <4 x float> %v
480 ; CHECK-LABEL: rint_v4f32:
481 ; CHECK: f32.nearest
482 declare <4 x float> @llvm.rint.v4f32(<4 x float>)
483 define <4 x float> @rint_v4f32(<4 x float> %x) {
484   %v = call <4 x float> @llvm.rint.v4f32(<4 x float> %x)
485   ret <4 x float> %v
488 ; CHECK-LABEL: round_v4f32:
489 ; CHECK: f32.call $push[[L:[0-9]+]]=, roundf
490 declare <4 x float> @llvm.round.v4f32(<4 x float>)
491 define <4 x float> @round_v4f32(<4 x float> %x) {
492   %v = call <4 x float> @llvm.round.v4f32(<4 x float> %x)
493   ret <4 x float> %v
496 ; ==============================================================================
497 ; 2 x f64
498 ; ==============================================================================
500 ; CHECK-LABEL: ceil_v2f64:
501 ; CHECK: f64.ceil
502 declare <2 x double> @llvm.ceil.v2f64(<2 x double>)
503 define <2 x double> @ceil_v2f64(<2 x double> %x) {
504   %v = call <2 x double> @llvm.ceil.v2f64(<2 x double> %x)
505   ret <2 x double> %v
508 ; CHECK-LABEL: floor_v2f64:
509 ; CHECK: f64.floor
510 declare <2 x double> @llvm.floor.v2f64(<2 x double>)
511 define <2 x double> @floor_v2f64(<2 x double> %x) {
512   %v = call <2 x double> @llvm.floor.v2f64(<2 x double> %x)
513   ret <2 x double> %v
516 ; CHECK-LABEL: trunc_v2f64:
517 ; CHECK: f64.trunc
518 declare <2 x double> @llvm.trunc.v2f64(<2 x double>)
519 define <2 x double> @trunc_v2f64(<2 x double> %x) {
520   %v = call <2 x double> @llvm.trunc.v2f64(<2 x double> %x)
521   ret <2 x double> %v
524 ; CHECK-LABEL: nearbyint_v2f64:
525 ; CHECK: f64.nearest
526 declare <2 x double> @llvm.nearbyint.v2f64(<2 x double>)
527 define <2 x double> @nearbyint_v2f64(<2 x double> %x) {
528   %v = call <2 x double> @llvm.nearbyint.v2f64(<2 x double> %x)
529   ret <2 x double> %v
532 ; CHECK-LABEL: copysign_v2f64:
533 ; CHECK: f64.copysign
534 declare <2 x double> @llvm.copysign.v2f64(<2 x double>, <2 x double>)
535 define <2 x double> @copysign_v2f64(<2 x double> %x, <2 x double> %y) {
536   %v = call <2 x double> @llvm.copysign.v2f64(<2 x double> %x, <2 x double> %y)
537   ret <2 x double> %v
540 ; CHECK-LABEL: sin_v2f64:
541 ; CHECK: f64.call $push[[L:[0-9]+]]=, sin
542 declare <2 x double> @llvm.sin.v2f64(<2 x double>)
543 define <2 x double> @sin_v2f64(<2 x double> %x) {
544   %v = call <2 x double> @llvm.sin.v2f64(<2 x double> %x)
545   ret <2 x double> %v
548 ; CHECK-LABEL: cos_v2f64:
549 ; CHECK: f64.call $push[[L:[0-9]+]]=, cos
550 declare <2 x double> @llvm.cos.v2f64(<2 x double>)
551 define <2 x double> @cos_v2f64(<2 x double> %x) {
552   %v = call <2 x double> @llvm.cos.v2f64(<2 x double> %x)
553   ret <2 x double> %v
556 ; CHECK-LABEL: powi_v2f64:
557 ; CHECK: f64.call $push[[L:[0-9]+]]=, __powidf2
558 declare <2 x double> @llvm.powi.v2f64(<2 x double>, i32)
559 define <2 x double> @powi_v2f64(<2 x double> %x, i32 %y) {
560   %v = call <2 x double> @llvm.powi.v2f64(<2 x double> %x, i32 %y)
561   ret <2 x double> %v
564 ; CHECK-LABEL: pow_v2f64:
565 ; CHECK: f64.call $push[[L:[0-9]+]]=, pow
566 declare <2 x double> @llvm.pow.v2f64(<2 x double>, <2 x double>)
567 define <2 x double> @pow_v2f64(<2 x double> %x, <2 x double> %y) {
568   %v = call <2 x double> @llvm.pow.v2f64(<2 x double> %x, <2 x double> %y)
569   ret <2 x double> %v
572 ; CHECK-LABEL: log_v2f64:
573 ; CHECK: f64.call $push[[L:[0-9]+]]=, log
574 declare <2 x double> @llvm.log.v2f64(<2 x double>)
575 define <2 x double> @log_v2f64(<2 x double> %x) {
576   %v = call <2 x double> @llvm.log.v2f64(<2 x double> %x)
577   ret <2 x double> %v
580 ; CHECK-LABEL: log2_v2f64:
581 ; CHECK: f64.call $push[[L:[0-9]+]]=, log2
582 declare <2 x double> @llvm.log2.v2f64(<2 x double>)
583 define <2 x double> @log2_v2f64(<2 x double> %x) {
584   %v = call <2 x double> @llvm.log2.v2f64(<2 x double> %x)
585   ret <2 x double> %v
588 ; CHECK-LABEL: log10_v2f64:
589 ; CHECK: f64.call $push[[L:[0-9]+]]=, log10
590 declare <2 x double> @llvm.log10.v2f64(<2 x double>)
591 define <2 x double> @log10_v2f64(<2 x double> %x) {
592   %v = call <2 x double> @llvm.log10.v2f64(<2 x double> %x)
593   ret <2 x double> %v
596 ; CHECK-LABEL: exp_v2f64:
597 ; CHECK: f64.call $push[[L:[0-9]+]]=, exp
598 declare <2 x double> @llvm.exp.v2f64(<2 x double>)
599 define <2 x double> @exp_v2f64(<2 x double> %x) {
600   %v = call <2 x double> @llvm.exp.v2f64(<2 x double> %x)
601   ret <2 x double> %v
604 ; CHECK-LABEL: exp2_v2f64:
605 ; CHECK: f64.call $push[[L:[0-9]+]]=, exp2
606 declare <2 x double> @llvm.exp2.v2f64(<2 x double>)
607 define <2 x double> @exp2_v2f64(<2 x double> %x) {
608   %v = call <2 x double> @llvm.exp2.v2f64(<2 x double> %x)
609   ret <2 x double> %v
612 ; CHECK-LABEL: rint_v2f64:
613 ; CHECK: f64.nearest
614 declare <2 x double> @llvm.rint.v2f64(<2 x double>)
615 define <2 x double> @rint_v2f64(<2 x double> %x) {
616   %v = call <2 x double> @llvm.rint.v2f64(<2 x double> %x)
617   ret <2 x double> %v
620 ; CHECK-LABEL: round_v2f64:
621 ; CHECK: f64.call $push[[L:[0-9]+]]=, round
622 declare <2 x double> @llvm.round.v2f64(<2 x double>)
623 define <2 x double> @round_v2f64(<2 x double> %x) {
624   %v = call <2 x double> @llvm.round.v2f64(<2 x double> %x)
625   ret <2 x double> %v