Enable optimization of sin / cos pair into call to __sincos_stret for iOS7+.
[oota-llvm.git] / test / CodeGen / AArch64 / neon-scalar-reduce-pairwise.ll
1 ; RUN: llc -mtriple=aarch64-none-linux-gnu -mattr=+neon < %s | FileCheck %s
2
3 declare <1 x i64> @llvm.aarch64.neon.vpadd(<2 x i64>)
4
5 define <1 x i64> @test_addp_v1i64(<2 x i64> %a) {
6 ; CHECK: test_addp_v1i64:
7         %val = call <1 x i64> @llvm.aarch64.neon.vpadd(<2 x i64> %a)
8 ; CHECK: addp d0, v0.2d
9         ret <1 x i64> %val
10 }
11
12 declare <1 x float> @llvm.aarch64.neon.vpfadd(<2 x float>)
13
14 define <1 x float> @test_faddp_v1f32(<2 x float> %a) {
15 ; CHECK: test_faddp_v1f32:
16         %val = call <1 x float> @llvm.aarch64.neon.vpfadd(<2 x float> %a)
17 ; CHECK: faddp s0, v0.2s
18         ret <1 x float> %val
19 }
20
21 declare <1 x double> @llvm.aarch64.neon.vpfaddq(<2 x double>)
22
23 define <1 x double> @test_faddp_v1f64(<2 x double> %a) {
24 ; CHECK: test_faddp_v1f64:
25         %val = call <1 x double> @llvm.aarch64.neon.vpfaddq(<2 x double> %a)
26 ; CHECK: faddp d0, v0.2d
27         ret <1 x double> %val
28 }
29
30
31 declare <1 x float> @llvm.aarch64.neon.vpmax(<2 x float>)
32
33 define <1 x float> @test_fmaxp_v1f32(<2 x float> %a) {
34 ; CHECK: test_fmaxp_v1f32:
35         %val = call <1 x float> @llvm.aarch64.neon.vpmax(<2 x float> %a)
36 ; CHECK: fmaxp s0, v0.2s
37         ret <1 x float> %val
38 }
39
40 declare <1 x double> @llvm.aarch64.neon.vpmaxq(<2 x double>)
41
42 define <1 x double> @test_fmaxp_v1f64(<2 x double> %a) {
43 ; CHECK: test_fmaxp_v1f64:
44         %val = call <1 x double> @llvm.aarch64.neon.vpmaxq(<2 x double> %a)
45 ; CHECK: fmaxp d0, v0.2d
46         ret <1 x double> %val
47 }
48
49
50 declare <1 x float> @llvm.aarch64.neon.vpmin(<2 x float>)
51
52 define <1 x float> @test_fminp_v1f32(<2 x float> %a) {
53 ; CHECK: test_fminp_v1f32:
54         %val = call <1 x float> @llvm.aarch64.neon.vpmin(<2 x float> %a)
55 ; CHECK: fminp s0, v0.2s
56         ret <1 x float> %val
57 }
58
59 declare <1 x double> @llvm.aarch64.neon.vpminq(<2 x double>)
60
61 define <1 x double> @test_fminp_v1f64(<2 x double> %a) {
62 ; CHECK: test_fminp_v1f64:
63         %val = call <1 x double> @llvm.aarch64.neon.vpminq(<2 x double> %a)
64 ; CHECK: fminp d0, v0.2d
65         ret <1 x double> %val
66 }
67
68 declare <1 x float> @llvm.aarch64.neon.vpfmaxnm(<2 x float>)
69
70 define <1 x float> @test_fmaxnmp_v1f32(<2 x float> %a) {
71 ; CHECK: test_fmaxnmp_v1f32:
72         %val = call <1 x float> @llvm.aarch64.neon.vpfmaxnm(<2 x float> %a)
73 ; CHECK: fmaxnmp s0, v0.2s
74         ret <1 x float> %val
75 }
76
77 declare <1 x double> @llvm.aarch64.neon.vpfmaxnmq(<2 x double>)
78
79 define <1 x double> @test_fmaxnmp_v1f64(<2 x double> %a) {
80 ; CHECK: test_fmaxnmp_v1f64:
81         %val = call <1 x double> @llvm.aarch64.neon.vpfmaxnmq(<2 x double> %a)
82 ; CHECK: fmaxnmp d0, v0.2d
83         ret <1 x double> %val
84 }
85
86 declare <1 x float> @llvm.aarch64.neon.vpfminnm(<2 x float>)
87
88 define <1 x float> @test_fminnmp_v1f32(<2 x float> %a) {
89 ; CHECK: test_fminnmp_v1f32:
90         %val = call <1 x float> @llvm.aarch64.neon.vpfminnm(<2 x float> %a)
91 ; CHECK: fminnmp s0, v0.2s
92         ret <1 x float> %val
93 }
94
95 declare <1 x double> @llvm.aarch64.neon.vpfminnmq(<2 x double>)
96
97 define <1 x double> @test_fminnmp_v1f64(<2 x double> %a) {
98 ; CHECK: test_fminnmp_v1f64:
99         %val = call <1 x double> @llvm.aarch64.neon.vpfminnmq(<2 x double> %a)
100 ; CHECK: fminnmp d0, v0.2d
101         ret <1 x double> %val
102 }
103