Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / AArch64 / replace-with-veclib-armpl.ll
blobf7e95008b7123722c7521ba3806f238bc99d858f
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals --version 2
2 ; RUN: opt -S -vector-library=ArmPL -replace-with-veclib < %s | FileCheck %s
4 target triple = "aarch64-unknown-linux-gnu"
7 ; The replace-with-veclib pass does not work with scalable types, thus
8 ; the mappings aren't utilised. Tests will need to be regenerated when the
9 ; pass is improved.
12 declare <2 x double> @llvm.cos.v2f64(<2 x double>)
13 declare <4 x float> @llvm.cos.v4f32(<4 x float>)
14 declare <vscale x 2 x double> @llvm.cos.nxv2f64(<vscale x 2 x double>)
15 declare <vscale x 4 x float> @llvm.cos.nxv4f32(<vscale x 4 x float>)
18 ; CHECK: @llvm.compiler.used = appending global [60 x ptr] [ptr @armpl_vcosq_f64, ptr @armpl_vcosq_f32, ptr @armpl_svcos_f64_x, ptr @armpl_svcos_f32_x, ptr @armpl_vexpq_f64, ptr @armpl_vexpq_f32, ptr @armpl_svexp_f64_x, ptr @armpl_svexp_f32_x, ptr @armpl_vexp10q_f64, ptr @armpl_vexp10q_f32, ptr @armpl_svexp10_f64_x, ptr @armpl_svexp10_f32_x, ptr @armpl_vexp2q_f64, ptr @armpl_vexp2q_f32, ptr @armpl_svexp2_f64_x, ptr @armpl_svexp2_f32_x, ptr @armpl_vlogq_f64, ptr @armpl_vlogq_f32, ptr @armpl_svlog_f64_x, ptr @armpl_svlog_f32_x, ptr @armpl_vlog10q_f64, ptr @armpl_vlog10q_f32, ptr @armpl_svlog10_f64_x, ptr @armpl_svlog10_f32_x, ptr @armpl_vlog2q_f64, ptr @armpl_vlog2q_f32, ptr @armpl_svlog2_f64_x, ptr @armpl_svlog2_f32_x, ptr @armpl_vsinq_f64, ptr @armpl_vsinq_f32, ptr @armpl_svsin_f64_x, ptr @armpl_svsin_f32_x, ptr @armpl_vtanq_f64, ptr @armpl_vtanq_f32, ptr @armpl_svtan_f64_x, ptr @armpl_svtan_f32_x, ptr @armpl_vacosq_f64, ptr @armpl_vacosq_f32, ptr @armpl_svacos_f64_x, ptr @armpl_svacos_f32_x, ptr @armpl_vasinq_f64, ptr @armpl_vasinq_f32, ptr @armpl_svasin_f64_x, ptr @armpl_svasin_f32_x, ptr @armpl_vatanq_f64, ptr @armpl_vatanq_f32, ptr @armpl_svatan_f64_x, ptr @armpl_svatan_f32_x, ptr @armpl_vcoshq_f64, ptr @armpl_vcoshq_f32, ptr @armpl_svcosh_f64_x, ptr @armpl_svcosh_f32_x, ptr @armpl_vsinhq_f64, ptr @armpl_vsinhq_f32, ptr @armpl_svsinh_f64_x, ptr @armpl_svsinh_f32_x, ptr @armpl_vtanhq_f64, ptr @armpl_vtanhq_f32, ptr @armpl_svtanh_f64_x, ptr @armpl_svtanh_f32_x], section "llvm.metadata"
21 define <2 x double> @llvm_cos_f64(<2 x double> %in) {
22 ; CHECK-LABEL: define <2 x double> @llvm_cos_f64
23 ; CHECK-SAME: (<2 x double> [[IN:%.*]]) {
24 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <2 x double> @armpl_vcosq_f64(<2 x double> [[IN]])
25 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
27   %1 = call fast <2 x double> @llvm.cos.v2f64(<2 x double> %in)
28   ret <2 x double> %1
31 define <4 x float> @llvm_cos_f32(<4 x float> %in) {
32 ; CHECK-LABEL: define <4 x float> @llvm_cos_f32
33 ; CHECK-SAME: (<4 x float> [[IN:%.*]]) {
34 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @armpl_vcosq_f32(<4 x float> [[IN]])
35 ; CHECK-NEXT:    ret <4 x float> [[TMP1]]
37   %1 = call fast <4 x float> @llvm.cos.v4f32(<4 x float> %in)
38   ret <4 x float> %1
41 define <vscale x 2 x double> @llvm_cos_vscale_f64(<vscale x 2 x double> %in) #0 {
42 ; CHECK-LABEL: define <vscale x 2 x double> @llvm_cos_vscale_f64
43 ; CHECK-SAME: (<vscale x 2 x double> [[IN:%.*]]) #[[ATTR1:[0-9]+]] {
44 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 2 x double> @armpl_svcos_f64_x(<vscale x 2 x double> [[IN]], <vscale x 2 x i1> shufflevector (<vscale x 2 x i1> insertelement (<vscale x 2 x i1> poison, i1 true, i64 0), <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer))
45 ; CHECK-NEXT:    ret <vscale x 2 x double> [[TMP1]]
47   %1 = call fast <vscale x 2 x double> @llvm.cos.nxv2f64(<vscale x 2 x double> %in)
48   ret <vscale x 2 x double> %1
51 define <vscale x 4 x float> @llvm_cos_vscale_f32(<vscale x 4 x float> %in) #0 {
52 ; CHECK-LABEL: define <vscale x 4 x float> @llvm_cos_vscale_f32
53 ; CHECK-SAME: (<vscale x 4 x float> [[IN:%.*]]) #[[ATTR1]] {
54 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 4 x float> @armpl_svcos_f32_x(<vscale x 4 x float> [[IN]], <vscale x 4 x i1> shufflevector (<vscale x 4 x i1> insertelement (<vscale x 4 x i1> poison, i1 true, i64 0), <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer))
55 ; CHECK-NEXT:    ret <vscale x 4 x float> [[TMP1]]
57   %1 = call fast <vscale x 4 x float> @llvm.cos.nxv4f32(<vscale x 4 x float> %in)
58   ret <vscale x 4 x float> %1
61 declare <2 x double> @llvm.exp.v2f64(<2 x double>)
62 declare <4 x float> @llvm.exp.v4f32(<4 x float>)
63 declare <vscale x 2 x double> @llvm.exp.nxv2f64(<vscale x 2 x double>)
64 declare <vscale x 4 x float> @llvm.exp.nxv4f32(<vscale x 4 x float>)
66 define <2 x double> @llvm_exp_f64(<2 x double> %in) {
67 ; CHECK-LABEL: define <2 x double> @llvm_exp_f64
68 ; CHECK-SAME: (<2 x double> [[IN:%.*]]) {
69 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <2 x double> @armpl_vexpq_f64(<2 x double> [[IN]])
70 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
72   %1 = call fast <2 x double> @llvm.exp.v2f64(<2 x double> %in)
73   ret <2 x double> %1
76 define <4 x float> @llvm_exp_f32(<4 x float> %in) {
77 ; CHECK-LABEL: define <4 x float> @llvm_exp_f32
78 ; CHECK-SAME: (<4 x float> [[IN:%.*]]) {
79 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @armpl_vexpq_f32(<4 x float> [[IN]])
80 ; CHECK-NEXT:    ret <4 x float> [[TMP1]]
82   %1 = call fast <4 x float> @llvm.exp.v4f32(<4 x float> %in)
83   ret <4 x float> %1
86 define <vscale x 2 x double> @llvm_exp_vscale_f64(<vscale x 2 x double> %in) #0 {
87 ; CHECK-LABEL: define <vscale x 2 x double> @llvm_exp_vscale_f64
88 ; CHECK-SAME: (<vscale x 2 x double> [[IN:%.*]]) #[[ATTR1]] {
89 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 2 x double> @armpl_svexp_f64_x(<vscale x 2 x double> [[IN]], <vscale x 2 x i1> shufflevector (<vscale x 2 x i1> insertelement (<vscale x 2 x i1> poison, i1 true, i64 0), <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer))
90 ; CHECK-NEXT:    ret <vscale x 2 x double> [[TMP1]]
92   %1 = call fast <vscale x 2 x double> @llvm.exp.nxv2f64(<vscale x 2 x double> %in)
93   ret <vscale x 2 x double> %1
96 define <vscale x 4 x float> @llvm_exp_vscale_f32(<vscale x 4 x float> %in) #0 {
97 ; CHECK-LABEL: define <vscale x 4 x float> @llvm_exp_vscale_f32
98 ; CHECK-SAME: (<vscale x 4 x float> [[IN:%.*]]) #[[ATTR1]] {
99 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 4 x float> @armpl_svexp_f32_x(<vscale x 4 x float> [[IN]], <vscale x 4 x i1> shufflevector (<vscale x 4 x i1> insertelement (<vscale x 4 x i1> poison, i1 true, i64 0), <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer))
100 ; CHECK-NEXT:    ret <vscale x 4 x float> [[TMP1]]
102   %1 = call fast <vscale x 4 x float> @llvm.exp.nxv4f32(<vscale x 4 x float> %in)
103   ret <vscale x 4 x float> %1
106 declare <2 x double> @llvm.exp10.v2f64(<2 x double>)
107 declare <4 x float> @llvm.exp10.v4f32(<4 x float>)
108 declare <vscale x 2 x double> @llvm.exp10.nxv2f64(<vscale x 2 x double>)
109 declare <vscale x 4 x float> @llvm.exp10.nxv4f32(<vscale x 4 x float>)
111 define <2 x double> @llvm_exp10_f64(<2 x double> %in) {
112 ; CHECK-LABEL: define <2 x double> @llvm_exp10_f64
113 ; CHECK-SAME: (<2 x double> [[IN:%.*]]) {
114 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <2 x double> @armpl_vexp10q_f64(<2 x double> [[IN]])
115 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
117   %1 = call fast <2 x double> @llvm.exp10.v2f64(<2 x double> %in)
118   ret <2 x double> %1
121 define <4 x float> @llvm_exp10_f32(<4 x float> %in) {
122 ; CHECK-LABEL: define <4 x float> @llvm_exp10_f32
123 ; CHECK-SAME: (<4 x float> [[IN:%.*]]) {
124 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @armpl_vexp10q_f32(<4 x float> [[IN]])
125 ; CHECK-NEXT:    ret <4 x float> [[TMP1]]
127   %1 = call fast <4 x float> @llvm.exp10.v4f32(<4 x float> %in)
128   ret <4 x float> %1
131 define <vscale x 2 x double> @llvm_exp10_vscale_f64(<vscale x 2 x double> %in) #0 {
132 ; CHECK-LABEL: define <vscale x 2 x double> @llvm_exp10_vscale_f64
133 ; CHECK-SAME: (<vscale x 2 x double> [[IN:%.*]]) #[[ATTR1]] {
134 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 2 x double> @armpl_svexp10_f64_x(<vscale x 2 x double> [[IN]], <vscale x 2 x i1> shufflevector (<vscale x 2 x i1> insertelement (<vscale x 2 x i1> poison, i1 true, i64 0), <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer))
135 ; CHECK-NEXT:    ret <vscale x 2 x double> [[TMP1]]
137   %1 = call fast <vscale x 2 x double> @llvm.exp10.nxv2f64(<vscale x 2 x double> %in)
138   ret <vscale x 2 x double> %1
141 define <vscale x 4 x float> @llvm_exp10_vscale_f32(<vscale x 4 x float> %in) #0 {
142 ; CHECK-LABEL: define <vscale x 4 x float> @llvm_exp10_vscale_f32
143 ; CHECK-SAME: (<vscale x 4 x float> [[IN:%.*]]) #[[ATTR1]] {
144 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 4 x float> @armpl_svexp10_f32_x(<vscale x 4 x float> [[IN]], <vscale x 4 x i1> shufflevector (<vscale x 4 x i1> insertelement (<vscale x 4 x i1> poison, i1 true, i64 0), <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer))
145 ; CHECK-NEXT:    ret <vscale x 4 x float> [[TMP1]]
147   %1 = call fast <vscale x 4 x float> @llvm.exp10.nxv4f32(<vscale x 4 x float> %in)
148   ret <vscale x 4 x float> %1
151 declare <2 x double> @llvm.exp2.v2f64(<2 x double>)
152 declare <4 x float> @llvm.exp2.v4f32(<4 x float>)
153 declare <vscale x 2 x double> @llvm.exp2.nxv2f64(<vscale x 2 x double>)
154 declare <vscale x 4 x float> @llvm.exp2.nxv4f32(<vscale x 4 x float>)
156 define <2 x double> @llvm_exp2_f64(<2 x double> %in) {
157 ; CHECK-LABEL: define <2 x double> @llvm_exp2_f64
158 ; CHECK-SAME: (<2 x double> [[IN:%.*]]) {
159 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <2 x double> @armpl_vexp2q_f64(<2 x double> [[IN]])
160 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
162   %1 = call fast <2 x double> @llvm.exp2.v2f64(<2 x double> %in)
163   ret <2 x double> %1
166 define <4 x float> @llvm_exp2_f32(<4 x float> %in) {
167 ; CHECK-LABEL: define <4 x float> @llvm_exp2_f32
168 ; CHECK-SAME: (<4 x float> [[IN:%.*]]) {
169 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @armpl_vexp2q_f32(<4 x float> [[IN]])
170 ; CHECK-NEXT:    ret <4 x float> [[TMP1]]
172   %1 = call fast <4 x float> @llvm.exp2.v4f32(<4 x float> %in)
173   ret <4 x float> %1
176 define <vscale x 2 x double> @llvm_exp2_vscale_f64(<vscale x 2 x double> %in) #0 {
177 ; CHECK-LABEL: define <vscale x 2 x double> @llvm_exp2_vscale_f64
178 ; CHECK-SAME: (<vscale x 2 x double> [[IN:%.*]]) #[[ATTR1]] {
179 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 2 x double> @armpl_svexp2_f64_x(<vscale x 2 x double> [[IN]], <vscale x 2 x i1> shufflevector (<vscale x 2 x i1> insertelement (<vscale x 2 x i1> poison, i1 true, i64 0), <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer))
180 ; CHECK-NEXT:    ret <vscale x 2 x double> [[TMP1]]
182   %1 = call fast <vscale x 2 x double> @llvm.exp2.nxv2f64(<vscale x 2 x double> %in)
183   ret <vscale x 2 x double> %1
186 define <vscale x 4 x float> @llvm_exp2_vscale_f32(<vscale x 4 x float> %in) #0 {
187 ; CHECK-LABEL: define <vscale x 4 x float> @llvm_exp2_vscale_f32
188 ; CHECK-SAME: (<vscale x 4 x float> [[IN:%.*]]) #[[ATTR1]] {
189 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 4 x float> @armpl_svexp2_f32_x(<vscale x 4 x float> [[IN]], <vscale x 4 x i1> shufflevector (<vscale x 4 x i1> insertelement (<vscale x 4 x i1> poison, i1 true, i64 0), <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer))
190 ; CHECK-NEXT:    ret <vscale x 4 x float> [[TMP1]]
192   %1 = call fast <vscale x 4 x float> @llvm.exp2.nxv4f32(<vscale x 4 x float> %in)
193   ret <vscale x 4 x float> %1
196 declare <2 x double> @llvm.log.v2f64(<2 x double>)
197 declare <4 x float> @llvm.log.v4f32(<4 x float>)
198 declare <vscale x 2 x double> @llvm.log.nxv2f64(<vscale x 2 x double>)
199 declare <vscale x 4 x float> @llvm.log.nxv4f32(<vscale x 4 x float>)
201 define <2 x double> @llvm_log_f64(<2 x double> %in) {
202 ; CHECK-LABEL: define <2 x double> @llvm_log_f64
203 ; CHECK-SAME: (<2 x double> [[IN:%.*]]) {
204 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <2 x double> @armpl_vlogq_f64(<2 x double> [[IN]])
205 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
207   %1 = call fast <2 x double> @llvm.log.v2f64(<2 x double> %in)
208   ret <2 x double> %1
211 define <4 x float> @llvm_log_f32(<4 x float> %in) {
212 ; CHECK-LABEL: define <4 x float> @llvm_log_f32
213 ; CHECK-SAME: (<4 x float> [[IN:%.*]]) {
214 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @armpl_vlogq_f32(<4 x float> [[IN]])
215 ; CHECK-NEXT:    ret <4 x float> [[TMP1]]
217   %1 = call fast <4 x float> @llvm.log.v4f32(<4 x float> %in)
218   ret <4 x float> %1
221 define <vscale x 2 x double> @llvm_log_vscale_f64(<vscale x 2 x double> %in) #0 {
222 ; CHECK-LABEL: define <vscale x 2 x double> @llvm_log_vscale_f64
223 ; CHECK-SAME: (<vscale x 2 x double> [[IN:%.*]]) #[[ATTR1]] {
224 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 2 x double> @armpl_svlog_f64_x(<vscale x 2 x double> [[IN]], <vscale x 2 x i1> shufflevector (<vscale x 2 x i1> insertelement (<vscale x 2 x i1> poison, i1 true, i64 0), <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer))
225 ; CHECK-NEXT:    ret <vscale x 2 x double> [[TMP1]]
227   %1 = call fast <vscale x 2 x double> @llvm.log.nxv2f64(<vscale x 2 x double> %in)
228   ret <vscale x 2 x double> %1
231 define <vscale x 4 x float> @llvm_log_vscale_f32(<vscale x 4 x float> %in) #0 {
232 ; CHECK-LABEL: define <vscale x 4 x float> @llvm_log_vscale_f32
233 ; CHECK-SAME: (<vscale x 4 x float> [[IN:%.*]]) #[[ATTR1]] {
234 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 4 x float> @armpl_svlog_f32_x(<vscale x 4 x float> [[IN]], <vscale x 4 x i1> shufflevector (<vscale x 4 x i1> insertelement (<vscale x 4 x i1> poison, i1 true, i64 0), <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer))
235 ; CHECK-NEXT:    ret <vscale x 4 x float> [[TMP1]]
237   %1 = call fast <vscale x 4 x float> @llvm.log.nxv4f32(<vscale x 4 x float> %in)
238   ret <vscale x 4 x float> %1
241 declare <2 x double> @llvm.log10.v2f64(<2 x double>)
242 declare <4 x float> @llvm.log10.v4f32(<4 x float>)
243 declare <vscale x 2 x double> @llvm.log10.nxv2f64(<vscale x 2 x double>)
244 declare <vscale x 4 x float> @llvm.log10.nxv4f32(<vscale x 4 x float>)
246 define <2 x double> @llvm_log10_f64(<2 x double> %in) {
247 ; CHECK-LABEL: define <2 x double> @llvm_log10_f64
248 ; CHECK-SAME: (<2 x double> [[IN:%.*]]) {
249 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <2 x double> @armpl_vlog10q_f64(<2 x double> [[IN]])
250 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
252   %1 = call fast <2 x double> @llvm.log10.v2f64(<2 x double> %in)
253   ret <2 x double> %1
256 define <4 x float> @llvm_log10_f32(<4 x float> %in) {
257 ; CHECK-LABEL: define <4 x float> @llvm_log10_f32
258 ; CHECK-SAME: (<4 x float> [[IN:%.*]]) {
259 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @armpl_vlog10q_f32(<4 x float> [[IN]])
260 ; CHECK-NEXT:    ret <4 x float> [[TMP1]]
262   %1 = call fast <4 x float> @llvm.log10.v4f32(<4 x float> %in)
263   ret <4 x float> %1
266 define <vscale x 2 x double> @llvm_log10_vscale_f64(<vscale x 2 x double> %in) #0 {
267 ; CHECK-LABEL: define <vscale x 2 x double> @llvm_log10_vscale_f64
268 ; CHECK-SAME: (<vscale x 2 x double> [[IN:%.*]]) #[[ATTR1]] {
269 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 2 x double> @armpl_svlog10_f64_x(<vscale x 2 x double> [[IN]], <vscale x 2 x i1> shufflevector (<vscale x 2 x i1> insertelement (<vscale x 2 x i1> poison, i1 true, i64 0), <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer))
270 ; CHECK-NEXT:    ret <vscale x 2 x double> [[TMP1]]
272   %1 = call fast <vscale x 2 x double> @llvm.log10.nxv2f64(<vscale x 2 x double> %in)
273   ret <vscale x 2 x double> %1
276 define <vscale x 4 x float> @llvm_log10_vscale_f32(<vscale x 4 x float> %in) #0 {
277 ; CHECK-LABEL: define <vscale x 4 x float> @llvm_log10_vscale_f32
278 ; CHECK-SAME: (<vscale x 4 x float> [[IN:%.*]]) #[[ATTR1]] {
279 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 4 x float> @armpl_svlog10_f32_x(<vscale x 4 x float> [[IN]], <vscale x 4 x i1> shufflevector (<vscale x 4 x i1> insertelement (<vscale x 4 x i1> poison, i1 true, i64 0), <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer))
280 ; CHECK-NEXT:    ret <vscale x 4 x float> [[TMP1]]
282   %1 = call fast <vscale x 4 x float> @llvm.log10.nxv4f32(<vscale x 4 x float> %in)
283   ret <vscale x 4 x float> %1
286 declare <2 x double> @llvm.log2.v2f64(<2 x double>)
287 declare <4 x float> @llvm.log2.v4f32(<4 x float>)
288 declare <vscale x 2 x double> @llvm.log2.nxv2f64(<vscale x 2 x double>)
289 declare <vscale x 4 x float> @llvm.log2.nxv4f32(<vscale x 4 x float>)
291 define <2 x double> @llvm_log2_f64(<2 x double> %in) {
292 ; CHECK-LABEL: define <2 x double> @llvm_log2_f64
293 ; CHECK-SAME: (<2 x double> [[IN:%.*]]) {
294 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <2 x double> @armpl_vlog2q_f64(<2 x double> [[IN]])
295 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
297   %1 = call fast <2 x double> @llvm.log2.v2f64(<2 x double> %in)
298   ret <2 x double> %1
301 define <4 x float> @llvm_log2_f32(<4 x float> %in) {
302 ; CHECK-LABEL: define <4 x float> @llvm_log2_f32
303 ; CHECK-SAME: (<4 x float> [[IN:%.*]]) {
304 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @armpl_vlog2q_f32(<4 x float> [[IN]])
305 ; CHECK-NEXT:    ret <4 x float> [[TMP1]]
307   %1 = call fast <4 x float> @llvm.log2.v4f32(<4 x float> %in)
308   ret <4 x float> %1
311 define <vscale x 2 x double> @llvm_log2_vscale_f64(<vscale x 2 x double> %in) #0 {
312 ; CHECK-LABEL: define <vscale x 2 x double> @llvm_log2_vscale_f64
313 ; CHECK-SAME: (<vscale x 2 x double> [[IN:%.*]]) #[[ATTR1]] {
314 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 2 x double> @armpl_svlog2_f64_x(<vscale x 2 x double> [[IN]], <vscale x 2 x i1> shufflevector (<vscale x 2 x i1> insertelement (<vscale x 2 x i1> poison, i1 true, i64 0), <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer))
315 ; CHECK-NEXT:    ret <vscale x 2 x double> [[TMP1]]
317   %1 = call fast <vscale x 2 x double> @llvm.log2.nxv2f64(<vscale x 2 x double> %in)
318   ret <vscale x 2 x double> %1
321 define <vscale x 4 x float> @llvm_log2_vscale_f32(<vscale x 4 x float> %in) #0 {
322 ; CHECK-LABEL: define <vscale x 4 x float> @llvm_log2_vscale_f32
323 ; CHECK-SAME: (<vscale x 4 x float> [[IN:%.*]]) #[[ATTR1]] {
324 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 4 x float> @armpl_svlog2_f32_x(<vscale x 4 x float> [[IN]], <vscale x 4 x i1> shufflevector (<vscale x 4 x i1> insertelement (<vscale x 4 x i1> poison, i1 true, i64 0), <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer))
325 ; CHECK-NEXT:    ret <vscale x 4 x float> [[TMP1]]
327   %1 = call fast <vscale x 4 x float> @llvm.log2.nxv4f32(<vscale x 4 x float> %in)
328   ret <vscale x 4 x float> %1
331 declare <2 x double> @llvm.pow.v2f64(<2 x double>, <2 x double>)
332 declare <4 x float> @llvm.pow.v4f32(<4 x float>, <4 x float>)
333 declare <vscale x 2 x double> @llvm.pow.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>)
334 declare <vscale x 4 x float> @llvm.pow.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>)
337 ; There is a bug in the replace-with-veclib pass, and for intrinsics which take
338 ; more than one arguments, but has just one overloaded type, it incorrectly
339 ; reconstructs the scalar name, for pow specifically it is searching for:
340 ; llvm.pow.f64.f64 and llvm.pow.f32.f32
343 define <2 x double> @llvm_pow_f64(<2 x double> %in, <2 x double> %power) {
344 ; CHECK-LABEL: define <2 x double> @llvm_pow_f64
345 ; CHECK-SAME: (<2 x double> [[IN:%.*]], <2 x double> [[POWER:%.*]]) {
346 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <2 x double> @llvm.pow.v2f64(<2 x double> [[IN]], <2 x double> [[POWER]])
347 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
349   %1 = call fast <2 x double> @llvm.pow.v2f64(<2 x double> %in, <2 x double> %power)
350   ret <2 x double> %1
353 define <4 x float> @llvm_pow_f32(<4 x float> %in, <4 x float> %power) {
354 ; CHECK-LABEL: define <4 x float> @llvm_pow_f32
355 ; CHECK-SAME: (<4 x float> [[IN:%.*]], <4 x float> [[POWER:%.*]]) {
356 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @llvm.pow.v4f32(<4 x float> [[IN]], <4 x float> [[POWER]])
357 ; CHECK-NEXT:    ret <4 x float> [[TMP1]]
359   %1 = call fast <4 x float> @llvm.pow.v4f32(<4 x float> %in, <4 x float> %power)
360   ret <4 x float> %1
363 define <vscale x 2 x double> @llvm_pow_vscale_f64(<vscale x 2 x double> %in, <vscale x 2 x double> %power) #0 {
364 ; CHECK-LABEL: define <vscale x 2 x double> @llvm_pow_vscale_f64
365 ; CHECK-SAME: (<vscale x 2 x double> [[IN:%.*]], <vscale x 2 x double> [[POWER:%.*]]) #[[ATTR1]] {
366 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 2 x double> @llvm.pow.nxv2f64(<vscale x 2 x double> [[IN]], <vscale x 2 x double> [[POWER]])
367 ; CHECK-NEXT:    ret <vscale x 2 x double> [[TMP1]]
369   %1 = call fast <vscale x 2 x double> @llvm.pow.nxv2f64(<vscale x 2 x double> %in, <vscale x 2 x double> %power)
370   ret <vscale x 2 x double> %1
373 define <vscale x 4 x float> @llvm_pow_vscale_f32(<vscale x 4 x float> %in, <vscale x 4 x float> %power) #0 {
374 ; CHECK-LABEL: define <vscale x 4 x float> @llvm_pow_vscale_f32
375 ; CHECK-SAME: (<vscale x 4 x float> [[IN:%.*]], <vscale x 4 x float> [[POWER:%.*]]) #[[ATTR1]] {
376 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 4 x float> @llvm.pow.nxv4f32(<vscale x 4 x float> [[IN]], <vscale x 4 x float> [[POWER]])
377 ; CHECK-NEXT:    ret <vscale x 4 x float> [[TMP1]]
379   %1 = call fast <vscale x 4 x float> @llvm.pow.nxv4f32(<vscale x 4 x float> %in, <vscale x 4 x float> %power)
380   ret <vscale x 4 x float> %1
383 declare <2 x double> @llvm.sin.v2f64(<2 x double>)
384 declare <4 x float> @llvm.sin.v4f32(<4 x float>)
385 declare <vscale x 2 x double> @llvm.sin.nxv2f64(<vscale x 2 x double>)
386 declare <vscale x 4 x float> @llvm.sin.nxv4f32(<vscale x 4 x float>)
388 define <2 x double> @llvm_sin_f64(<2 x double> %in) {
389 ; CHECK-LABEL: define <2 x double> @llvm_sin_f64
390 ; CHECK-SAME: (<2 x double> [[IN:%.*]]) {
391 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <2 x double> @armpl_vsinq_f64(<2 x double> [[IN]])
392 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
394   %1 = call fast <2 x double> @llvm.sin.v2f64(<2 x double> %in)
395   ret <2 x double> %1
398 define <4 x float> @llvm_sin_f32(<4 x float> %in) {
399 ; CHECK-LABEL: define <4 x float> @llvm_sin_f32
400 ; CHECK-SAME: (<4 x float> [[IN:%.*]]) {
401 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @armpl_vsinq_f32(<4 x float> [[IN]])
402 ; CHECK-NEXT:    ret <4 x float> [[TMP1]]
404   %1 = call fast <4 x float> @llvm.sin.v4f32(<4 x float> %in)
405   ret <4 x float> %1
408 define <vscale x 2 x double> @llvm_sin_vscale_f64(<vscale x 2 x double> %in) #0 {
409 ; CHECK-LABEL: define <vscale x 2 x double> @llvm_sin_vscale_f64
410 ; CHECK-SAME: (<vscale x 2 x double> [[IN:%.*]]) #[[ATTR1]] {
411 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 2 x double> @armpl_svsin_f64_x(<vscale x 2 x double> [[IN]], <vscale x 2 x i1> shufflevector (<vscale x 2 x i1> insertelement (<vscale x 2 x i1> poison, i1 true, i64 0), <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer))
412 ; CHECK-NEXT:    ret <vscale x 2 x double> [[TMP1]]
414   %1 = call fast <vscale x 2 x double> @llvm.sin.nxv2f64(<vscale x 2 x double> %in)
415   ret <vscale x 2 x double> %1
418 define <vscale x 4 x float> @llvm_sin_vscale_f32(<vscale x 4 x float> %in) #0 {
419 ; CHECK-LABEL: define <vscale x 4 x float> @llvm_sin_vscale_f32
420 ; CHECK-SAME: (<vscale x 4 x float> [[IN:%.*]]) #[[ATTR1]] {
421 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 4 x float> @armpl_svsin_f32_x(<vscale x 4 x float> [[IN]], <vscale x 4 x i1> shufflevector (<vscale x 4 x i1> insertelement (<vscale x 4 x i1> poison, i1 true, i64 0), <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer))
422 ; CHECK-NEXT:    ret <vscale x 4 x float> [[TMP1]]
424   %1 = call fast <vscale x 4 x float> @llvm.sin.nxv4f32(<vscale x 4 x float> %in)
425   ret <vscale x 4 x float> %1
428 declare <2 x double> @llvm.tan.v2f64(<2 x double>)
429 declare <4 x float> @llvm.tan.v4f32(<4 x float>)
430 declare <vscale x 2 x double> @llvm.tan.nxv2f64(<vscale x 2 x double>)
431 declare <vscale x 4 x float> @llvm.tan.nxv4f32(<vscale x 4 x float>)
433 define <2 x double> @llvm_tan_f64(<2 x double> %in) {
434 ; CHECK-LABEL: define <2 x double> @llvm_tan_f64
435 ; CHECK-SAME: (<2 x double> [[IN:%.*]]) {
436 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <2 x double> @armpl_vtanq_f64(<2 x double> [[IN]])
437 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
439   %1 = call fast <2 x double> @llvm.tan.v2f64(<2 x double> %in)
440   ret <2 x double> %1
443 define <4 x float> @llvm_tan_f32(<4 x float> %in) {
444 ; CHECK-LABEL: define <4 x float> @llvm_tan_f32
445 ; CHECK-SAME: (<4 x float> [[IN:%.*]]) {
446 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @armpl_vtanq_f32(<4 x float> [[IN]])
447 ; CHECK-NEXT:    ret <4 x float> [[TMP1]]
449   %1 = call fast <4 x float> @llvm.tan.v4f32(<4 x float> %in)
450   ret <4 x float> %1
453 define <vscale x 2 x double> @llvm_tan_vscale_f64(<vscale x 2 x double> %in) #0 {
454 ; CHECK-LABEL: define <vscale x 2 x double> @llvm_tan_vscale_f64
455 ; CHECK-SAME: (<vscale x 2 x double> [[IN:%.*]]) #[[ATTR1]] {
456 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 2 x double> @armpl_svtan_f64_x(<vscale x 2 x double> [[IN]], <vscale x 2 x i1> shufflevector (<vscale x 2 x i1> insertelement (<vscale x 2 x i1> poison, i1 true, i64 0), <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer))
457 ; CHECK-NEXT:    ret <vscale x 2 x double> [[TMP1]]
459   %1 = call fast <vscale x 2 x double> @llvm.tan.nxv2f64(<vscale x 2 x double> %in)
460   ret <vscale x 2 x double> %1
463 define <vscale x 4 x float> @llvm_tan_vscale_f32(<vscale x 4 x float> %in) #0 {
464 ; CHECK-LABEL: define <vscale x 4 x float> @llvm_tan_vscale_f32
465 ; CHECK-SAME: (<vscale x 4 x float> [[IN:%.*]]) #[[ATTR1]] {
466 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 4 x float> @armpl_svtan_f32_x(<vscale x 4 x float> [[IN]], <vscale x 4 x i1> shufflevector (<vscale x 4 x i1> insertelement (<vscale x 4 x i1> poison, i1 true, i64 0), <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer))
467 ; CHECK-NEXT:    ret <vscale x 4 x float> [[TMP1]]
469   %1 = call fast <vscale x 4 x float> @llvm.tan.nxv4f32(<vscale x 4 x float> %in)
470   ret <vscale x 4 x float> %1
473 declare <2 x double> @llvm.acos.v2f64(<2 x double>)
474 declare <4 x float> @llvm.acos.v4f32(<4 x float>)
475 declare <vscale x 2 x double> @llvm.acos.nxv2f64(<vscale x 2 x double>)
476 declare <vscale x 4 x float> @llvm.acos.nxv4f32(<vscale x 4 x float>)
478 define <2 x double> @llvm_acos_f64(<2 x double> %in) {
479 ; CHECK-LABEL: define <2 x double> @llvm_acos_f64
480 ; CHECK-SAME: (<2 x double> [[IN:%.*]]) {
481 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <2 x double> @armpl_vacosq_f64(<2 x double> [[IN]])
482 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
484   %1 = call fast <2 x double> @llvm.acos.v2f64(<2 x double> %in)
485   ret <2 x double> %1
488 define <4 x float> @llvm_acos_f32(<4 x float> %in) {
489 ; CHECK-LABEL: define <4 x float> @llvm_acos_f32
490 ; CHECK-SAME: (<4 x float> [[IN:%.*]]) {
491 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @armpl_vacosq_f32(<4 x float> [[IN]])
492 ; CHECK-NEXT:    ret <4 x float> [[TMP1]]
494   %1 = call fast <4 x float> @llvm.acos.v4f32(<4 x float> %in)
495   ret <4 x float> %1
498 define <vscale x 2 x double> @llvm_acos_vscale_f64(<vscale x 2 x double> %in) #0 {
499 ; CHECK-LABEL: define <vscale x 2 x double> @llvm_acos_vscale_f64
500 ; CHECK-SAME: (<vscale x 2 x double> [[IN:%.*]]) #[[ATTR1]] {
501 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 2 x double> @armpl_svacos_f64_x(<vscale x 2 x double> [[IN]], <vscale x 2 x i1> shufflevector (<vscale x 2 x i1> insertelement (<vscale x 2 x i1> poison, i1 true, i64 0), <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer))
502 ; CHECK-NEXT:    ret <vscale x 2 x double> [[TMP1]]
504   %1 = call fast <vscale x 2 x double> @llvm.acos.nxv2f64(<vscale x 2 x double> %in)
505   ret <vscale x 2 x double> %1
508 define <vscale x 4 x float> @llvm_acos_vscale_f32(<vscale x 4 x float> %in) #0 {
509 ; CHECK-LABEL: define <vscale x 4 x float> @llvm_acos_vscale_f32
510 ; CHECK-SAME: (<vscale x 4 x float> [[IN:%.*]]) #[[ATTR1]] {
511 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 4 x float> @armpl_svacos_f32_x(<vscale x 4 x float> [[IN]], <vscale x 4 x i1> shufflevector (<vscale x 4 x i1> insertelement (<vscale x 4 x i1> poison, i1 true, i64 0), <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer))
512 ; CHECK-NEXT:    ret <vscale x 4 x float> [[TMP1]]
514   %1 = call fast <vscale x 4 x float> @llvm.acos.nxv4f32(<vscale x 4 x float> %in)
515   ret <vscale x 4 x float> %1
518 declare <2 x double> @llvm.asin.v2f64(<2 x double>)
519 declare <4 x float> @llvm.asin.v4f32(<4 x float>)
520 declare <vscale x 2 x double> @llvm.asin.nxv2f64(<vscale x 2 x double>)
521 declare <vscale x 4 x float> @llvm.asin.nxv4f32(<vscale x 4 x float>)
523 define <2 x double> @llvm_asin_f64(<2 x double> %in) {
524 ; CHECK-LABEL: define <2 x double> @llvm_asin_f64
525 ; CHECK-SAME: (<2 x double> [[IN:%.*]]) {
526 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <2 x double> @armpl_vasinq_f64(<2 x double> [[IN]])
527 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
529   %1 = call fast <2 x double> @llvm.asin.v2f64(<2 x double> %in)
530   ret <2 x double> %1
533 define <4 x float> @llvm_asin_f32(<4 x float> %in) {
534 ; CHECK-LABEL: define <4 x float> @llvm_asin_f32
535 ; CHECK-SAME: (<4 x float> [[IN:%.*]]) {
536 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @armpl_vasinq_f32(<4 x float> [[IN]])
537 ; CHECK-NEXT:    ret <4 x float> [[TMP1]]
539   %1 = call fast <4 x float> @llvm.asin.v4f32(<4 x float> %in)
540   ret <4 x float> %1
543 define <vscale x 2 x double> @llvm_asin_vscale_f64(<vscale x 2 x double> %in) #0 {
544 ; CHECK-LABEL: define <vscale x 2 x double> @llvm_asin_vscale_f64
545 ; CHECK-SAME: (<vscale x 2 x double> [[IN:%.*]]) #[[ATTR1]] {
546 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 2 x double> @armpl_svasin_f64_x(<vscale x 2 x double> [[IN]], <vscale x 2 x i1> shufflevector (<vscale x 2 x i1> insertelement (<vscale x 2 x i1> poison, i1 true, i64 0), <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer))
547 ; CHECK-NEXT:    ret <vscale x 2 x double> [[TMP1]]
549   %1 = call fast <vscale x 2 x double> @llvm.asin.nxv2f64(<vscale x 2 x double> %in)
550   ret <vscale x 2 x double> %1
553 define <vscale x 4 x float> @llvm_asin_vscale_f32(<vscale x 4 x float> %in) #0 {
554 ; CHECK-LABEL: define <vscale x 4 x float> @llvm_asin_vscale_f32
555 ; CHECK-SAME: (<vscale x 4 x float> [[IN:%.*]]) #[[ATTR1]] {
556 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 4 x float> @armpl_svasin_f32_x(<vscale x 4 x float> [[IN]], <vscale x 4 x i1> shufflevector (<vscale x 4 x i1> insertelement (<vscale x 4 x i1> poison, i1 true, i64 0), <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer))
557 ; CHECK-NEXT:    ret <vscale x 4 x float> [[TMP1]]
559   %1 = call fast <vscale x 4 x float> @llvm.asin.nxv4f32(<vscale x 4 x float> %in)
560   ret <vscale x 4 x float> %1
563 declare <2 x double> @llvm.atan.v2f64(<2 x double>)
564 declare <4 x float> @llvm.atan.v4f32(<4 x float>)
565 declare <vscale x 2 x double> @llvm.atan.nxv2f64(<vscale x 2 x double>)
566 declare <vscale x 4 x float> @llvm.atan.nxv4f32(<vscale x 4 x float>)
568 define <2 x double> @llvm_atan_f64(<2 x double> %in) {
569 ; CHECK-LABEL: define <2 x double> @llvm_atan_f64
570 ; CHECK-SAME: (<2 x double> [[IN:%.*]]) {
571 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <2 x double> @armpl_vatanq_f64(<2 x double> [[IN]])
572 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
574   %1 = call fast <2 x double> @llvm.atan.v2f64(<2 x double> %in)
575   ret <2 x double> %1
578 define <4 x float> @llvm_atan_f32(<4 x float> %in) {
579 ; CHECK-LABEL: define <4 x float> @llvm_atan_f32
580 ; CHECK-SAME: (<4 x float> [[IN:%.*]]) {
581 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @armpl_vatanq_f32(<4 x float> [[IN]])
582 ; CHECK-NEXT:    ret <4 x float> [[TMP1]]
584   %1 = call fast <4 x float> @llvm.atan.v4f32(<4 x float> %in)
585   ret <4 x float> %1
588 define <vscale x 2 x double> @llvm_atan_vscale_f64(<vscale x 2 x double> %in) #0 {
589 ; CHECK-LABEL: define <vscale x 2 x double> @llvm_atan_vscale_f64
590 ; CHECK-SAME: (<vscale x 2 x double> [[IN:%.*]]) #[[ATTR1]] {
591 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 2 x double> @armpl_svatan_f64_x(<vscale x 2 x double> [[IN]], <vscale x 2 x i1> shufflevector (<vscale x 2 x i1> insertelement (<vscale x 2 x i1> poison, i1 true, i64 0), <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer))
592 ; CHECK-NEXT:    ret <vscale x 2 x double> [[TMP1]]
594   %1 = call fast <vscale x 2 x double> @llvm.atan.nxv2f64(<vscale x 2 x double> %in)
595   ret <vscale x 2 x double> %1
598 define <vscale x 4 x float> @llvm_atan_vscale_f32(<vscale x 4 x float> %in) #0 {
599 ; CHECK-LABEL: define <vscale x 4 x float> @llvm_atan_vscale_f32
600 ; CHECK-SAME: (<vscale x 4 x float> [[IN:%.*]]) #[[ATTR1]] {
601 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 4 x float> @armpl_svatan_f32_x(<vscale x 4 x float> [[IN]], <vscale x 4 x i1> shufflevector (<vscale x 4 x i1> insertelement (<vscale x 4 x i1> poison, i1 true, i64 0), <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer))
602 ; CHECK-NEXT:    ret <vscale x 4 x float> [[TMP1]]
604   %1 = call fast <vscale x 4 x float> @llvm.atan.nxv4f32(<vscale x 4 x float> %in)
605   ret <vscale x 4 x float> %1
608 declare <2 x double> @llvm.cosh.v2f64(<2 x double>)
609 declare <4 x float> @llvm.cosh.v4f32(<4 x float>)
610 declare <vscale x 2 x double> @llvm.cosh.nxv2f64(<vscale x 2 x double>)
611 declare <vscale x 4 x float> @llvm.cosh.nxv4f32(<vscale x 4 x float>)
613 define <2 x double> @llvm_cosh_f64(<2 x double> %in) {
614 ; CHECK-LABEL: define <2 x double> @llvm_cosh_f64
615 ; CHECK-SAME: (<2 x double> [[IN:%.*]]) {
616 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <2 x double> @armpl_vcoshq_f64(<2 x double> [[IN]])
617 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
619   %1 = call fast <2 x double> @llvm.cosh.v2f64(<2 x double> %in)
620   ret <2 x double> %1
623 define <4 x float> @llvm_cosh_f32(<4 x float> %in) {
624 ; CHECK-LABEL: define <4 x float> @llvm_cosh_f32
625 ; CHECK-SAME: (<4 x float> [[IN:%.*]]) {
626 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @armpl_vcoshq_f32(<4 x float> [[IN]])
627 ; CHECK-NEXT:    ret <4 x float> [[TMP1]]
629   %1 = call fast <4 x float> @llvm.cosh.v4f32(<4 x float> %in)
630   ret <4 x float> %1
633 define <vscale x 2 x double> @llvm_cosh_vscale_f64(<vscale x 2 x double> %in) #0 {
634 ; CHECK-LABEL: define <vscale x 2 x double> @llvm_cosh_vscale_f64
635 ; CHECK-SAME: (<vscale x 2 x double> [[IN:%.*]]) #[[ATTR1]] {
636 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 2 x double> @armpl_svcosh_f64_x(<vscale x 2 x double> [[IN]], <vscale x 2 x i1> shufflevector (<vscale x 2 x i1> insertelement (<vscale x 2 x i1> poison, i1 true, i64 0), <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer))
637 ; CHECK-NEXT:    ret <vscale x 2 x double> [[TMP1]]
639   %1 = call fast <vscale x 2 x double> @llvm.cosh.nxv2f64(<vscale x 2 x double> %in)
640   ret <vscale x 2 x double> %1
643 define <vscale x 4 x float> @llvm_cosh_vscale_f32(<vscale x 4 x float> %in) #0 {
644 ; CHECK-LABEL: define <vscale x 4 x float> @llvm_cosh_vscale_f32
645 ; CHECK-SAME: (<vscale x 4 x float> [[IN:%.*]]) #[[ATTR1]] {
646 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 4 x float> @armpl_svcosh_f32_x(<vscale x 4 x float> [[IN]], <vscale x 4 x i1> shufflevector (<vscale x 4 x i1> insertelement (<vscale x 4 x i1> poison, i1 true, i64 0), <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer))
647 ; CHECK-NEXT:    ret <vscale x 4 x float> [[TMP1]]
649   %1 = call fast <vscale x 4 x float> @llvm.cosh.nxv4f32(<vscale x 4 x float> %in)
650   ret <vscale x 4 x float> %1
653 declare <2 x double> @llvm.sinh.v2f64(<2 x double>)
654 declare <4 x float> @llvm.sinh.v4f32(<4 x float>)
655 declare <vscale x 2 x double> @llvm.sinh.nxv2f64(<vscale x 2 x double>)
656 declare <vscale x 4 x float> @llvm.sinh.nxv4f32(<vscale x 4 x float>)
658 define <2 x double> @llvm_sinh_f64(<2 x double> %in) {
659 ; CHECK-LABEL: define <2 x double> @llvm_sinh_f64
660 ; CHECK-SAME: (<2 x double> [[IN:%.*]]) {
661 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <2 x double> @armpl_vsinhq_f64(<2 x double> [[IN]])
662 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
664   %1 = call fast <2 x double> @llvm.sinh.v2f64(<2 x double> %in)
665   ret <2 x double> %1
668 define <4 x float> @llvm_sinh_f32(<4 x float> %in) {
669 ; CHECK-LABEL: define <4 x float> @llvm_sinh_f32
670 ; CHECK-SAME: (<4 x float> [[IN:%.*]]) {
671 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @armpl_vsinhq_f32(<4 x float> [[IN]])
672 ; CHECK-NEXT:    ret <4 x float> [[TMP1]]
674   %1 = call fast <4 x float> @llvm.sinh.v4f32(<4 x float> %in)
675   ret <4 x float> %1
678 define <vscale x 2 x double> @llvm_sinh_vscale_f64(<vscale x 2 x double> %in) #0 {
679 ; CHECK-LABEL: define <vscale x 2 x double> @llvm_sinh_vscale_f64
680 ; CHECK-SAME: (<vscale x 2 x double> [[IN:%.*]]) #[[ATTR1]] {
681 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 2 x double> @armpl_svsinh_f64_x(<vscale x 2 x double> [[IN]], <vscale x 2 x i1> shufflevector (<vscale x 2 x i1> insertelement (<vscale x 2 x i1> poison, i1 true, i64 0), <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer))
682 ; CHECK-NEXT:    ret <vscale x 2 x double> [[TMP1]]
684   %1 = call fast <vscale x 2 x double> @llvm.sinh.nxv2f64(<vscale x 2 x double> %in)
685   ret <vscale x 2 x double> %1
688 define <vscale x 4 x float> @llvm_sinh_vscale_f32(<vscale x 4 x float> %in) #0 {
689 ; CHECK-LABEL: define <vscale x 4 x float> @llvm_sinh_vscale_f32
690 ; CHECK-SAME: (<vscale x 4 x float> [[IN:%.*]]) #[[ATTR1]] {
691 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 4 x float> @armpl_svsinh_f32_x(<vscale x 4 x float> [[IN]], <vscale x 4 x i1> shufflevector (<vscale x 4 x i1> insertelement (<vscale x 4 x i1> poison, i1 true, i64 0), <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer))
692 ; CHECK-NEXT:    ret <vscale x 4 x float> [[TMP1]]
694   %1 = call fast <vscale x 4 x float> @llvm.sinh.nxv4f32(<vscale x 4 x float> %in)
695   ret <vscale x 4 x float> %1
698 declare <2 x double> @llvm.tanh.v2f64(<2 x double>)
699 declare <4 x float> @llvm.tanh.v4f32(<4 x float>)
700 declare <vscale x 2 x double> @llvm.tanh.nxv2f64(<vscale x 2 x double>)
701 declare <vscale x 4 x float> @llvm.tanh.nxv4f32(<vscale x 4 x float>)
703 define <2 x double> @llvm_tanh_f64(<2 x double> %in) {
704 ; CHECK-LABEL: define <2 x double> @llvm_tanh_f64
705 ; CHECK-SAME: (<2 x double> [[IN:%.*]]) {
706 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <2 x double> @armpl_vtanhq_f64(<2 x double> [[IN]])
707 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
709   %1 = call fast <2 x double> @llvm.tanh.v2f64(<2 x double> %in)
710   ret <2 x double> %1
713 define <4 x float> @llvm_tanh_f32(<4 x float> %in) {
714 ; CHECK-LABEL: define <4 x float> @llvm_tanh_f32
715 ; CHECK-SAME: (<4 x float> [[IN:%.*]]) {
716 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @armpl_vtanhq_f32(<4 x float> [[IN]])
717 ; CHECK-NEXT:    ret <4 x float> [[TMP1]]
719   %1 = call fast <4 x float> @llvm.tanh.v4f32(<4 x float> %in)
720   ret <4 x float> %1
723 define <vscale x 2 x double> @llvm_tanh_vscale_f64(<vscale x 2 x double> %in) #0 {
724 ; CHECK-LABEL: define <vscale x 2 x double> @llvm_tanh_vscale_f64
725 ; CHECK-SAME: (<vscale x 2 x double> [[IN:%.*]]) #[[ATTR1]] {
726 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 2 x double> @armpl_svtanh_f64_x(<vscale x 2 x double> [[IN]], <vscale x 2 x i1> shufflevector (<vscale x 2 x i1> insertelement (<vscale x 2 x i1> poison, i1 true, i64 0), <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer))
727 ; CHECK-NEXT:    ret <vscale x 2 x double> [[TMP1]]
729   %1 = call fast <vscale x 2 x double> @llvm.tanh.nxv2f64(<vscale x 2 x double> %in)
730   ret <vscale x 2 x double> %1
733 define <vscale x 4 x float> @llvm_tanh_vscale_f32(<vscale x 4 x float> %in) #0 {
734 ; CHECK-LABEL: define <vscale x 4 x float> @llvm_tanh_vscale_f32
735 ; CHECK-SAME: (<vscale x 4 x float> [[IN:%.*]]) #[[ATTR1]] {
736 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 4 x float> @armpl_svtanh_f32_x(<vscale x 4 x float> [[IN]], <vscale x 4 x i1> shufflevector (<vscale x 4 x i1> insertelement (<vscale x 4 x i1> poison, i1 true, i64 0), <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer))
737 ; CHECK-NEXT:    ret <vscale x 4 x float> [[TMP1]]
739   %1 = call fast <vscale x 4 x float> @llvm.tanh.nxv4f32(<vscale x 4 x float> %in)
740   ret <vscale x 4 x float> %1
743 attributes #0 = { "target-features"="+sve" }
745 ; CHECK: attributes #[[ATTR0:[0-9]+]] = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
746 ; CHECK: attributes #[[ATTR1]] = { "target-features"="+sve" }