[Instrumentation] Fix a warning
[llvm-project.git] / llvm / test / Transforms / LoopVectorize / AArch64 / veclib-function-calls.ll
blob4ad9987b0906992bcb9429744486d2107655f498
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --scrub-attributes --filter "call.*(cos|sin|tan|cbrt|erf|exp[^e]|gamma|log|sqrt|copysign|dim|min|mod|hypot|nextafter|pow|fma)" --version 2
2 ; RUN: opt -mattr=+neon -vector-library=sleefgnuabi -passes=inject-tli-mappings,loop-vectorize,simplifycfg -force-vector-interleave=1 -S < %s | FileCheck %s -check-prefix=SLEEF-NEON
3 ; RUN: opt -mattr=+sve -vector-library=sleefgnuabi -passes=inject-tli-mappings,loop-vectorize,simplifycfg -mcpu=neoverse-v1 -force-vector-interleave=1 -prefer-predicate-over-epilogue=predicate-dont-vectorize -S < %s | FileCheck %s -check-prefix=SLEEF-SVE
4 ; RUN: opt -mattr=+sve -vector-library=sleefgnuabi -passes=inject-tli-mappings,loop-vectorize,simplifycfg -mcpu=neoverse-v1 -force-vector-interleave=1 -S < %s | FileCheck %s -check-prefixes=SLEEF-SVE-NOPRED
5 ; RUN: opt -mattr=+neon -vector-library=ArmPL -passes=inject-tli-mappings,loop-vectorize,simplifycfg -force-vector-interleave=1 -S < %s | FileCheck %s -check-prefix=ARMPL-NEON
6 ; RUN: opt -mattr=+sve -vector-library=ArmPL -passes=inject-tli-mappings,loop-vectorize,simplifycfg -mcpu=neoverse-v1 -force-vector-interleave=1 -prefer-predicate-over-epilogue=predicate-dont-vectorize -S < %s | FileCheck %s -check-prefix=ARMPL-SVE
7 ; RUN: opt -mattr=+sve -vector-library=ArmPL -passes=inject-tli-mappings,loop-vectorize,simplifycfg -mcpu=neoverse-v1 -force-vector-interleave=1 -S < %s | FileCheck %s -check-prefixes=ARMPL-SVE-NOPRED
11 target triple = "aarch64-unknown-linux-gnu"
13 ; We are checking whether loops containing function calls can be vectorized,
14 ; when the compiler provides TLI mappings to their vector variants. The tests
15 ; are checking fixed width vectorization with NEON and scalable vectorization
16 ; with SVE.
18 declare double @acos(double)
19 declare float @acosf(float)
21 define void @acos_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
22 ; SLEEF-NEON-LABEL: define void @acos_f64
23 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0:[0-9]+]] {
24 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_acos(<2 x double> [[WIDE_LOAD:%.*]])
26 ; SLEEF-SVE-LABEL: define void @acos_f64
27 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0:[0-9]+]] {
28 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_acos(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
30 ; SLEEF-SVE-NOPRED-LABEL: define void @acos_f64
31 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0:[0-9]+]] {
32 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_acos(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
33 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call double @acos(double [[IN:%.*]])
35 ; ARMPL-NEON-LABEL: define void @acos_f64
36 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0:[0-9]+]] {
37 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vacosq_f64(<2 x double> [[WIDE_LOAD:%.*]])
39 ; ARMPL-SVE-LABEL: define void @acos_f64
40 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0:[0-9]+]] {
41 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @armpl_svacos_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
43 ; ARMPL-SVE-NOPRED-LABEL: define void @acos_f64
44 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0:[0-9]+]] {
45 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @armpl_svacos_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
46 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call double @acos(double [[IN:%.*]])
48   entry:
49   br label %for.body
51   for.body:
52   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
53   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
54   %in = load double, ptr %in.gep, align 8
55   %call = tail call double @acos(double %in)
56   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
57   store double %call, ptr %out.gep, align 8
58   %iv.next = add nuw nsw i64 %iv, 1
59   %exitcond = icmp eq i64 %iv.next, 1000
60   br i1 %exitcond, label %for.end, label %for.body
62   for.end:
63   ret void
66 define void @acos_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
67 ; SLEEF-NEON-LABEL: define void @acos_f32
68 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
69 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_acosf(<4 x float> [[WIDE_LOAD:%.*]])
71 ; SLEEF-SVE-LABEL: define void @acos_f32
72 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
73 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_acosf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
75 ; SLEEF-SVE-NOPRED-LABEL: define void @acos_f32
76 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
77 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_acosf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
78 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call float @acosf(float [[IN:%.*]])
80 ; ARMPL-NEON-LABEL: define void @acos_f32
81 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
82 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vacosq_f32(<4 x float> [[WIDE_LOAD:%.*]])
84 ; ARMPL-SVE-LABEL: define void @acos_f32
85 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
86 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @armpl_svacos_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
88 ; ARMPL-SVE-NOPRED-LABEL: define void @acos_f32
89 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
90 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @armpl_svacos_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
91 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call float @acosf(float [[IN:%.*]])
93   entry:
94   br label %for.body
96   for.body:
97   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
98   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
99   %in = load float, ptr %in.gep, align 8
100   %call = tail call float @acosf(float %in)
101   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
102   store float %call, ptr %out.gep, align 4
103   %iv.next = add nuw nsw i64 %iv, 1
104   %exitcond = icmp eq i64 %iv.next, 1000
105   br i1 %exitcond, label %for.end, label %for.body
107   for.end:
108   ret void
111 declare double @acosh(double)
112 declare float @acoshf(float)
114 define void @acosh_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
115 ; SLEEF-NEON-LABEL: define void @acosh_f64
116 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
117 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_acosh(<2 x double> [[WIDE_LOAD:%.*]])
119 ; SLEEF-SVE-LABEL: define void @acosh_f64
120 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
121 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_acosh(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
123 ; SLEEF-SVE-NOPRED-LABEL: define void @acosh_f64
124 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
125 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_acosh(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
126 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call double @acosh(double [[IN:%.*]])
128 ; ARMPL-NEON-LABEL: define void @acosh_f64
129 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
130 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vacoshq_f64(<2 x double> [[WIDE_LOAD:%.*]])
132 ; ARMPL-SVE-LABEL: define void @acosh_f64
133 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
134 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @armpl_svacosh_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
136 ; ARMPL-SVE-NOPRED-LABEL: define void @acosh_f64
137 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
138 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @armpl_svacosh_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
139 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call double @acosh(double [[IN:%.*]])
141   entry:
142   br label %for.body
144   for.body:
145   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
146   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
147   %in = load double, ptr %in.gep, align 8
148   %call = tail call double @acosh(double %in)
149   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
150   store double %call, ptr %out.gep, align 8
151   %iv.next = add nuw nsw i64 %iv, 1
152   %exitcond = icmp eq i64 %iv.next, 1000
153   br i1 %exitcond, label %for.end, label %for.body
155   for.end:
156   ret void
159 define void @acosh_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
160 ; SLEEF-NEON-LABEL: define void @acosh_f32
161 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
162 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_acoshf(<4 x float> [[WIDE_LOAD:%.*]])
164 ; SLEEF-SVE-LABEL: define void @acosh_f32
165 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
166 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_acoshf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
168 ; SLEEF-SVE-NOPRED-LABEL: define void @acosh_f32
169 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
170 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_acoshf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
171 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call float @acoshf(float [[IN:%.*]])
173 ; ARMPL-NEON-LABEL: define void @acosh_f32
174 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
175 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vacoshq_f32(<4 x float> [[WIDE_LOAD:%.*]])
177 ; ARMPL-SVE-LABEL: define void @acosh_f32
178 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
179 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @armpl_svacosh_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
181 ; ARMPL-SVE-NOPRED-LABEL: define void @acosh_f32
182 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
183 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @armpl_svacosh_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
184 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call float @acoshf(float [[IN:%.*]])
186   entry:
187   br label %for.body
189   for.body:
190   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
191   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
192   %in = load float, ptr %in.gep, align 8
193   %call = tail call float @acoshf(float %in)
194   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
195   store float %call, ptr %out.gep, align 4
196   %iv.next = add nuw nsw i64 %iv, 1
197   %exitcond = icmp eq i64 %iv.next, 1000
198   br i1 %exitcond, label %for.end, label %for.body
200   for.end:
201   ret void
204 declare double @asin(double)
205 declare float @asinf(float)
207 define void @asin_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
208 ; SLEEF-NEON-LABEL: define void @asin_f64
209 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
210 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_asin(<2 x double> [[WIDE_LOAD:%.*]])
212 ; SLEEF-SVE-LABEL: define void @asin_f64
213 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
214 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_asin(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
216 ; SLEEF-SVE-NOPRED-LABEL: define void @asin_f64
217 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
218 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_asin(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
219 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call double @asin(double [[IN:%.*]])
221 ; ARMPL-NEON-LABEL: define void @asin_f64
222 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
223 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vasinq_f64(<2 x double> [[WIDE_LOAD:%.*]])
225 ; ARMPL-SVE-LABEL: define void @asin_f64
226 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
227 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @armpl_svasin_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
229 ; ARMPL-SVE-NOPRED-LABEL: define void @asin_f64
230 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
231 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @armpl_svasin_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
232 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call double @asin(double [[IN:%.*]])
234   entry:
235   br label %for.body
237   for.body:
238   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
239   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
240   %in = load double, ptr %in.gep, align 8
241   %call = tail call double @asin(double %in)
242   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
243   store double %call, ptr %out.gep, align 8
244   %iv.next = add nuw nsw i64 %iv, 1
245   %exitcond = icmp eq i64 %iv.next, 1000
246   br i1 %exitcond, label %for.end, label %for.body
248   for.end:
249   ret void
252 define void @asin_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
253 ; SLEEF-NEON-LABEL: define void @asin_f32
254 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
255 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_asinf(<4 x float> [[WIDE_LOAD:%.*]])
257 ; SLEEF-SVE-LABEL: define void @asin_f32
258 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
259 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_asinf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
261 ; SLEEF-SVE-NOPRED-LABEL: define void @asin_f32
262 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
263 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_asinf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
264 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call float @asinf(float [[IN:%.*]])
266 ; ARMPL-NEON-LABEL: define void @asin_f32
267 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
268 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vasinq_f32(<4 x float> [[WIDE_LOAD:%.*]])
270 ; ARMPL-SVE-LABEL: define void @asin_f32
271 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
272 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @armpl_svasin_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
274 ; ARMPL-SVE-NOPRED-LABEL: define void @asin_f32
275 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
276 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @armpl_svasin_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
277 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call float @asinf(float [[IN:%.*]])
279   entry:
280   br label %for.body
282   for.body:
283   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
284   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
285   %in = load float, ptr %in.gep, align 8
286   %call = tail call float @asinf(float %in)
287   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
288   store float %call, ptr %out.gep, align 4
289   %iv.next = add nuw nsw i64 %iv, 1
290   %exitcond = icmp eq i64 %iv.next, 1000
291   br i1 %exitcond, label %for.end, label %for.body
293   for.end:
294   ret void
297 declare double @asinh(double)
298 declare float @asinhf(float)
300 define void @asinh_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
301 ; SLEEF-NEON-LABEL: define void @asinh_f64
302 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
303 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_asinh(<2 x double> [[WIDE_LOAD:%.*]])
305 ; SLEEF-SVE-LABEL: define void @asinh_f64
306 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
307 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_asinh(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
309 ; SLEEF-SVE-NOPRED-LABEL: define void @asinh_f64
310 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
311 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_asinh(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
312 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call double @asinh(double [[IN:%.*]])
314 ; ARMPL-NEON-LABEL: define void @asinh_f64
315 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
316 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vasinhq_f64(<2 x double> [[WIDE_LOAD:%.*]])
318 ; ARMPL-SVE-LABEL: define void @asinh_f64
319 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
320 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @armpl_svasinh_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
322 ; ARMPL-SVE-NOPRED-LABEL: define void @asinh_f64
323 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
324 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @armpl_svasinh_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
325 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call double @asinh(double [[IN:%.*]])
327   entry:
328   br label %for.body
330   for.body:
331   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
332   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
333   %in = load double, ptr %in.gep, align 8
334   %call = tail call double @asinh(double %in)
335   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
336   store double %call, ptr %out.gep, align 8
337   %iv.next = add nuw nsw i64 %iv, 1
338   %exitcond = icmp eq i64 %iv.next, 1000
339   br i1 %exitcond, label %for.end, label %for.body
341   for.end:
342   ret void
345 define void @asinh_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
346 ; SLEEF-NEON-LABEL: define void @asinh_f32
347 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
348 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_asinhf(<4 x float> [[WIDE_LOAD:%.*]])
350 ; SLEEF-SVE-LABEL: define void @asinh_f32
351 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
352 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_asinhf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
354 ; SLEEF-SVE-NOPRED-LABEL: define void @asinh_f32
355 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
356 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_asinhf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
357 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call float @asinhf(float [[IN:%.*]])
359 ; ARMPL-NEON-LABEL: define void @asinh_f32
360 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
361 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vasinhq_f32(<4 x float> [[WIDE_LOAD:%.*]])
363 ; ARMPL-SVE-LABEL: define void @asinh_f32
364 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
365 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @armpl_svasinh_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
367 ; ARMPL-SVE-NOPRED-LABEL: define void @asinh_f32
368 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
369 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @armpl_svasinh_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
370 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call float @asinhf(float [[IN:%.*]])
372   entry:
373   br label %for.body
375   for.body:
376   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
377   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
378   %in = load float, ptr %in.gep, align 8
379   %call = tail call float @asinhf(float %in)
380   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
381   store float %call, ptr %out.gep, align 4
382   %iv.next = add nuw nsw i64 %iv, 1
383   %exitcond = icmp eq i64 %iv.next, 1000
384   br i1 %exitcond, label %for.end, label %for.body
386   for.end:
387   ret void
390 declare double @atan(double)
391 declare float @atanf(float)
393 define void @atan_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
394 ; SLEEF-NEON-LABEL: define void @atan_f64
395 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
396 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_atan(<2 x double> [[WIDE_LOAD:%.*]])
398 ; SLEEF-SVE-LABEL: define void @atan_f64
399 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
400 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_atan(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
402 ; SLEEF-SVE-NOPRED-LABEL: define void @atan_f64
403 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
404 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_atan(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
405 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call double @atan(double [[IN:%.*]])
407 ; ARMPL-NEON-LABEL: define void @atan_f64
408 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
409 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vatanq_f64(<2 x double> [[WIDE_LOAD:%.*]])
411 ; ARMPL-SVE-LABEL: define void @atan_f64
412 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
413 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @armpl_svatan_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
415 ; ARMPL-SVE-NOPRED-LABEL: define void @atan_f64
416 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
417 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @armpl_svatan_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
418 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call double @atan(double [[IN:%.*]])
420   entry:
421   br label %for.body
423   for.body:
424   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
425   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
426   %in = load double, ptr %in.gep, align 8
427   %call = tail call double @atan(double %in)
428   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
429   store double %call, ptr %out.gep, align 8
430   %iv.next = add nuw nsw i64 %iv, 1
431   %exitcond = icmp eq i64 %iv.next, 1000
432   br i1 %exitcond, label %for.end, label %for.body
434   for.end:
435   ret void
438 define void @atan_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
439 ; SLEEF-NEON-LABEL: define void @atan_f32
440 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
441 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_atanf(<4 x float> [[WIDE_LOAD:%.*]])
443 ; SLEEF-SVE-LABEL: define void @atan_f32
444 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
445 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_atanf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
447 ; SLEEF-SVE-NOPRED-LABEL: define void @atan_f32
448 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
449 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_atanf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
450 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call float @atanf(float [[IN:%.*]])
452 ; ARMPL-NEON-LABEL: define void @atan_f32
453 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
454 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vatanq_f32(<4 x float> [[WIDE_LOAD:%.*]])
456 ; ARMPL-SVE-LABEL: define void @atan_f32
457 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
458 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @armpl_svatan_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
460 ; ARMPL-SVE-NOPRED-LABEL: define void @atan_f32
461 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
462 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @armpl_svatan_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
463 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call float @atanf(float [[IN:%.*]])
465   entry:
466   br label %for.body
468   for.body:
469   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
470   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
471   %in = load float, ptr %in.gep, align 8
472   %call = tail call float @atanf(float %in)
473   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
474   store float %call, ptr %out.gep, align 4
475   %iv.next = add nuw nsw i64 %iv, 1
476   %exitcond = icmp eq i64 %iv.next, 1000
477   br i1 %exitcond, label %for.end, label %for.body
479   for.end:
480   ret void
483 declare double @atan2(double, double)
484 declare float @atan2f(float, float)
486 define void @atan2_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
487 ; SLEEF-NEON-LABEL: define void @atan2_f64
488 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
489 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2vv_atan2(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])
491 ; SLEEF-SVE-LABEL: define void @atan2_f64
492 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
493 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @_ZGVsMxvv_atan2(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x double> [[WIDE_MASKED_LOAD]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
495 ; SLEEF-SVE-NOPRED-LABEL: define void @atan2_f64
496 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
497 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @_ZGVsMxvv_atan2(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]], <vscale x 2 x i1> splat (i1 true))
498 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call double @atan2(double [[IN:%.*]], double [[IN]])
500 ; ARMPL-NEON-LABEL: define void @atan2_f64
501 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
502 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vatan2q_f64(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])
504 ; ARMPL-SVE-LABEL: define void @atan2_f64
505 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
506 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @armpl_svatan2_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x double> [[WIDE_MASKED_LOAD]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
508 ; ARMPL-SVE-NOPRED-LABEL: define void @atan2_f64
509 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
510 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @armpl_svatan2_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]], <vscale x 2 x i1> splat (i1 true))
511 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call double @atan2(double [[IN:%.*]], double [[IN]])
513   entry:
514   br label %for.body
516   for.body:
517   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
518   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
519   %in = load double, ptr %in.gep, align 8
520   %call = tail call double @atan2(double %in, double %in)
521   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
522   store double %call, ptr %out.gep, align 8
523   %iv.next = add nuw nsw i64 %iv, 1
524   %exitcond = icmp eq i64 %iv.next, 1000
525   br i1 %exitcond, label %for.end, label %for.body
527   for.end:
528   ret void
531 define void @atan2_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
532 ; SLEEF-NEON-LABEL: define void @atan2_f32
533 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
534 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4vv_atan2f(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])
536 ; SLEEF-SVE-LABEL: define void @atan2_f32
537 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
538 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @_ZGVsMxvv_atan2f(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x float> [[WIDE_MASKED_LOAD]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
540 ; SLEEF-SVE-NOPRED-LABEL: define void @atan2_f32
541 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
542 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @_ZGVsMxvv_atan2f(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]], <vscale x 4 x i1> splat (i1 true))
543 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call float @atan2f(float [[IN:%.*]], float [[IN]])
545 ; ARMPL-NEON-LABEL: define void @atan2_f32
546 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
547 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vatan2q_f32(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])
549 ; ARMPL-SVE-LABEL: define void @atan2_f32
550 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
551 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @armpl_svatan2_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x float> [[WIDE_MASKED_LOAD]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
553 ; ARMPL-SVE-NOPRED-LABEL: define void @atan2_f32
554 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
555 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @armpl_svatan2_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]], <vscale x 4 x i1> splat (i1 true))
556 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call float @atan2f(float [[IN:%.*]], float [[IN]])
558   entry:
559   br label %for.body
561   for.body:
562   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
563   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
564   %in = load float, ptr %in.gep, align 8
565   %call = tail call float @atan2f(float %in, float %in)
566   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
567   store float %call, ptr %out.gep, align 4
568   %iv.next = add nuw nsw i64 %iv, 1
569   %exitcond = icmp eq i64 %iv.next, 1000
570   br i1 %exitcond, label %for.end, label %for.body
572   for.end:
573   ret void
576 declare double @atanh(double)
577 declare float @atanhf(float)
579 define void @atanh_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
580 ; SLEEF-NEON-LABEL: define void @atanh_f64
581 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
582 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_atanh(<2 x double> [[WIDE_LOAD:%.*]])
584 ; SLEEF-SVE-LABEL: define void @atanh_f64
585 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
586 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_atanh(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
588 ; SLEEF-SVE-NOPRED-LABEL: define void @atanh_f64
589 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
590 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_atanh(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
591 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call double @atanh(double [[IN:%.*]])
593 ; ARMPL-NEON-LABEL: define void @atanh_f64
594 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
595 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vatanhq_f64(<2 x double> [[WIDE_LOAD:%.*]])
597 ; ARMPL-SVE-LABEL: define void @atanh_f64
598 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
599 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @armpl_svatanh_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
601 ; ARMPL-SVE-NOPRED-LABEL: define void @atanh_f64
602 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
603 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @armpl_svatanh_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
604 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call double @atanh(double [[IN:%.*]])
606   entry:
607   br label %for.body
609   for.body:
610   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
611   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
612   %in = load double, ptr %in.gep, align 8
613   %call = tail call double @atanh(double %in)
614   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
615   store double %call, ptr %out.gep, align 8
616   %iv.next = add nuw nsw i64 %iv, 1
617   %exitcond = icmp eq i64 %iv.next, 1000
618   br i1 %exitcond, label %for.end, label %for.body
620   for.end:
621   ret void
624 define void @atanh_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
625 ; SLEEF-NEON-LABEL: define void @atanh_f32
626 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
627 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_atanhf(<4 x float> [[WIDE_LOAD:%.*]])
629 ; SLEEF-SVE-LABEL: define void @atanh_f32
630 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
631 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_atanhf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
633 ; SLEEF-SVE-NOPRED-LABEL: define void @atanh_f32
634 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
635 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_atanhf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
636 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call float @atanhf(float [[IN:%.*]])
638 ; ARMPL-NEON-LABEL: define void @atanh_f32
639 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
640 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vatanhq_f32(<4 x float> [[WIDE_LOAD:%.*]])
642 ; ARMPL-SVE-LABEL: define void @atanh_f32
643 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
644 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @armpl_svatanh_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
646 ; ARMPL-SVE-NOPRED-LABEL: define void @atanh_f32
647 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
648 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @armpl_svatanh_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
649 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call float @atanhf(float [[IN:%.*]])
651   entry:
652   br label %for.body
654   for.body:
655   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
656   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
657   %in = load float, ptr %in.gep, align 8
658   %call = tail call float @atanhf(float %in)
659   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
660   store float %call, ptr %out.gep, align 4
661   %iv.next = add nuw nsw i64 %iv, 1
662   %exitcond = icmp eq i64 %iv.next, 1000
663   br i1 %exitcond, label %for.end, label %for.body
665   for.end:
666   ret void
669 declare double @cbrt(double)
670 declare float @cbrtf(float)
672 define void @cbrt_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
673 ; SLEEF-NEON-LABEL: define void @cbrt_f64
674 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
675 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_cbrt(<2 x double> [[WIDE_LOAD:%.*]])
677 ; SLEEF-SVE-LABEL: define void @cbrt_f64
678 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
679 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_cbrt(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
681 ; SLEEF-SVE-NOPRED-LABEL: define void @cbrt_f64
682 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
683 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_cbrt(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
684 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call double @cbrt(double [[IN:%.*]])
686 ; ARMPL-NEON-LABEL: define void @cbrt_f64
687 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
688 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vcbrtq_f64(<2 x double> [[WIDE_LOAD:%.*]])
690 ; ARMPL-SVE-LABEL: define void @cbrt_f64
691 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
692 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @armpl_svcbrt_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
694 ; ARMPL-SVE-NOPRED-LABEL: define void @cbrt_f64
695 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
696 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @armpl_svcbrt_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
697 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call double @cbrt(double [[IN:%.*]])
699   entry:
700   br label %for.body
702   for.body:
703   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
704   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
705   %in = load double, ptr %in.gep, align 8
706   %call = tail call double @cbrt(double %in)
707   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
708   store double %call, ptr %out.gep, align 8
709   %iv.next = add nuw nsw i64 %iv, 1
710   %exitcond = icmp eq i64 %iv.next, 1000
711   br i1 %exitcond, label %for.end, label %for.body
713   for.end:
714   ret void
717 define void @cbrt_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
718 ; SLEEF-NEON-LABEL: define void @cbrt_f32
719 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
720 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_cbrtf(<4 x float> [[WIDE_LOAD:%.*]])
722 ; SLEEF-SVE-LABEL: define void @cbrt_f32
723 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
724 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_cbrtf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
726 ; SLEEF-SVE-NOPRED-LABEL: define void @cbrt_f32
727 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
728 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_cbrtf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
729 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call float @cbrtf(float [[IN:%.*]])
731 ; ARMPL-NEON-LABEL: define void @cbrt_f32
732 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
733 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vcbrtq_f32(<4 x float> [[WIDE_LOAD:%.*]])
735 ; ARMPL-SVE-LABEL: define void @cbrt_f32
736 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
737 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @armpl_svcbrt_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
739 ; ARMPL-SVE-NOPRED-LABEL: define void @cbrt_f32
740 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
741 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @armpl_svcbrt_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
742 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call float @cbrtf(float [[IN:%.*]])
744   entry:
745   br label %for.body
747   for.body:
748   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
749   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
750   %in = load float, ptr %in.gep, align 8
751   %call = tail call float @cbrtf(float %in)
752   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
753   store float %call, ptr %out.gep, align 4
754   %iv.next = add nuw nsw i64 %iv, 1
755   %exitcond = icmp eq i64 %iv.next, 1000
756   br i1 %exitcond, label %for.end, label %for.body
758   for.end:
759   ret void
762 declare double @copysign(double, double)
763 declare float @copysignf(float, float)
765 define void @copysign_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
766 ; SLEEF-NEON-LABEL: define void @copysign_f64
767 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
768 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2vv_copysign(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])
770 ; SLEEF-SVE-LABEL: define void @copysign_f64
771 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
772 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @_ZGVsMxvv_copysign(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x double> [[WIDE_MASKED_LOAD]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
774 ; SLEEF-SVE-NOPRED-LABEL: define void @copysign_f64
775 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
776 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @_ZGVsMxvv_copysign(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]], <vscale x 2 x i1> splat (i1 true))
777 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call double @copysign(double [[IN:%.*]], double [[IN]])
779 ; ARMPL-NEON-LABEL: define void @copysign_f64
780 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
781 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vcopysignq_f64(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])
783 ; ARMPL-SVE-LABEL: define void @copysign_f64
784 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
785 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @armpl_svcopysign_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x double> [[WIDE_MASKED_LOAD]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
787 ; ARMPL-SVE-NOPRED-LABEL: define void @copysign_f64
788 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
789 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @armpl_svcopysign_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]], <vscale x 2 x i1> splat (i1 true))
790 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call double @copysign(double [[IN:%.*]], double [[IN]])
792   entry:
793   br label %for.body
795   for.body:
796   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
797   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
798   %in = load double, ptr %in.gep, align 8
799   %call = tail call double @copysign(double %in, double %in)
800   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
801   store double %call, ptr %out.gep, align 8
802   %iv.next = add nuw nsw i64 %iv, 1
803   %exitcond = icmp eq i64 %iv.next, 1000
804   br i1 %exitcond, label %for.end, label %for.body
806   for.end:
807   ret void
810 define void @copysign_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
811 ; SLEEF-NEON-LABEL: define void @copysign_f32
812 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
813 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4vv_copysignf(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])
815 ; SLEEF-SVE-LABEL: define void @copysign_f32
816 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
817 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @_ZGVsMxvv_copysignf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x float> [[WIDE_MASKED_LOAD]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
819 ; SLEEF-SVE-NOPRED-LABEL: define void @copysign_f32
820 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
821 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @_ZGVsMxvv_copysignf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]], <vscale x 4 x i1> splat (i1 true))
822 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call float @copysignf(float [[IN:%.*]], float [[IN]])
824 ; ARMPL-NEON-LABEL: define void @copysign_f32
825 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
826 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vcopysignq_f32(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])
828 ; ARMPL-SVE-LABEL: define void @copysign_f32
829 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
830 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @armpl_svcopysign_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x float> [[WIDE_MASKED_LOAD]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
832 ; ARMPL-SVE-NOPRED-LABEL: define void @copysign_f32
833 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
834 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @armpl_svcopysign_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]], <vscale x 4 x i1> splat (i1 true))
835 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call float @copysignf(float [[IN:%.*]], float [[IN]])
837   entry:
838   br label %for.body
840   for.body:
841   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
842   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
843   %in = load float, ptr %in.gep, align 8
844   %call = tail call float @copysignf(float %in, float %in)
845   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
846   store float %call, ptr %out.gep, align 4
847   %iv.next = add nuw nsw i64 %iv, 1
848   %exitcond = icmp eq i64 %iv.next, 1000
849   br i1 %exitcond, label %for.end, label %for.body
851   for.end:
852   ret void
855 declare double @cos(double)
856 declare float @cosf(float)
858 define void @cos_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
859 ; SLEEF-NEON-LABEL: define void @cos_f64
860 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
861 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_cos(<2 x double> [[WIDE_LOAD:%.*]])
863 ; SLEEF-SVE-LABEL: define void @cos_f64
864 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
865 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_cos(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
867 ; SLEEF-SVE-NOPRED-LABEL: define void @cos_f64
868 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
869 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_cos(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
870 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call double @cos(double [[IN:%.*]])
872 ; ARMPL-NEON-LABEL: define void @cos_f64
873 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
874 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vcosq_f64(<2 x double> [[WIDE_LOAD:%.*]])
876 ; ARMPL-SVE-LABEL: define void @cos_f64
877 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
878 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @armpl_svcos_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
880 ; ARMPL-SVE-NOPRED-LABEL: define void @cos_f64
881 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
882 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @armpl_svcos_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
883 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call double @cos(double [[IN:%.*]])
885   entry:
886   br label %for.body
888   for.body:
889   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
890   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
891   %in = load double, ptr %in.gep, align 8
892   %call = tail call double @cos(double %in)
893   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
894   store double %call, ptr %out.gep, align 8
895   %iv.next = add nuw nsw i64 %iv, 1
896   %exitcond = icmp eq i64 %iv.next, 1000
897   br i1 %exitcond, label %for.end, label %for.body
899   for.end:
900   ret void
903 define void @cos_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
904 ; SLEEF-NEON-LABEL: define void @cos_f32
905 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
906 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_cosf(<4 x float> [[WIDE_LOAD:%.*]])
908 ; SLEEF-SVE-LABEL: define void @cos_f32
909 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
910 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_cosf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
912 ; SLEEF-SVE-NOPRED-LABEL: define void @cos_f32
913 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
914 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_cosf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
915 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call float @cosf(float [[IN:%.*]])
917 ; ARMPL-NEON-LABEL: define void @cos_f32
918 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
919 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vcosq_f32(<4 x float> [[WIDE_LOAD:%.*]])
921 ; ARMPL-SVE-LABEL: define void @cos_f32
922 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
923 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @armpl_svcos_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
925 ; ARMPL-SVE-NOPRED-LABEL: define void @cos_f32
926 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
927 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @armpl_svcos_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
928 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call float @cosf(float [[IN:%.*]])
930   entry:
931   br label %for.body
933   for.body:
934   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
935   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
936   %in = load float, ptr %in.gep, align 8
937   %call = tail call float @cosf(float %in)
938   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
939   store float %call, ptr %out.gep, align 4
940   %iv.next = add nuw nsw i64 %iv, 1
941   %exitcond = icmp eq i64 %iv.next, 1000
942   br i1 %exitcond, label %for.end, label %for.body
944   for.end:
945   ret void
948 declare double @cosh(double)
949 declare float @coshf(float)
951 define void @cosh_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
952 ; SLEEF-NEON-LABEL: define void @cosh_f64
953 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
954 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_cosh(<2 x double> [[WIDE_LOAD:%.*]])
956 ; SLEEF-SVE-LABEL: define void @cosh_f64
957 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
958 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_cosh(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
960 ; SLEEF-SVE-NOPRED-LABEL: define void @cosh_f64
961 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
962 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_cosh(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
963 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call double @cosh(double [[IN:%.*]])
965 ; ARMPL-NEON-LABEL: define void @cosh_f64
966 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
967 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vcoshq_f64(<2 x double> [[WIDE_LOAD:%.*]])
969 ; ARMPL-SVE-LABEL: define void @cosh_f64
970 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
971 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @armpl_svcosh_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
973 ; ARMPL-SVE-NOPRED-LABEL: define void @cosh_f64
974 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
975 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @armpl_svcosh_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
976 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call double @cosh(double [[IN:%.*]])
978   entry:
979   br label %for.body
981   for.body:
982   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
983   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
984   %in = load double, ptr %in.gep, align 8
985   %call = tail call double @cosh(double %in)
986   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
987   store double %call, ptr %out.gep, align 8
988   %iv.next = add nuw nsw i64 %iv, 1
989   %exitcond = icmp eq i64 %iv.next, 1000
990   br i1 %exitcond, label %for.end, label %for.body
992   for.end:
993   ret void
996 define void @cosh_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
997 ; SLEEF-NEON-LABEL: define void @cosh_f32
998 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
999 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_coshf(<4 x float> [[WIDE_LOAD:%.*]])
1001 ; SLEEF-SVE-LABEL: define void @cosh_f32
1002 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1003 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_coshf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
1005 ; SLEEF-SVE-NOPRED-LABEL: define void @cosh_f32
1006 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1007 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_coshf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
1008 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call float @coshf(float [[IN:%.*]])
1010 ; ARMPL-NEON-LABEL: define void @cosh_f32
1011 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1012 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vcoshq_f32(<4 x float> [[WIDE_LOAD:%.*]])
1014 ; ARMPL-SVE-LABEL: define void @cosh_f32
1015 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1016 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @armpl_svcosh_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
1018 ; ARMPL-SVE-NOPRED-LABEL: define void @cosh_f32
1019 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1020 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @armpl_svcosh_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
1021 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call float @coshf(float [[IN:%.*]])
1023   entry:
1024   br label %for.body
1026   for.body:
1027   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1028   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
1029   %in = load float, ptr %in.gep, align 8
1030   %call = tail call float @coshf(float %in)
1031   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
1032   store float %call, ptr %out.gep, align 4
1033   %iv.next = add nuw nsw i64 %iv, 1
1034   %exitcond = icmp eq i64 %iv.next, 1000
1035   br i1 %exitcond, label %for.end, label %for.body
1037   for.end:
1038   ret void
1041 declare double @cospi(double)
1042 declare float @cospif(float)
1044 define void @cospi_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1045 ; SLEEF-NEON-LABEL: define void @cospi_f64
1046 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1047 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_cospi(<2 x double> [[WIDE_LOAD:%.*]])
1049 ; SLEEF-SVE-LABEL: define void @cospi_f64
1050 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1051 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_cospi(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
1053 ; SLEEF-SVE-NOPRED-LABEL: define void @cospi_f64
1054 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1055 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_cospi(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
1056 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call double @cospi(double [[IN:%.*]])
1058 ; ARMPL-NEON-LABEL: define void @cospi_f64
1059 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1060 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vcospiq_f64(<2 x double> [[WIDE_LOAD:%.*]])
1062 ; ARMPL-SVE-LABEL: define void @cospi_f64
1063 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1064 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @armpl_svcospi_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
1066 ; ARMPL-SVE-NOPRED-LABEL: define void @cospi_f64
1067 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1068 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @armpl_svcospi_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
1069 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call double @cospi(double [[IN:%.*]])
1071   entry:
1072   br label %for.body
1074   for.body:
1075   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1076   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
1077   %in = load double, ptr %in.gep, align 8
1078   %call = tail call double @cospi(double %in)
1079   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
1080   store double %call, ptr %out.gep, align 8
1081   %iv.next = add nuw nsw i64 %iv, 1
1082   %exitcond = icmp eq i64 %iv.next, 1000
1083   br i1 %exitcond, label %for.end, label %for.body
1085   for.end:
1086   ret void
1089 define void @cospi_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1090 ; SLEEF-NEON-LABEL: define void @cospi_f32
1091 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1092 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_cospif(<4 x float> [[WIDE_LOAD:%.*]])
1094 ; SLEEF-SVE-LABEL: define void @cospi_f32
1095 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1096 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_cospif(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
1098 ; SLEEF-SVE-NOPRED-LABEL: define void @cospi_f32
1099 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1100 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_cospif(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
1101 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call float @cospif(float [[IN:%.*]])
1103 ; ARMPL-NEON-LABEL: define void @cospi_f32
1104 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1105 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vcospiq_f32(<4 x float> [[WIDE_LOAD:%.*]])
1107 ; ARMPL-SVE-LABEL: define void @cospi_f32
1108 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1109 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @armpl_svcospi_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
1111 ; ARMPL-SVE-NOPRED-LABEL: define void @cospi_f32
1112 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1113 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @armpl_svcospi_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
1114 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call float @cospif(float [[IN:%.*]])
1116   entry:
1117   br label %for.body
1119   for.body:
1120   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1121   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
1122   %in = load float, ptr %in.gep, align 8
1123   %call = tail call float @cospif(float %in)
1124   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
1125   store float %call, ptr %out.gep, align 4
1126   %iv.next = add nuw nsw i64 %iv, 1
1127   %exitcond = icmp eq i64 %iv.next, 1000
1128   br i1 %exitcond, label %for.end, label %for.body
1130   for.end:
1131   ret void
1134 declare double @erf(double)
1135 declare float @erff(float)
1137 define void @erf_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1138 ; SLEEF-NEON-LABEL: define void @erf_f64
1139 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1140 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_erf(<2 x double> [[WIDE_LOAD:%.*]])
1142 ; SLEEF-SVE-LABEL: define void @erf_f64
1143 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1144 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_erf(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
1146 ; SLEEF-SVE-NOPRED-LABEL: define void @erf_f64
1147 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1148 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_erf(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
1149 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call double @erf(double [[IN:%.*]])
1151 ; ARMPL-NEON-LABEL: define void @erf_f64
1152 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1153 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_verfq_f64(<2 x double> [[WIDE_LOAD:%.*]])
1155 ; ARMPL-SVE-LABEL: define void @erf_f64
1156 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1157 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @armpl_sverf_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
1159 ; ARMPL-SVE-NOPRED-LABEL: define void @erf_f64
1160 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1161 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @armpl_sverf_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
1162 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call double @erf(double [[IN:%.*]])
1164   entry:
1165   br label %for.body
1167   for.body:
1168   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1169   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
1170   %in = load double, ptr %in.gep, align 8
1171   %call = tail call double @erf(double %in)
1172   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
1173   store double %call, ptr %out.gep, align 8
1174   %iv.next = add nuw nsw i64 %iv, 1
1175   %exitcond = icmp eq i64 %iv.next, 1000
1176   br i1 %exitcond, label %for.end, label %for.body
1178   for.end:
1179   ret void
1182 define void @erf_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1183 ; SLEEF-NEON-LABEL: define void @erf_f32
1184 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1185 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_erff(<4 x float> [[WIDE_LOAD:%.*]])
1187 ; SLEEF-SVE-LABEL: define void @erf_f32
1188 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1189 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_erff(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
1191 ; SLEEF-SVE-NOPRED-LABEL: define void @erf_f32
1192 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1193 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_erff(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
1194 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call float @erff(float [[IN:%.*]])
1196 ; ARMPL-NEON-LABEL: define void @erf_f32
1197 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1198 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_verfq_f32(<4 x float> [[WIDE_LOAD:%.*]])
1200 ; ARMPL-SVE-LABEL: define void @erf_f32
1201 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1202 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @armpl_sverf_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
1204 ; ARMPL-SVE-NOPRED-LABEL: define void @erf_f32
1205 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1206 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @armpl_sverf_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
1207 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call float @erff(float [[IN:%.*]])
1209   entry:
1210   br label %for.body
1212   for.body:
1213   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1214   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
1215   %in = load float, ptr %in.gep, align 8
1216   %call = tail call float @erff(float %in)
1217   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
1218   store float %call, ptr %out.gep, align 4
1219   %iv.next = add nuw nsw i64 %iv, 1
1220   %exitcond = icmp eq i64 %iv.next, 1000
1221   br i1 %exitcond, label %for.end, label %for.body
1223   for.end:
1224   ret void
1227 declare double @erfc(double)
1228 declare float @erfcf(float)
1230 define void @erfc_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1231 ; SLEEF-NEON-LABEL: define void @erfc_f64
1232 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1233 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_erfc(<2 x double> [[WIDE_LOAD:%.*]])
1235 ; SLEEF-SVE-LABEL: define void @erfc_f64
1236 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1237 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_erfc(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
1239 ; SLEEF-SVE-NOPRED-LABEL: define void @erfc_f64
1240 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1241 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_erfc(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
1242 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call double @erfc(double [[IN:%.*]])
1244 ; ARMPL-NEON-LABEL: define void @erfc_f64
1245 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1246 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_verfcq_f64(<2 x double> [[WIDE_LOAD:%.*]])
1248 ; ARMPL-SVE-LABEL: define void @erfc_f64
1249 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1250 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @armpl_sverfc_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
1252 ; ARMPL-SVE-NOPRED-LABEL: define void @erfc_f64
1253 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1254 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @armpl_sverfc_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
1255 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call double @erfc(double [[IN:%.*]])
1257   entry:
1258   br label %for.body
1260   for.body:
1261   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1262   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
1263   %in = load double, ptr %in.gep, align 8
1264   %call = tail call double @erfc(double %in)
1265   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
1266   store double %call, ptr %out.gep, align 8
1267   %iv.next = add nuw nsw i64 %iv, 1
1268   %exitcond = icmp eq i64 %iv.next, 1000
1269   br i1 %exitcond, label %for.end, label %for.body
1271   for.end:
1272   ret void
1275 define void @erfc_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1276 ; SLEEF-NEON-LABEL: define void @erfc_f32
1277 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1278 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_erfcf(<4 x float> [[WIDE_LOAD:%.*]])
1280 ; SLEEF-SVE-LABEL: define void @erfc_f32
1281 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1282 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_erfcf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
1284 ; SLEEF-SVE-NOPRED-LABEL: define void @erfc_f32
1285 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1286 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_erfcf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
1287 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call float @erfcf(float [[IN:%.*]])
1289 ; ARMPL-NEON-LABEL: define void @erfc_f32
1290 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1291 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_verfcq_f32(<4 x float> [[WIDE_LOAD:%.*]])
1293 ; ARMPL-SVE-LABEL: define void @erfc_f32
1294 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1295 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @armpl_sverfc_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
1297 ; ARMPL-SVE-NOPRED-LABEL: define void @erfc_f32
1298 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1299 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @armpl_sverfc_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
1300 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call float @erfcf(float [[IN:%.*]])
1302   entry:
1303   br label %for.body
1305   for.body:
1306   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1307   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
1308   %in = load float, ptr %in.gep, align 8
1309   %call = tail call float @erfcf(float %in)
1310   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
1311   store float %call, ptr %out.gep, align 4
1312   %iv.next = add nuw nsw i64 %iv, 1
1313   %exitcond = icmp eq i64 %iv.next, 1000
1314   br i1 %exitcond, label %for.end, label %for.body
1316   for.end:
1317   ret void
1320 declare double @exp(double)
1321 declare float @expf(float)
1323 define void @exp_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1324 ; SLEEF-NEON-LABEL: define void @exp_f64
1325 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1326 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_exp(<2 x double> [[WIDE_LOAD:%.*]])
1328 ; SLEEF-SVE-LABEL: define void @exp_f64
1329 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1330 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_exp(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
1332 ; SLEEF-SVE-NOPRED-LABEL: define void @exp_f64
1333 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1334 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_exp(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
1335 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call double @exp(double [[IN:%.*]])
1337 ; ARMPL-NEON-LABEL: define void @exp_f64
1338 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1339 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vexpq_f64(<2 x double> [[WIDE_LOAD:%.*]])
1341 ; ARMPL-SVE-LABEL: define void @exp_f64
1342 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1343 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @armpl_svexp_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
1345 ; ARMPL-SVE-NOPRED-LABEL: define void @exp_f64
1346 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1347 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @armpl_svexp_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
1348 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call double @exp(double [[IN:%.*]])
1350   entry:
1351   br label %for.body
1353   for.body:
1354   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1355   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
1356   %in = load double, ptr %in.gep, align 8
1357   %call = tail call double @exp(double %in)
1358   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
1359   store double %call, ptr %out.gep, align 8
1360   %iv.next = add nuw nsw i64 %iv, 1
1361   %exitcond = icmp eq i64 %iv.next, 1000
1362   br i1 %exitcond, label %for.end, label %for.body
1364   for.end:
1365   ret void
1368 define void @exp_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1369 ; SLEEF-NEON-LABEL: define void @exp_f32
1370 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1371 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_expf(<4 x float> [[WIDE_LOAD:%.*]])
1373 ; SLEEF-SVE-LABEL: define void @exp_f32
1374 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1375 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_expf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
1377 ; SLEEF-SVE-NOPRED-LABEL: define void @exp_f32
1378 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1379 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_expf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
1380 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call float @expf(float [[IN:%.*]])
1382 ; ARMPL-NEON-LABEL: define void @exp_f32
1383 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1384 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vexpq_f32(<4 x float> [[WIDE_LOAD:%.*]])
1386 ; ARMPL-SVE-LABEL: define void @exp_f32
1387 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1388 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @armpl_svexp_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
1390 ; ARMPL-SVE-NOPRED-LABEL: define void @exp_f32
1391 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1392 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @armpl_svexp_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
1393 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call float @expf(float [[IN:%.*]])
1395   entry:
1396   br label %for.body
1398   for.body:
1399   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1400   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
1401   %in = load float, ptr %in.gep, align 8
1402   %call = tail call float @expf(float %in)
1403   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
1404   store float %call, ptr %out.gep, align 4
1405   %iv.next = add nuw nsw i64 %iv, 1
1406   %exitcond = icmp eq i64 %iv.next, 1000
1407   br i1 %exitcond, label %for.end, label %for.body
1409   for.end:
1410   ret void
1413 declare double @exp10(double)
1414 declare float @exp10f(float)
1416 define void @exp10_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1417 ; SLEEF-NEON-LABEL: define void @exp10_f64
1418 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1419 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_exp10(<2 x double> [[WIDE_LOAD:%.*]])
1421 ; SLEEF-SVE-LABEL: define void @exp10_f64
1422 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1423 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_exp10(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
1425 ; SLEEF-SVE-NOPRED-LABEL: define void @exp10_f64
1426 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1427 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_exp10(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
1428 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call double @exp10(double [[IN:%.*]])
1430 ; ARMPL-NEON-LABEL: define void @exp10_f64
1431 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1432 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vexp10q_f64(<2 x double> [[WIDE_LOAD:%.*]])
1434 ; ARMPL-SVE-LABEL: define void @exp10_f64
1435 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1436 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @armpl_svexp10_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
1438 ; ARMPL-SVE-NOPRED-LABEL: define void @exp10_f64
1439 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1440 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @armpl_svexp10_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
1441 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call double @exp10(double [[IN:%.*]])
1443   entry:
1444   br label %for.body
1446   for.body:
1447   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1448   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
1449   %in = load double, ptr %in.gep, align 8
1450   %call = tail call double @exp10(double %in)
1451   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
1452   store double %call, ptr %out.gep, align 8
1453   %iv.next = add nuw nsw i64 %iv, 1
1454   %exitcond = icmp eq i64 %iv.next, 1000
1455   br i1 %exitcond, label %for.end, label %for.body
1457   for.end:
1458   ret void
1461 define void @exp10_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1462 ; SLEEF-NEON-LABEL: define void @exp10_f32
1463 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1464 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_exp10f(<4 x float> [[WIDE_LOAD:%.*]])
1466 ; SLEEF-SVE-LABEL: define void @exp10_f32
1467 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1468 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_exp10f(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
1470 ; SLEEF-SVE-NOPRED-LABEL: define void @exp10_f32
1471 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1472 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_exp10f(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
1473 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call float @exp10f(float [[IN:%.*]])
1475 ; ARMPL-NEON-LABEL: define void @exp10_f32
1476 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1477 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vexp10q_f32(<4 x float> [[WIDE_LOAD:%.*]])
1479 ; ARMPL-SVE-LABEL: define void @exp10_f32
1480 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1481 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @armpl_svexp10_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
1483 ; ARMPL-SVE-NOPRED-LABEL: define void @exp10_f32
1484 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1485 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @armpl_svexp10_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
1486 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call float @exp10f(float [[IN:%.*]])
1488   entry:
1489   br label %for.body
1491   for.body:
1492   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1493   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
1494   %in = load float, ptr %in.gep, align 8
1495   %call = tail call float @exp10f(float %in)
1496   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
1497   store float %call, ptr %out.gep, align 4
1498   %iv.next = add nuw nsw i64 %iv, 1
1499   %exitcond = icmp eq i64 %iv.next, 1000
1500   br i1 %exitcond, label %for.end, label %for.body
1502   for.end:
1503   ret void
1506 declare double @exp2(double)
1507 declare float @exp2f(float)
1509 define void @exp2_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1510 ; SLEEF-NEON-LABEL: define void @exp2_f64
1511 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1512 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_exp2(<2 x double> [[WIDE_LOAD:%.*]])
1514 ; SLEEF-SVE-LABEL: define void @exp2_f64
1515 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1516 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_exp2(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
1518 ; SLEEF-SVE-NOPRED-LABEL: define void @exp2_f64
1519 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1520 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_exp2(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
1521 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call double @exp2(double [[IN:%.*]])
1523 ; ARMPL-NEON-LABEL: define void @exp2_f64
1524 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1525 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vexp2q_f64(<2 x double> [[WIDE_LOAD:%.*]])
1527 ; ARMPL-SVE-LABEL: define void @exp2_f64
1528 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1529 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @armpl_svexp2_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
1531 ; ARMPL-SVE-NOPRED-LABEL: define void @exp2_f64
1532 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1533 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @armpl_svexp2_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
1534 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call double @exp2(double [[IN:%.*]])
1536   entry:
1537   br label %for.body
1539   for.body:
1540   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1541   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
1542   %in = load double, ptr %in.gep, align 8
1543   %call = tail call double @exp2(double %in)
1544   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
1545   store double %call, ptr %out.gep, align 8
1546   %iv.next = add nuw nsw i64 %iv, 1
1547   %exitcond = icmp eq i64 %iv.next, 1000
1548   br i1 %exitcond, label %for.end, label %for.body
1550   for.end:
1551   ret void
1554 define void @exp2_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1555 ; SLEEF-NEON-LABEL: define void @exp2_f32
1556 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1557 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_exp2f(<4 x float> [[WIDE_LOAD:%.*]])
1559 ; SLEEF-SVE-LABEL: define void @exp2_f32
1560 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1561 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_exp2f(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
1563 ; SLEEF-SVE-NOPRED-LABEL: define void @exp2_f32
1564 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1565 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_exp2f(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
1566 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call float @exp2f(float [[IN:%.*]])
1568 ; ARMPL-NEON-LABEL: define void @exp2_f32
1569 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1570 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vexp2q_f32(<4 x float> [[WIDE_LOAD:%.*]])
1572 ; ARMPL-SVE-LABEL: define void @exp2_f32
1573 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1574 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @armpl_svexp2_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
1576 ; ARMPL-SVE-NOPRED-LABEL: define void @exp2_f32
1577 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1578 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @armpl_svexp2_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
1579 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call float @exp2f(float [[IN:%.*]])
1581   entry:
1582   br label %for.body
1584   for.body:
1585   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1586   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
1587   %in = load float, ptr %in.gep, align 8
1588   %call = tail call float @exp2f(float %in)
1589   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
1590   store float %call, ptr %out.gep, align 4
1591   %iv.next = add nuw nsw i64 %iv, 1
1592   %exitcond = icmp eq i64 %iv.next, 1000
1593   br i1 %exitcond, label %for.end, label %for.body
1595   for.end:
1596   ret void
1599 declare double @expm1(double)
1600 declare float @expm1f(float)
1602 define void @expm1_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1603 ; SLEEF-NEON-LABEL: define void @expm1_f64
1604 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1605 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_expm1(<2 x double> [[WIDE_LOAD:%.*]])
1607 ; SLEEF-SVE-LABEL: define void @expm1_f64
1608 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1609 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_expm1(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
1611 ; SLEEF-SVE-NOPRED-LABEL: define void @expm1_f64
1612 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1613 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_expm1(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
1614 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call double @expm1(double [[IN:%.*]])
1616 ; ARMPL-NEON-LABEL: define void @expm1_f64
1617 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1618 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vexpm1q_f64(<2 x double> [[WIDE_LOAD:%.*]])
1620 ; ARMPL-SVE-LABEL: define void @expm1_f64
1621 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1622 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @armpl_svexpm1_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
1624 ; ARMPL-SVE-NOPRED-LABEL: define void @expm1_f64
1625 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1626 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @armpl_svexpm1_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
1627 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call double @expm1(double [[IN:%.*]])
1629   entry:
1630   br label %for.body
1632   for.body:
1633   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1634   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
1635   %in = load double, ptr %in.gep, align 8
1636   %call = tail call double @expm1(double %in)
1637   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
1638   store double %call, ptr %out.gep, align 8
1639   %iv.next = add nuw nsw i64 %iv, 1
1640   %exitcond = icmp eq i64 %iv.next, 1000
1641   br i1 %exitcond, label %for.end, label %for.body
1643   for.end:
1644   ret void
1647 define void @expm1_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1648 ; SLEEF-NEON-LABEL: define void @expm1_f32
1649 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1650 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_expm1f(<4 x float> [[WIDE_LOAD:%.*]])
1652 ; SLEEF-SVE-LABEL: define void @expm1_f32
1653 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1654 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_expm1f(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
1656 ; SLEEF-SVE-NOPRED-LABEL: define void @expm1_f32
1657 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1658 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_expm1f(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
1659 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call float @expm1f(float [[IN:%.*]])
1661 ; ARMPL-NEON-LABEL: define void @expm1_f32
1662 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1663 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vexpm1q_f32(<4 x float> [[WIDE_LOAD:%.*]])
1665 ; ARMPL-SVE-LABEL: define void @expm1_f32
1666 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1667 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @armpl_svexpm1_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
1669 ; ARMPL-SVE-NOPRED-LABEL: define void @expm1_f32
1670 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1671 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @armpl_svexpm1_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
1672 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call float @expm1f(float [[IN:%.*]])
1674   entry:
1675   br label %for.body
1677   for.body:
1678   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1679   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
1680   %in = load float, ptr %in.gep, align 8
1681   %call = tail call float @expm1f(float %in)
1682   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
1683   store float %call, ptr %out.gep, align 4
1684   %iv.next = add nuw nsw i64 %iv, 1
1685   %exitcond = icmp eq i64 %iv.next, 1000
1686   br i1 %exitcond, label %for.end, label %for.body
1688   for.end:
1689   ret void
1692 declare double @fdim(double, double)
1693 declare float @fdimf(float, float)
1695 define void @fdim_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1696 ; SLEEF-NEON-LABEL: define void @fdim_f64
1697 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1698 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2vv_fdim(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])
1700 ; SLEEF-SVE-LABEL: define void @fdim_f64
1701 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1702 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @_ZGVsMxvv_fdim(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x double> [[WIDE_MASKED_LOAD]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
1704 ; SLEEF-SVE-NOPRED-LABEL: define void @fdim_f64
1705 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1706 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @_ZGVsMxvv_fdim(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]], <vscale x 2 x i1> splat (i1 true))
1707 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call double @fdim(double [[IN:%.*]], double [[IN]])
1709 ; ARMPL-NEON-LABEL: define void @fdim_f64
1710 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1711 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vfdimq_f64(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])
1713 ; ARMPL-SVE-LABEL: define void @fdim_f64
1714 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1715 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @armpl_svfdim_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x double> [[WIDE_MASKED_LOAD]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
1717 ; ARMPL-SVE-NOPRED-LABEL: define void @fdim_f64
1718 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1719 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @armpl_svfdim_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]], <vscale x 2 x i1> splat (i1 true))
1720 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call double @fdim(double [[IN:%.*]], double [[IN]])
1722   entry:
1723   br label %for.body
1725   for.body:
1726   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1727   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
1728   %in = load double, ptr %in.gep, align 8
1729   %call = tail call double @fdim(double %in, double %in)
1730   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
1731   store double %call, ptr %out.gep, align 8
1732   %iv.next = add nuw nsw i64 %iv, 1
1733   %exitcond = icmp eq i64 %iv.next, 1000
1734   br i1 %exitcond, label %for.end, label %for.body
1736   for.end:
1737   ret void
1740 define void @fdim_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1741 ; SLEEF-NEON-LABEL: define void @fdim_f32
1742 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1743 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4vv_fdimf(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])
1745 ; SLEEF-SVE-LABEL: define void @fdim_f32
1746 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1747 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @_ZGVsMxvv_fdimf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x float> [[WIDE_MASKED_LOAD]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
1749 ; SLEEF-SVE-NOPRED-LABEL: define void @fdim_f32
1750 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1751 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @_ZGVsMxvv_fdimf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]], <vscale x 4 x i1> splat (i1 true))
1752 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call float @fdimf(float [[IN:%.*]], float [[IN]])
1754 ; ARMPL-NEON-LABEL: define void @fdim_f32
1755 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1756 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vfdimq_f32(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])
1758 ; ARMPL-SVE-LABEL: define void @fdim_f32
1759 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1760 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @armpl_svfdim_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x float> [[WIDE_MASKED_LOAD]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
1762 ; ARMPL-SVE-NOPRED-LABEL: define void @fdim_f32
1763 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1764 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @armpl_svfdim_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]], <vscale x 4 x i1> splat (i1 true))
1765 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call float @fdimf(float [[IN:%.*]], float [[IN]])
1767   entry:
1768   br label %for.body
1770   for.body:
1771   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1772   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
1773   %in = load float, ptr %in.gep, align 8
1774   %call = tail call float @fdimf(float %in, float %in)
1775   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
1776   store float %call, ptr %out.gep, align 4
1777   %iv.next = add nuw nsw i64 %iv, 1
1778   %exitcond = icmp eq i64 %iv.next, 1000
1779   br i1 %exitcond, label %for.end, label %for.body
1781   for.end:
1782   ret void
1785 declare double @fma(double, double, double)
1786 declare float @fmaf(float, float, float)
1788 define void @fma_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1789 ; SLEEF-NEON-LABEL: define void @fma_f64
1790 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1791 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2vvv_fma(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]], <2 x double> [[WIDE_LOAD]])
1793 ; SLEEF-SVE-LABEL: define void @fma_f64
1794 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1795 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @_ZGVsMxvvv_fma(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x double> [[WIDE_MASKED_LOAD]], <vscale x 2 x double> [[WIDE_MASKED_LOAD]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
1797 ; SLEEF-SVE-NOPRED-LABEL: define void @fma_f64
1798 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1799 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @_ZGVsMxvvv_fma(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]], <vscale x 2 x double> [[WIDE_LOAD]], <vscale x 2 x i1> splat (i1 true))
1800 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call double @fma(double [[IN:%.*]], double [[IN]], double [[IN]])
1802 ; ARMPL-NEON-LABEL: define void @fma_f64
1803 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1804 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vfmaq_f64(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]], <2 x double> [[WIDE_LOAD]])
1806 ; ARMPL-SVE-LABEL: define void @fma_f64
1807 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1808 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @armpl_svfma_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x double> [[WIDE_MASKED_LOAD]], <vscale x 2 x double> [[WIDE_MASKED_LOAD]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
1810 ; ARMPL-SVE-NOPRED-LABEL: define void @fma_f64
1811 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1812 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @armpl_svfma_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]], <vscale x 2 x double> [[WIDE_LOAD]], <vscale x 2 x i1> splat (i1 true))
1813 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call double @fma(double [[IN:%.*]], double [[IN]], double [[IN]])
1815   entry:
1816   br label %for.body
1818   for.body:
1819   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1820   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
1821   %in = load double, ptr %in.gep, align 8
1822   %call = tail call double @fma(double %in, double %in, double %in)
1823   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
1824   store double %call, ptr %out.gep, align 8
1825   %iv.next = add nuw nsw i64 %iv, 1
1826   %exitcond = icmp eq i64 %iv.next, 1000
1827   br i1 %exitcond, label %for.end, label %for.body
1829   for.end:
1830   ret void
1833 define void @fma_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1834 ; SLEEF-NEON-LABEL: define void @fma_f32
1835 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1836 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4vvv_fmaf(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]], <4 x float> [[WIDE_LOAD]])
1838 ; SLEEF-SVE-LABEL: define void @fma_f32
1839 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1840 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @_ZGVsMxvvv_fmaf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x float> [[WIDE_MASKED_LOAD]], <vscale x 4 x float> [[WIDE_MASKED_LOAD]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
1842 ; SLEEF-SVE-NOPRED-LABEL: define void @fma_f32
1843 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1844 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @_ZGVsMxvvv_fmaf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]], <vscale x 4 x float> [[WIDE_LOAD]], <vscale x 4 x i1> splat (i1 true))
1845 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call float @fmaf(float [[IN:%.*]], float [[IN]], float [[IN]])
1847 ; ARMPL-NEON-LABEL: define void @fma_f32
1848 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1849 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vfmaq_f32(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]], <4 x float> [[WIDE_LOAD]])
1851 ; ARMPL-SVE-LABEL: define void @fma_f32
1852 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1853 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @armpl_svfma_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x float> [[WIDE_MASKED_LOAD]], <vscale x 4 x float> [[WIDE_MASKED_LOAD]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
1855 ; ARMPL-SVE-NOPRED-LABEL: define void @fma_f32
1856 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1857 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @armpl_svfma_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]], <vscale x 4 x float> [[WIDE_LOAD]], <vscale x 4 x i1> splat (i1 true))
1858 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call float @fmaf(float [[IN:%.*]], float [[IN]], float [[IN]])
1860   entry:
1861   br label %for.body
1863   for.body:
1864   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1865   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
1866   %in = load float, ptr %in.gep, align 8
1867   %call = tail call float @fmaf(float %in, float %in, float %in)
1868   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
1869   store float %call, ptr %out.gep, align 4
1870   %iv.next = add nuw nsw i64 %iv, 1
1871   %exitcond = icmp eq i64 %iv.next, 1000
1872   br i1 %exitcond, label %for.end, label %for.body
1874   for.end:
1875   ret void
1878 declare double @fmax(double, double)
1879 declare float @fmaxf(float, float)
1881 define void @fmax_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1882 ; SLEEF-NEON-LABEL: define void @fmax_f64
1883 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1884 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2vv_fmax(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])
1886 ; SLEEF-SVE-LABEL: define void @fmax_f64
1887 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1888 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @_ZGVsMxvv_fmax(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x double> [[WIDE_MASKED_LOAD]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
1890 ; SLEEF-SVE-NOPRED-LABEL: define void @fmax_f64
1891 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1892 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @_ZGVsMxvv_fmax(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]], <vscale x 2 x i1> splat (i1 true))
1893 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call double @fmax(double [[IN:%.*]], double [[IN]])
1895 ; ARMPL-NEON-LABEL: define void @fmax_f64
1896 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1897 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vfmaxq_f64(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])
1899 ; ARMPL-SVE-LABEL: define void @fmax_f64
1900 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1901 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @armpl_svfmax_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x double> [[WIDE_MASKED_LOAD]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
1903 ; ARMPL-SVE-NOPRED-LABEL: define void @fmax_f64
1904 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1905 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @armpl_svfmax_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]], <vscale x 2 x i1> splat (i1 true))
1906 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call double @fmax(double [[IN:%.*]], double [[IN]])
1908   entry:
1909   br label %for.body
1911   for.body:
1912   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1913   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
1914   %in = load double, ptr %in.gep, align 8
1915   %call = tail call double @fmax(double %in, double %in)
1916   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
1917   store double %call, ptr %out.gep, align 8
1918   %iv.next = add nuw nsw i64 %iv, 1
1919   %exitcond = icmp eq i64 %iv.next, 1000
1920   br i1 %exitcond, label %for.end, label %for.body
1922   for.end:
1923   ret void
1926 define void @fmax_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1927 ; SLEEF-NEON-LABEL: define void @fmax_f32
1928 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1929 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4vv_fmaxf(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])
1931 ; SLEEF-SVE-LABEL: define void @fmax_f32
1932 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1933 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @_ZGVsMxvv_fmaxf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x float> [[WIDE_MASKED_LOAD]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
1935 ; SLEEF-SVE-NOPRED-LABEL: define void @fmax_f32
1936 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1937 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @_ZGVsMxvv_fmaxf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]], <vscale x 4 x i1> splat (i1 true))
1938 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call float @fmaxf(float [[IN:%.*]], float [[IN]])
1940 ; ARMPL-NEON-LABEL: define void @fmax_f32
1941 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1942 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vfmaxq_f32(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])
1944 ; ARMPL-SVE-LABEL: define void @fmax_f32
1945 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1946 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @armpl_svfmax_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x float> [[WIDE_MASKED_LOAD]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
1948 ; ARMPL-SVE-NOPRED-LABEL: define void @fmax_f32
1949 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1950 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @armpl_svfmax_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]], <vscale x 4 x i1> splat (i1 true))
1951 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call float @fmaxf(float [[IN:%.*]], float [[IN]])
1953   entry:
1954   br label %for.body
1956   for.body:
1957   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1958   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
1959   %in = load float, ptr %in.gep, align 8
1960   %call = tail call float @fmaxf(float %in, float %in)
1961   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
1962   store float %call, ptr %out.gep, align 4
1963   %iv.next = add nuw nsw i64 %iv, 1
1964   %exitcond = icmp eq i64 %iv.next, 1000
1965   br i1 %exitcond, label %for.end, label %for.body
1967   for.end:
1968   ret void
1971 declare double @fmin(double, double)
1972 declare float @fminf(float, float)
1974 define void @fmin_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1975 ; SLEEF-NEON-LABEL: define void @fmin_f64
1976 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1977 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2vv_fmin(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])
1979 ; SLEEF-SVE-LABEL: define void @fmin_f64
1980 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1981 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @_ZGVsMxvv_fmin(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x double> [[WIDE_MASKED_LOAD]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
1983 ; SLEEF-SVE-NOPRED-LABEL: define void @fmin_f64
1984 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1985 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @_ZGVsMxvv_fmin(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]], <vscale x 2 x i1> splat (i1 true))
1986 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call double @fmin(double [[IN:%.*]], double [[IN]])
1988 ; ARMPL-NEON-LABEL: define void @fmin_f64
1989 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1990 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vfminq_f64(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])
1992 ; ARMPL-SVE-LABEL: define void @fmin_f64
1993 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1994 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @armpl_svfmin_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x double> [[WIDE_MASKED_LOAD]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
1996 ; ARMPL-SVE-NOPRED-LABEL: define void @fmin_f64
1997 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1998 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @armpl_svfmin_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]], <vscale x 2 x i1> splat (i1 true))
1999 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call double @fmin(double [[IN:%.*]], double [[IN]])
2001   entry:
2002   br label %for.body
2004   for.body:
2005   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2006   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
2007   %in = load double, ptr %in.gep, align 8
2008   %call = tail call double @fmin(double %in, double %in)
2009   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
2010   store double %call, ptr %out.gep, align 8
2011   %iv.next = add nuw nsw i64 %iv, 1
2012   %exitcond = icmp eq i64 %iv.next, 1000
2013   br i1 %exitcond, label %for.end, label %for.body
2015   for.end:
2016   ret void
2019 define void @fmin_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2020 ; SLEEF-NEON-LABEL: define void @fmin_f32
2021 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2022 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4vv_fminf(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])
2024 ; SLEEF-SVE-LABEL: define void @fmin_f32
2025 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2026 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @_ZGVsMxvv_fminf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x float> [[WIDE_MASKED_LOAD]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
2028 ; SLEEF-SVE-NOPRED-LABEL: define void @fmin_f32
2029 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2030 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @_ZGVsMxvv_fminf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]], <vscale x 4 x i1> splat (i1 true))
2031 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call float @fminf(float [[IN:%.*]], float [[IN]])
2033 ; ARMPL-NEON-LABEL: define void @fmin_f32
2034 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2035 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vfminq_f32(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])
2037 ; ARMPL-SVE-LABEL: define void @fmin_f32
2038 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2039 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @armpl_svfmin_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x float> [[WIDE_MASKED_LOAD]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
2041 ; ARMPL-SVE-NOPRED-LABEL: define void @fmin_f32
2042 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2043 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @armpl_svfmin_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]], <vscale x 4 x i1> splat (i1 true))
2044 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call float @fminf(float [[IN:%.*]], float [[IN]])
2046   entry:
2047   br label %for.body
2049   for.body:
2050   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2051   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
2052   %in = load float, ptr %in.gep, align 8
2053   %call = tail call float @fminf(float %in, float %in)
2054   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
2055   store float %call, ptr %out.gep, align 4
2056   %iv.next = add nuw nsw i64 %iv, 1
2057   %exitcond = icmp eq i64 %iv.next, 1000
2058   br i1 %exitcond, label %for.end, label %for.body
2060   for.end:
2061   ret void
2064 declare double @fmod(double, double)
2065 declare float @fmodf(float, float)
2067 define void @fmod_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2068 ; SLEEF-NEON-LABEL: define void @fmod_f64
2069 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2070 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2vv_fmod(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])
2072 ; SLEEF-SVE-LABEL: define void @fmod_f64
2073 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2074 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @_ZGVsMxvv_fmod(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x double> [[WIDE_MASKED_LOAD]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
2076 ; SLEEF-SVE-NOPRED-LABEL: define void @fmod_f64
2077 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2078 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @_ZGVsMxvv_fmod(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]], <vscale x 2 x i1> splat (i1 true))
2079 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call double @fmod(double [[IN:%.*]], double [[IN]])
2081 ; ARMPL-NEON-LABEL: define void @fmod_f64
2082 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2083 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vfmodq_f64(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])
2085 ; ARMPL-SVE-LABEL: define void @fmod_f64
2086 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2087 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @armpl_svfmod_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x double> [[WIDE_MASKED_LOAD]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
2089 ; ARMPL-SVE-NOPRED-LABEL: define void @fmod_f64
2090 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2091 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @armpl_svfmod_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]], <vscale x 2 x i1> splat (i1 true))
2092 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call double @fmod(double [[IN:%.*]], double [[IN]])
2094   entry:
2095   br label %for.body
2097   for.body:
2098   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2099   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
2100   %in = load double, ptr %in.gep, align 8
2101   %call = tail call double @fmod(double %in, double %in)
2102   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
2103   store double %call, ptr %out.gep, align 8
2104   %iv.next = add nuw nsw i64 %iv, 1
2105   %exitcond = icmp eq i64 %iv.next, 1000
2106   br i1 %exitcond, label %for.end, label %for.body
2108   for.end:
2109   ret void
2112 define void @fmod_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2113 ; SLEEF-NEON-LABEL: define void @fmod_f32
2114 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2115 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4vv_fmodf(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])
2117 ; SLEEF-SVE-LABEL: define void @fmod_f32
2118 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2119 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @_ZGVsMxvv_fmodf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x float> [[WIDE_MASKED_LOAD]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
2121 ; SLEEF-SVE-NOPRED-LABEL: define void @fmod_f32
2122 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2123 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @_ZGVsMxvv_fmodf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]], <vscale x 4 x i1> splat (i1 true))
2124 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call float @fmodf(float [[IN:%.*]], float [[IN]])
2126 ; ARMPL-NEON-LABEL: define void @fmod_f32
2127 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2128 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vfmodq_f32(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])
2130 ; ARMPL-SVE-LABEL: define void @fmod_f32
2131 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2132 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @armpl_svfmod_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x float> [[WIDE_MASKED_LOAD]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
2134 ; ARMPL-SVE-NOPRED-LABEL: define void @fmod_f32
2135 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2136 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @armpl_svfmod_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]], <vscale x 4 x i1> splat (i1 true))
2137 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call float @fmodf(float [[IN:%.*]], float [[IN]])
2139   entry:
2140   br label %for.body
2142   for.body:
2143   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2144   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
2145   %in = load float, ptr %in.gep, align 8
2146   %call = tail call float @fmodf(float %in, float %in)
2147   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
2148   store float %call, ptr %out.gep, align 4
2149   %iv.next = add nuw nsw i64 %iv, 1
2150   %exitcond = icmp eq i64 %iv.next, 1000
2151   br i1 %exitcond, label %for.end, label %for.body
2153   for.end:
2154   ret void
2157 declare double @hypot(double, double)
2158 declare float @hypotf(float, float)
2160 define void @hypot_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2161 ; SLEEF-NEON-LABEL: define void @hypot_f64
2162 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2163 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2vv_hypot(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])
2165 ; SLEEF-SVE-LABEL: define void @hypot_f64
2166 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2167 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @_ZGVsMxvv_hypot(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x double> [[WIDE_MASKED_LOAD]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
2169 ; SLEEF-SVE-NOPRED-LABEL: define void @hypot_f64
2170 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2171 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @_ZGVsMxvv_hypot(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]], <vscale x 2 x i1> splat (i1 true))
2172 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call double @hypot(double [[IN:%.*]], double [[IN]])
2174 ; ARMPL-NEON-LABEL: define void @hypot_f64
2175 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2176 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vhypotq_f64(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])
2178 ; ARMPL-SVE-LABEL: define void @hypot_f64
2179 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2180 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @armpl_svhypot_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x double> [[WIDE_MASKED_LOAD]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
2182 ; ARMPL-SVE-NOPRED-LABEL: define void @hypot_f64
2183 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2184 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @armpl_svhypot_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]], <vscale x 2 x i1> splat (i1 true))
2185 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call double @hypot(double [[IN:%.*]], double [[IN]])
2187   entry:
2188   br label %for.body
2190   for.body:
2191   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2192   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
2193   %in = load double, ptr %in.gep, align 8
2194   %call = tail call double @hypot(double %in, double %in)
2195   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
2196   store double %call, ptr %out.gep, align 8
2197   %iv.next = add nuw nsw i64 %iv, 1
2198   %exitcond = icmp eq i64 %iv.next, 1000
2199   br i1 %exitcond, label %for.end, label %for.body
2201   for.end:
2202   ret void
2205 define void @hypot_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2206 ; SLEEF-NEON-LABEL: define void @hypot_f32
2207 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2208 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4vv_hypotf(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])
2210 ; SLEEF-SVE-LABEL: define void @hypot_f32
2211 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2212 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @_ZGVsMxvv_hypotf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x float> [[WIDE_MASKED_LOAD]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
2214 ; SLEEF-SVE-NOPRED-LABEL: define void @hypot_f32
2215 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2216 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @_ZGVsMxvv_hypotf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]], <vscale x 4 x i1> splat (i1 true))
2217 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call float @hypotf(float [[IN:%.*]], float [[IN]])
2219 ; ARMPL-NEON-LABEL: define void @hypot_f32
2220 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2221 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vhypotq_f32(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])
2223 ; ARMPL-SVE-LABEL: define void @hypot_f32
2224 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2225 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @armpl_svhypot_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x float> [[WIDE_MASKED_LOAD]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
2227 ; ARMPL-SVE-NOPRED-LABEL: define void @hypot_f32
2228 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2229 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @armpl_svhypot_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]], <vscale x 4 x i1> splat (i1 true))
2230 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call float @hypotf(float [[IN:%.*]], float [[IN]])
2232   entry:
2233   br label %for.body
2235   for.body:
2236   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2237   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
2238   %in = load float, ptr %in.gep, align 8
2239   %call = tail call float @hypotf(float %in, float %in)
2240   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
2241   store float %call, ptr %out.gep, align 4
2242   %iv.next = add nuw nsw i64 %iv, 1
2243   %exitcond = icmp eq i64 %iv.next, 1000
2244   br i1 %exitcond, label %for.end, label %for.body
2246   for.end:
2247   ret void
2250 declare i32 @ilogb(double)
2251 declare i32 @ilogbf(float)
2253 define void @ilogb_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2254 ; SLEEF-NEON-LABEL: define void @ilogb_f64
2255 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2256 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x i32> @_ZGVnN2v_ilogb(<2 x double> [[WIDE_LOAD:%.*]])
2258 ; SLEEF-SVE-LABEL: define void @ilogb_f64
2259 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2260 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 2 x i32> @_ZGVsMxv_ilogb(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
2262 ; SLEEF-SVE-NOPRED-LABEL: define void @ilogb_f64
2263 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2264 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x i32> @_ZGVsMxv_ilogb(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
2265 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call i32 @ilogb(double [[IN:%.*]])
2267 ; ARMPL-NEON-LABEL: define void @ilogb_f64
2268 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2269 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x i32> @armpl_vilogbq_f64(<2 x double> [[WIDE_LOAD:%.*]])
2271 ; ARMPL-SVE-LABEL: define void @ilogb_f64
2272 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2273 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 2 x i32> @armpl_svilogb_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
2275 ; ARMPL-SVE-NOPRED-LABEL: define void @ilogb_f64
2276 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2277 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x i32> @armpl_svilogb_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
2278 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call i32 @ilogb(double [[IN:%.*]])
2280   entry:
2281   br label %for.body
2283   for.body:
2284   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2285   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
2286   %in = load double, ptr %in.gep, align 8
2287   %call = tail call i32 @ilogb(double %in)
2288   %out.gep = getelementptr inbounds i32, ptr %out.ptr, i64 %iv
2289   store i32 %call, ptr %out.gep, align 8
2290   %iv.next = add nuw nsw i64 %iv, 1
2291   %exitcond = icmp eq i64 %iv.next, 1000
2292   br i1 %exitcond, label %for.end, label %for.body
2294   for.end:
2295   ret void
2298 define void @ilogb_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2299 ; SLEEF-NEON-LABEL: define void @ilogb_f32
2300 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2301 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x i32> @_ZGVnN4v_ilogbf(<4 x float> [[WIDE_LOAD:%.*]])
2303 ; SLEEF-SVE-LABEL: define void @ilogb_f32
2304 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2305 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 4 x i32> @_ZGVsMxv_ilogbf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
2307 ; SLEEF-SVE-NOPRED-LABEL: define void @ilogb_f32
2308 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2309 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x i32> @_ZGVsMxv_ilogbf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
2310 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call i32 @ilogbf(float [[IN:%.*]])
2312 ; ARMPL-NEON-LABEL: define void @ilogb_f32
2313 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2314 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x i32> @armpl_vilogbq_f32(<4 x float> [[WIDE_LOAD:%.*]])
2316 ; ARMPL-SVE-LABEL: define void @ilogb_f32
2317 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2318 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 4 x i32> @armpl_svilogb_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
2320 ; ARMPL-SVE-NOPRED-LABEL: define void @ilogb_f32
2321 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2322 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x i32> @armpl_svilogb_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
2323 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call i32 @ilogbf(float [[IN:%.*]])
2325   entry:
2326   br label %for.body
2328   for.body:
2329   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2330   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
2331   %in = load float, ptr %in.gep, align 8
2332   %call = tail call i32 @ilogbf(float %in)
2333   %out.gep = getelementptr inbounds i32, ptr %out.ptr, i64 %iv
2334   store i32 %call, ptr %out.gep, align 4
2335   %iv.next = add nuw nsw i64 %iv, 1
2336   %exitcond = icmp eq i64 %iv.next, 1000
2337   br i1 %exitcond, label %for.end, label %for.body
2339   for.end:
2340   ret void
2343 declare double @ldexp(double, i32)
2344 declare float @ldexpf(float, i32)
2346 define void @ldexp_f64(ptr noalias %in1.ptr, ptr noalias %in2.ptr, ptr noalias %out.ptr) {
2347 ; SLEEF-NEON-LABEL: define void @ldexp_f64
2348 ; SLEEF-NEON-SAME: (ptr noalias [[IN1_PTR:%.*]], ptr noalias [[IN2_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2349 ; SLEEF-NEON:    [[TMP5:%.*]] = call <2 x double> @_ZGVnN2vv_ldexp(<2 x double> [[WIDE_LOAD:%.*]], <2 x i32> [[WIDE_LOAD1:%.*]])
2351 ; SLEEF-SVE-LABEL: define void @ldexp_f64
2352 ; SLEEF-SVE-SAME: (ptr noalias [[IN1_PTR:%.*]], ptr noalias [[IN2_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2353 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 2 x double> @_ZGVsMxvv_ldexp(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i32> [[WIDE_MASKED_LOAD1:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
2355 ; SLEEF-SVE-NOPRED-LABEL: define void @ldexp_f64
2356 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN1_PTR:%.*]], ptr noalias [[IN2_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2357 ; SLEEF-SVE-NOPRED:    [[TMP11:%.*]] = call <vscale x 2 x double> @_ZGVsMxvv_ldexp(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i32> [[WIDE_LOAD1:%.*]], <vscale x 2 x i1> splat (i1 true))
2358 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call double @ldexp(double [[IN1:%.*]], i32 [[IN2:%.*]])
2360 ; ARMPL-NEON-LABEL: define void @ldexp_f64
2361 ; ARMPL-NEON-SAME: (ptr noalias [[IN1_PTR:%.*]], ptr noalias [[IN2_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2362 ; ARMPL-NEON:    [[TMP5:%.*]] = call <2 x double> @armpl_vldexpq_f64(<2 x double> [[WIDE_LOAD:%.*]], <2 x i32> [[WIDE_LOAD1:%.*]])
2364 ; ARMPL-SVE-LABEL: define void @ldexp_f64
2365 ; ARMPL-SVE-SAME: (ptr noalias [[IN1_PTR:%.*]], ptr noalias [[IN2_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2366 ; ARMPL-SVE:    [[TMP15:%.*]] = call <vscale x 2 x double> @armpl_svldexp_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i32> [[WIDE_MASKED_LOAD1:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
2368 ; ARMPL-SVE-NOPRED-LABEL: define void @ldexp_f64
2369 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN1_PTR:%.*]], ptr noalias [[IN2_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2370 ; ARMPL-SVE-NOPRED:    [[TMP11:%.*]] = call <vscale x 2 x double> @armpl_svldexp_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i32> [[WIDE_LOAD1:%.*]], <vscale x 2 x i1> splat (i1 true))
2371 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call double @ldexp(double [[IN1:%.*]], i32 [[IN2:%.*]])
2373   entry:
2374   br label %for.body
2376   for.body:
2377   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2378   %in1.gep = getelementptr inbounds double, ptr %in1.ptr, i64 %iv
2379   %in1 = load double, ptr %in1.gep, align 8
2380   %in2.gep = getelementptr inbounds i32, ptr %in2.ptr, i64 %iv
2381   %in2 = load i32, ptr %in2.gep, align 8
2382   %call = tail call double @ldexp(double %in1, i32 %in2)
2383   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
2384   store double %call, ptr %out.gep, align 8
2385   %iv.next = add nuw nsw i64 %iv, 1
2386   %exitcond = icmp eq i64 %iv.next, 1000
2387   br i1 %exitcond, label %for.end, label %for.body
2389   for.end:
2390   ret void
2393 define void @ldexp_f32(ptr noalias %in1.ptr, ptr noalias %in2.ptr, ptr noalias %out.ptr) {
2394 ; SLEEF-NEON-LABEL: define void @ldexp_f32
2395 ; SLEEF-NEON-SAME: (ptr noalias [[IN1_PTR:%.*]], ptr noalias [[IN2_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2396 ; SLEEF-NEON:    [[TMP5:%.*]] = call <4 x float> @_ZGVnN4vv_ldexpf(<4 x float> [[WIDE_LOAD:%.*]], <4 x i32> [[WIDE_LOAD1:%.*]])
2398 ; SLEEF-SVE-LABEL: define void @ldexp_f32
2399 ; SLEEF-SVE-SAME: (ptr noalias [[IN1_PTR:%.*]], ptr noalias [[IN2_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2400 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 4 x float> @_ZGVsMxvv_ldexpf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i32> [[WIDE_MASKED_LOAD1:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
2402 ; SLEEF-SVE-NOPRED-LABEL: define void @ldexp_f32
2403 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN1_PTR:%.*]], ptr noalias [[IN2_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2404 ; SLEEF-SVE-NOPRED:    [[TMP11:%.*]] = call <vscale x 4 x float> @_ZGVsMxvv_ldexpf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i32> [[WIDE_LOAD1:%.*]], <vscale x 4 x i1> splat (i1 true))
2405 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call float @ldexpf(float [[IN1:%.*]], i32 [[IN2:%.*]])
2407 ; ARMPL-NEON-LABEL: define void @ldexp_f32
2408 ; ARMPL-NEON-SAME: (ptr noalias [[IN1_PTR:%.*]], ptr noalias [[IN2_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2409 ; ARMPL-NEON:    [[TMP5:%.*]] = call <4 x float> @armpl_vldexpq_f32(<4 x float> [[WIDE_LOAD:%.*]], <4 x i32> [[WIDE_LOAD1:%.*]])
2411 ; ARMPL-SVE-LABEL: define void @ldexp_f32
2412 ; ARMPL-SVE-SAME: (ptr noalias [[IN1_PTR:%.*]], ptr noalias [[IN2_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2413 ; ARMPL-SVE:    [[TMP15:%.*]] = call <vscale x 4 x float> @armpl_svldexp_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i32> [[WIDE_MASKED_LOAD1:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
2415 ; ARMPL-SVE-NOPRED-LABEL: define void @ldexp_f32
2416 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN1_PTR:%.*]], ptr noalias [[IN2_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2417 ; ARMPL-SVE-NOPRED:    [[TMP11:%.*]] = call <vscale x 4 x float> @armpl_svldexp_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i32> [[WIDE_LOAD1:%.*]], <vscale x 4 x i1> splat (i1 true))
2418 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call float @ldexpf(float [[IN1:%.*]], i32 [[IN2:%.*]])
2420   entry:
2421   br label %for.body
2423   for.body:
2424   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2425   %in1.gep = getelementptr inbounds float, ptr %in1.ptr, i64 %iv
2426   %in1 = load float, ptr %in1.gep, align 8
2427   %in2.gep = getelementptr inbounds i32, ptr %in2.ptr, i64 %iv
2428   %in2 = load i32, ptr %in2.gep, align 8
2429   %call = tail call float @ldexpf(float %in1, i32 %in2)
2430   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
2431   store float %call, ptr %out.gep, align 4
2432   %iv.next = add nuw nsw i64 %iv, 1
2433   %exitcond = icmp eq i64 %iv.next, 1000
2434   br i1 %exitcond, label %for.end, label %for.body
2436   for.end:
2437   ret void
2440 declare double @lgamma(double)
2441 declare float @lgammaf(float)
2443 define void @lgamma_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2444 ; SLEEF-NEON-LABEL: define void @lgamma_f64
2445 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2446 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_lgamma(<2 x double> [[WIDE_LOAD:%.*]])
2448 ; SLEEF-SVE-LABEL: define void @lgamma_f64
2449 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2450 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_lgamma(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
2452 ; SLEEF-SVE-NOPRED-LABEL: define void @lgamma_f64
2453 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2454 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_lgamma(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
2455 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call double @lgamma(double [[IN:%.*]])
2457 ; ARMPL-NEON-LABEL: define void @lgamma_f64
2458 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2459 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vlgammaq_f64(<2 x double> [[WIDE_LOAD:%.*]])
2461 ; ARMPL-SVE-LABEL: define void @lgamma_f64
2462 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2463 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @armpl_svlgamma_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
2465 ; ARMPL-SVE-NOPRED-LABEL: define void @lgamma_f64
2466 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2467 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @armpl_svlgamma_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
2468 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call double @lgamma(double [[IN:%.*]])
2470   entry:
2471   br label %for.body
2473   for.body:
2474   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2475   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
2476   %in = load double, ptr %in.gep, align 8
2477   %call = tail call double @lgamma(double %in)
2478   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
2479   store double %call, ptr %out.gep, align 8
2480   %iv.next = add nuw nsw i64 %iv, 1
2481   %exitcond = icmp eq i64 %iv.next, 1000
2482   br i1 %exitcond, label %for.end, label %for.body
2484   for.end:
2485   ret void
2488 define void @lgamma_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2489 ; SLEEF-NEON-LABEL: define void @lgamma_f32
2490 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2491 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_lgammaf(<4 x float> [[WIDE_LOAD:%.*]])
2493 ; SLEEF-SVE-LABEL: define void @lgamma_f32
2494 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2495 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_lgammaf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
2497 ; SLEEF-SVE-NOPRED-LABEL: define void @lgamma_f32
2498 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2499 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_lgammaf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
2500 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call float @lgammaf(float [[IN:%.*]])
2502 ; ARMPL-NEON-LABEL: define void @lgamma_f32
2503 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2504 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vlgammaq_f32(<4 x float> [[WIDE_LOAD:%.*]])
2506 ; ARMPL-SVE-LABEL: define void @lgamma_f32
2507 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2508 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @armpl_svlgamma_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
2510 ; ARMPL-SVE-NOPRED-LABEL: define void @lgamma_f32
2511 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2512 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @armpl_svlgamma_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
2513 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call float @lgammaf(float [[IN:%.*]])
2515   entry:
2516   br label %for.body
2518   for.body:
2519   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2520   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
2521   %in = load float, ptr %in.gep, align 8
2522   %call = tail call float @lgammaf(float %in)
2523   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
2524   store float %call, ptr %out.gep, align 4
2525   %iv.next = add nuw nsw i64 %iv, 1
2526   %exitcond = icmp eq i64 %iv.next, 1000
2527   br i1 %exitcond, label %for.end, label %for.body
2529   for.end:
2530   ret void
2533 declare double @log(double)
2534 declare float @logf(float)
2536 define void @log_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2537 ; SLEEF-NEON-LABEL: define void @log_f64
2538 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2539 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_log(<2 x double> [[WIDE_LOAD:%.*]])
2541 ; SLEEF-SVE-LABEL: define void @log_f64
2542 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2543 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_log(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
2545 ; SLEEF-SVE-NOPRED-LABEL: define void @log_f64
2546 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2547 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_log(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
2548 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call double @log(double [[IN:%.*]])
2550 ; ARMPL-NEON-LABEL: define void @log_f64
2551 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2552 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vlogq_f64(<2 x double> [[WIDE_LOAD:%.*]])
2554 ; ARMPL-SVE-LABEL: define void @log_f64
2555 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2556 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @armpl_svlog_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
2558 ; ARMPL-SVE-NOPRED-LABEL: define void @log_f64
2559 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2560 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @armpl_svlog_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
2561 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call double @log(double [[IN:%.*]])
2563   entry:
2564   br label %for.body
2566   for.body:
2567   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2568   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
2569   %in = load double, ptr %in.gep, align 8
2570   %call = tail call double @log(double %in)
2571   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
2572   store double %call, ptr %out.gep, align 8
2573   %iv.next = add nuw nsw i64 %iv, 1
2574   %exitcond = icmp eq i64 %iv.next, 1000
2575   br i1 %exitcond, label %for.end, label %for.body
2577   for.end:
2578   ret void
2581 define void @log_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2582 ; SLEEF-NEON-LABEL: define void @log_f32
2583 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2584 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_logf(<4 x float> [[WIDE_LOAD:%.*]])
2586 ; SLEEF-SVE-LABEL: define void @log_f32
2587 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2588 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_logf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
2590 ; SLEEF-SVE-NOPRED-LABEL: define void @log_f32
2591 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2592 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_logf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
2593 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call float @logf(float [[IN:%.*]])
2595 ; ARMPL-NEON-LABEL: define void @log_f32
2596 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2597 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vlogq_f32(<4 x float> [[WIDE_LOAD:%.*]])
2599 ; ARMPL-SVE-LABEL: define void @log_f32
2600 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2601 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @armpl_svlog_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
2603 ; ARMPL-SVE-NOPRED-LABEL: define void @log_f32
2604 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2605 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @armpl_svlog_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
2606 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call float @logf(float [[IN:%.*]])
2608   entry:
2609   br label %for.body
2611   for.body:
2612   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2613   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
2614   %in = load float, ptr %in.gep, align 8
2615   %call = tail call float @logf(float %in)
2616   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
2617   store float %call, ptr %out.gep, align 4
2618   %iv.next = add nuw nsw i64 %iv, 1
2619   %exitcond = icmp eq i64 %iv.next, 1000
2620   br i1 %exitcond, label %for.end, label %for.body
2622   for.end:
2623   ret void
2626 declare double @log10(double)
2627 declare float @log10f(float)
2629 define void @log10_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2630 ; SLEEF-NEON-LABEL: define void @log10_f64
2631 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2632 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_log10(<2 x double> [[WIDE_LOAD:%.*]])
2634 ; SLEEF-SVE-LABEL: define void @log10_f64
2635 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2636 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_log10(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
2638 ; SLEEF-SVE-NOPRED-LABEL: define void @log10_f64
2639 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2640 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_log10(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
2641 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call double @log10(double [[IN:%.*]])
2643 ; ARMPL-NEON-LABEL: define void @log10_f64
2644 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2645 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vlog10q_f64(<2 x double> [[WIDE_LOAD:%.*]])
2647 ; ARMPL-SVE-LABEL: define void @log10_f64
2648 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2649 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @armpl_svlog10_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
2651 ; ARMPL-SVE-NOPRED-LABEL: define void @log10_f64
2652 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2653 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @armpl_svlog10_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
2654 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call double @log10(double [[IN:%.*]])
2656   entry:
2657   br label %for.body
2659   for.body:
2660   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2661   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
2662   %in = load double, ptr %in.gep, align 8
2663   %call = tail call double @log10(double %in)
2664   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
2665   store double %call, ptr %out.gep, align 8
2666   %iv.next = add nuw nsw i64 %iv, 1
2667   %exitcond = icmp eq i64 %iv.next, 1000
2668   br i1 %exitcond, label %for.end, label %for.body
2670   for.end:
2671   ret void
2674 define void @log10_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2675 ; SLEEF-NEON-LABEL: define void @log10_f32
2676 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2677 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_log10f(<4 x float> [[WIDE_LOAD:%.*]])
2679 ; SLEEF-SVE-LABEL: define void @log10_f32
2680 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2681 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_log10f(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
2683 ; SLEEF-SVE-NOPRED-LABEL: define void @log10_f32
2684 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2685 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_log10f(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
2686 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call float @log10f(float [[IN:%.*]])
2688 ; ARMPL-NEON-LABEL: define void @log10_f32
2689 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2690 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vlog10q_f32(<4 x float> [[WIDE_LOAD:%.*]])
2692 ; ARMPL-SVE-LABEL: define void @log10_f32
2693 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2694 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @armpl_svlog10_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
2696 ; ARMPL-SVE-NOPRED-LABEL: define void @log10_f32
2697 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2698 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @armpl_svlog10_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
2699 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call float @log10f(float [[IN:%.*]])
2701   entry:
2702   br label %for.body
2704   for.body:
2705   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2706   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
2707   %in = load float, ptr %in.gep, align 8
2708   %call = tail call float @log10f(float %in)
2709   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
2710   store float %call, ptr %out.gep, align 4
2711   %iv.next = add nuw nsw i64 %iv, 1
2712   %exitcond = icmp eq i64 %iv.next, 1000
2713   br i1 %exitcond, label %for.end, label %for.body
2715   for.end:
2716   ret void
2719 declare double @log1p(double)
2720 declare float @log1pf(float)
2722 define void @log1p_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2723 ; SLEEF-NEON-LABEL: define void @log1p_f64
2724 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2725 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_log1p(<2 x double> [[WIDE_LOAD:%.*]])
2727 ; SLEEF-SVE-LABEL: define void @log1p_f64
2728 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2729 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_log1p(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
2731 ; SLEEF-SVE-NOPRED-LABEL: define void @log1p_f64
2732 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2733 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_log1p(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
2734 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call double @log1p(double [[IN:%.*]])
2736 ; ARMPL-NEON-LABEL: define void @log1p_f64
2737 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2738 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vlog1pq_f64(<2 x double> [[WIDE_LOAD:%.*]])
2740 ; ARMPL-SVE-LABEL: define void @log1p_f64
2741 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2742 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @armpl_svlog1p_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
2744 ; ARMPL-SVE-NOPRED-LABEL: define void @log1p_f64
2745 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2746 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @armpl_svlog1p_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
2747 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call double @log1p(double [[IN:%.*]])
2749   entry:
2750   br label %for.body
2752   for.body:
2753   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2754   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
2755   %in = load double, ptr %in.gep, align 8
2756   %call = tail call double @log1p(double %in)
2757   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
2758   store double %call, ptr %out.gep, align 8
2759   %iv.next = add nuw nsw i64 %iv, 1
2760   %exitcond = icmp eq i64 %iv.next, 1000
2761   br i1 %exitcond, label %for.end, label %for.body
2763   for.end:
2764   ret void
2767 define void @log1p_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2768 ; SLEEF-NEON-LABEL: define void @log1p_f32
2769 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2770 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_log1pf(<4 x float> [[WIDE_LOAD:%.*]])
2772 ; SLEEF-SVE-LABEL: define void @log1p_f32
2773 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2774 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_log1pf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
2776 ; SLEEF-SVE-NOPRED-LABEL: define void @log1p_f32
2777 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2778 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_log1pf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
2779 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call float @log1pf(float [[IN:%.*]])
2781 ; ARMPL-NEON-LABEL: define void @log1p_f32
2782 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2783 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vlog1pq_f32(<4 x float> [[WIDE_LOAD:%.*]])
2785 ; ARMPL-SVE-LABEL: define void @log1p_f32
2786 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2787 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @armpl_svlog1p_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
2789 ; ARMPL-SVE-NOPRED-LABEL: define void @log1p_f32
2790 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2791 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @armpl_svlog1p_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
2792 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call float @log1pf(float [[IN:%.*]])
2794   entry:
2795   br label %for.body
2797   for.body:
2798   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2799   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
2800   %in = load float, ptr %in.gep, align 8
2801   %call = tail call float @log1pf(float %in)
2802   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
2803   store float %call, ptr %out.gep, align 4
2804   %iv.next = add nuw nsw i64 %iv, 1
2805   %exitcond = icmp eq i64 %iv.next, 1000
2806   br i1 %exitcond, label %for.end, label %for.body
2808   for.end:
2809   ret void
2812 declare double @log2(double)
2813 declare float @log2f(float)
2815 define void @log2_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2816 ; SLEEF-NEON-LABEL: define void @log2_f64
2817 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2818 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_log2(<2 x double> [[WIDE_LOAD:%.*]])
2820 ; SLEEF-SVE-LABEL: define void @log2_f64
2821 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2822 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_log2(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
2824 ; SLEEF-SVE-NOPRED-LABEL: define void @log2_f64
2825 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2826 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_log2(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
2827 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call double @log2(double [[IN:%.*]])
2829 ; ARMPL-NEON-LABEL: define void @log2_f64
2830 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2831 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vlog2q_f64(<2 x double> [[WIDE_LOAD:%.*]])
2833 ; ARMPL-SVE-LABEL: define void @log2_f64
2834 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2835 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @armpl_svlog2_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
2837 ; ARMPL-SVE-NOPRED-LABEL: define void @log2_f64
2838 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2839 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @armpl_svlog2_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
2840 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call double @log2(double [[IN:%.*]])
2842   entry:
2843   br label %for.body
2845   for.body:
2846   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2847   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
2848   %in = load double, ptr %in.gep, align 8
2849   %call = tail call double @log2(double %in)
2850   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
2851   store double %call, ptr %out.gep, align 8
2852   %iv.next = add nuw nsw i64 %iv, 1
2853   %exitcond = icmp eq i64 %iv.next, 1000
2854   br i1 %exitcond, label %for.end, label %for.body
2856   for.end:
2857   ret void
2860 define void @log2_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2861 ; SLEEF-NEON-LABEL: define void @log2_f32
2862 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2863 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_log2f(<4 x float> [[WIDE_LOAD:%.*]])
2865 ; SLEEF-SVE-LABEL: define void @log2_f32
2866 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2867 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_log2f(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
2869 ; SLEEF-SVE-NOPRED-LABEL: define void @log2_f32
2870 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2871 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_log2f(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
2872 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call float @log2f(float [[IN:%.*]])
2874 ; ARMPL-NEON-LABEL: define void @log2_f32
2875 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2876 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vlog2q_f32(<4 x float> [[WIDE_LOAD:%.*]])
2878 ; ARMPL-SVE-LABEL: define void @log2_f32
2879 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2880 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @armpl_svlog2_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
2882 ; ARMPL-SVE-NOPRED-LABEL: define void @log2_f32
2883 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2884 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @armpl_svlog2_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
2885 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call float @log2f(float [[IN:%.*]])
2887   entry:
2888   br label %for.body
2890   for.body:
2891   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2892   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
2893   %in = load float, ptr %in.gep, align 8
2894   %call = tail call float @log2f(float %in)
2895   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
2896   store float %call, ptr %out.gep, align 4
2897   %iv.next = add nuw nsw i64 %iv, 1
2898   %exitcond = icmp eq i64 %iv.next, 1000
2899   br i1 %exitcond, label %for.end, label %for.body
2901   for.end:
2902   ret void
2905 ; FIXME: Re-enable modf[f] vectorization once aliasing issues due to output
2906 ; pointers have been resolved.
2908 declare double @modf(double, ptr)
2909 declare float @modff(float, ptr)
2911 define void @modf_f64(ptr noalias %a, ptr noalias %b, ptr noalias %c) {
2912 ; SLEEF-NEON-LABEL: define void @modf_f64
2913 ; SLEEF-NEON-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
2914 ; SLEEF-NEON:    [[DATA:%.*]] = call double @modf(double [[NUM:%.*]], ptr [[GEPB:%.*]])
2916 ; SLEEF-SVE-LABEL: define void @modf_f64
2917 ; SLEEF-SVE-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
2918 ; SLEEF-SVE:    [[DATA:%.*]] = call double @modf(double [[NUM:%.*]], ptr [[GEPB:%.*]])
2920 ; SLEEF-SVE-NOPRED-LABEL: define void @modf_f64
2921 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
2922 ; SLEEF-SVE-NOPRED:    [[DATA:%.*]] = call double @modf(double [[NUM:%.*]], ptr [[GEPB:%.*]])
2924 ; ARMPL-NEON-LABEL: define void @modf_f64
2925 ; ARMPL-NEON-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
2926 ; ARMPL-NEON:    [[DATA:%.*]] = call double @modf(double [[NUM:%.*]], ptr [[GEPB:%.*]])
2928 ; ARMPL-SVE-LABEL: define void @modf_f64
2929 ; ARMPL-SVE-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
2930 ; ARMPL-SVE:    [[DATA:%.*]] = call double @modf(double [[NUM:%.*]], ptr [[GEPB:%.*]])
2932 ; ARMPL-SVE-NOPRED-LABEL: define void @modf_f64
2933 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
2934 ; ARMPL-SVE-NOPRED:    [[DATA:%.*]] = call double @modf(double [[NUM:%.*]], ptr [[GEPB:%.*]])
2936 entry:
2937   br label %for.body
2939 for.body:
2940   %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]
2941   %gepa = getelementptr double, ptr %a, i64 %indvars.iv
2942   %num = load double, ptr %gepa, align 8
2943   %gepb = getelementptr double, ptr %b, i64 %indvars.iv
2944   %data = call double @modf(double %num, ptr %gepb)
2945   %gepc = getelementptr inbounds double, ptr %c, i64 %indvars.iv
2946   store double %data, ptr %gepc, align 8
2947   %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
2948   %exitcond = icmp eq i64 %indvars.iv.next, 1000
2949   br i1 %exitcond, label %for.cond.cleanup, label %for.body
2951 for.cond.cleanup:
2952   ret void
2955 define void @modf_f32(ptr noalias %a, ptr noalias %b, ptr noalias %c) {
2956 ; SLEEF-NEON-LABEL: define void @modf_f32
2957 ; SLEEF-NEON-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
2958 ; SLEEF-NEON:    [[DATA:%.*]] = call float @modff(float [[NUM:%.*]], ptr [[GEPB:%.*]])
2960 ; SLEEF-SVE-LABEL: define void @modf_f32
2961 ; SLEEF-SVE-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
2962 ; SLEEF-SVE:    [[DATA:%.*]] = call float @modff(float [[NUM:%.*]], ptr [[GEPB:%.*]])
2964 ; SLEEF-SVE-NOPRED-LABEL: define void @modf_f32
2965 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
2966 ; SLEEF-SVE-NOPRED:    [[DATA:%.*]] = call float @modff(float [[NUM:%.*]], ptr [[GEPB:%.*]])
2968 ; ARMPL-NEON-LABEL: define void @modf_f32
2969 ; ARMPL-NEON-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
2970 ; ARMPL-NEON:    [[DATA:%.*]] = call float @modff(float [[NUM:%.*]], ptr [[GEPB:%.*]])
2972 ; ARMPL-SVE-LABEL: define void @modf_f32
2973 ; ARMPL-SVE-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
2974 ; ARMPL-SVE:    [[DATA:%.*]] = call float @modff(float [[NUM:%.*]], ptr [[GEPB:%.*]])
2976 ; ARMPL-SVE-NOPRED-LABEL: define void @modf_f32
2977 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
2978 ; ARMPL-SVE-NOPRED:    [[DATA:%.*]] = call float @modff(float [[NUM:%.*]], ptr [[GEPB:%.*]])
2980 entry:
2981   br label %for.body
2983 for.body:
2984   %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]
2985   %gepa = getelementptr float, ptr %a, i64 %indvars.iv
2986   %num = load float, ptr %gepa, align 8
2987   %gepb = getelementptr float, ptr %b, i64 %indvars.iv
2988   %data = call float @modff(float %num, ptr %gepb)
2989   %gepc = getelementptr inbounds float, ptr %c, i64 %indvars.iv
2990   store float %data, ptr %gepc, align 8
2991   %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
2992   %exitcond = icmp eq i64 %indvars.iv.next, 1000
2993   br i1 %exitcond, label %for.cond.cleanup, label %for.body
2995 for.cond.cleanup:
2996   ret void
2999 declare double @nextafter(double, double)
3000 declare float @nextafterf(float, float)
3002 define void @nextafter_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
3003 ; SLEEF-NEON-LABEL: define void @nextafter_f64
3004 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3005 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2vv_nextafter(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])
3007 ; SLEEF-SVE-LABEL: define void @nextafter_f64
3008 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3009 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @_ZGVsMxvv_nextafter(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x double> [[WIDE_MASKED_LOAD]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
3011 ; SLEEF-SVE-NOPRED-LABEL: define void @nextafter_f64
3012 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3013 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @_ZGVsMxvv_nextafter(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]], <vscale x 2 x i1> splat (i1 true))
3014 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call double @nextafter(double [[IN:%.*]], double [[IN]])
3016 ; ARMPL-NEON-LABEL: define void @nextafter_f64
3017 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3018 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vnextafterq_f64(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])
3020 ; ARMPL-SVE-LABEL: define void @nextafter_f64
3021 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3022 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @armpl_svnextafter_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x double> [[WIDE_MASKED_LOAD]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
3024 ; ARMPL-SVE-NOPRED-LABEL: define void @nextafter_f64
3025 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3026 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @armpl_svnextafter_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]], <vscale x 2 x i1> splat (i1 true))
3027 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call double @nextafter(double [[IN:%.*]], double [[IN]])
3029   entry:
3030   br label %for.body
3032   for.body:
3033   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
3034   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
3035   %in = load double, ptr %in.gep, align 8
3036   %call = tail call double @nextafter(double %in, double %in)
3037   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
3038   store double %call, ptr %out.gep, align 8
3039   %iv.next = add nuw nsw i64 %iv, 1
3040   %exitcond = icmp eq i64 %iv.next, 1000
3041   br i1 %exitcond, label %for.end, label %for.body
3043   for.end:
3044   ret void
3047 define void @nextafter_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
3048 ; SLEEF-NEON-LABEL: define void @nextafter_f32
3049 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3050 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4vv_nextafterf(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])
3052 ; SLEEF-SVE-LABEL: define void @nextafter_f32
3053 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3054 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @_ZGVsMxvv_nextafterf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x float> [[WIDE_MASKED_LOAD]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
3056 ; SLEEF-SVE-NOPRED-LABEL: define void @nextafter_f32
3057 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3058 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @_ZGVsMxvv_nextafterf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]], <vscale x 4 x i1> splat (i1 true))
3059 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call float @nextafterf(float [[IN:%.*]], float [[IN]])
3061 ; ARMPL-NEON-LABEL: define void @nextafter_f32
3062 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3063 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vnextafterq_f32(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])
3065 ; ARMPL-SVE-LABEL: define void @nextafter_f32
3066 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3067 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @armpl_svnextafter_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x float> [[WIDE_MASKED_LOAD]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
3069 ; ARMPL-SVE-NOPRED-LABEL: define void @nextafter_f32
3070 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3071 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @armpl_svnextafter_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]], <vscale x 4 x i1> splat (i1 true))
3072 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call float @nextafterf(float [[IN:%.*]], float [[IN]])
3074   entry:
3075   br label %for.body
3077   for.body:
3078   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
3079   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
3080   %in = load float, ptr %in.gep, align 8
3081   %call = tail call float @nextafterf(float %in, float %in)
3082   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
3083   store float %call, ptr %out.gep, align 4
3084   %iv.next = add nuw nsw i64 %iv, 1
3085   %exitcond = icmp eq i64 %iv.next, 1000
3086   br i1 %exitcond, label %for.end, label %for.body
3088   for.end:
3089   ret void
3092 declare double @pow(double, double)
3093 declare float @powf(float, float)
3095 define void @pow_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
3096 ; SLEEF-NEON-LABEL: define void @pow_f64
3097 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3098 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2vv_pow(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])
3100 ; SLEEF-SVE-LABEL: define void @pow_f64
3101 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3102 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @_ZGVsMxvv_pow(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x double> [[WIDE_MASKED_LOAD]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
3104 ; SLEEF-SVE-NOPRED-LABEL: define void @pow_f64
3105 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3106 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @_ZGVsMxvv_pow(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]], <vscale x 2 x i1> splat (i1 true))
3107 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call double @pow(double [[IN:%.*]], double [[IN]])
3109 ; ARMPL-NEON-LABEL: define void @pow_f64
3110 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3111 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vpowq_f64(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])
3113 ; ARMPL-SVE-LABEL: define void @pow_f64
3114 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3115 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @armpl_svpow_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x double> [[WIDE_MASKED_LOAD]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
3117 ; ARMPL-SVE-NOPRED-LABEL: define void @pow_f64
3118 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3119 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @armpl_svpow_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]], <vscale x 2 x i1> splat (i1 true))
3120 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call double @pow(double [[IN:%.*]], double [[IN]])
3122   entry:
3123   br label %for.body
3125   for.body:
3126   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
3127   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
3128   %in = load double, ptr %in.gep, align 8
3129   %call = tail call double @pow(double %in, double %in)
3130   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
3131   store double %call, ptr %out.gep, align 8
3132   %iv.next = add nuw nsw i64 %iv, 1
3133   %exitcond = icmp eq i64 %iv.next, 1000
3134   br i1 %exitcond, label %for.end, label %for.body
3136   for.end:
3137   ret void
3140 define void @pow_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
3141 ; SLEEF-NEON-LABEL: define void @pow_f32
3142 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3143 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4vv_powf(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])
3145 ; SLEEF-SVE-LABEL: define void @pow_f32
3146 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3147 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @_ZGVsMxvv_powf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x float> [[WIDE_MASKED_LOAD]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
3149 ; SLEEF-SVE-NOPRED-LABEL: define void @pow_f32
3150 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3151 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @_ZGVsMxvv_powf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]], <vscale x 4 x i1> splat (i1 true))
3152 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call float @powf(float [[IN:%.*]], float [[IN]])
3154 ; ARMPL-NEON-LABEL: define void @pow_f32
3155 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3156 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vpowq_f32(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])
3158 ; ARMPL-SVE-LABEL: define void @pow_f32
3159 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3160 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @armpl_svpow_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x float> [[WIDE_MASKED_LOAD]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
3162 ; ARMPL-SVE-NOPRED-LABEL: define void @pow_f32
3163 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3164 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @armpl_svpow_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]], <vscale x 4 x i1> splat (i1 true))
3165 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call float @powf(float [[IN:%.*]], float [[IN]])
3167   entry:
3168   br label %for.body
3170   for.body:
3171   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
3172   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
3173   %in = load float, ptr %in.gep, align 8
3174   %call = tail call float @powf(float %in, float %in)
3175   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
3176   store float %call, ptr %out.gep, align 4
3177   %iv.next = add nuw nsw i64 %iv, 1
3178   %exitcond = icmp eq i64 %iv.next, 1000
3179   br i1 %exitcond, label %for.end, label %for.body
3181   for.end:
3182   ret void
3185 declare double @sin(double)
3186 declare float @sinf(float)
3188 define void @sin_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
3189 ; SLEEF-NEON-LABEL: define void @sin_f64
3190 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3191 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_sin(<2 x double> [[WIDE_LOAD:%.*]])
3193 ; SLEEF-SVE-LABEL: define void @sin_f64
3194 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3195 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_sin(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
3197 ; SLEEF-SVE-NOPRED-LABEL: define void @sin_f64
3198 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3199 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_sin(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
3200 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call double @sin(double [[IN:%.*]])
3202 ; ARMPL-NEON-LABEL: define void @sin_f64
3203 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3204 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vsinq_f64(<2 x double> [[WIDE_LOAD:%.*]])
3206 ; ARMPL-SVE-LABEL: define void @sin_f64
3207 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3208 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @armpl_svsin_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
3210 ; ARMPL-SVE-NOPRED-LABEL: define void @sin_f64
3211 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3212 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @armpl_svsin_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
3213 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call double @sin(double [[IN:%.*]])
3215   entry:
3216   br label %for.body
3218   for.body:
3219   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
3220   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
3221   %in = load double, ptr %in.gep, align 8
3222   %call = tail call double @sin(double %in)
3223   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
3224   store double %call, ptr %out.gep, align 8
3225   %iv.next = add nuw nsw i64 %iv, 1
3226   %exitcond = icmp eq i64 %iv.next, 1000
3227   br i1 %exitcond, label %for.end, label %for.body
3229   for.end:
3230   ret void
3233 define void @sin_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
3234 ; SLEEF-NEON-LABEL: define void @sin_f32
3235 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3236 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_sinf(<4 x float> [[WIDE_LOAD:%.*]])
3238 ; SLEEF-SVE-LABEL: define void @sin_f32
3239 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3240 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_sinf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
3242 ; SLEEF-SVE-NOPRED-LABEL: define void @sin_f32
3243 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3244 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_sinf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
3245 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call float @sinf(float [[IN:%.*]])
3247 ; ARMPL-NEON-LABEL: define void @sin_f32
3248 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3249 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vsinq_f32(<4 x float> [[WIDE_LOAD:%.*]])
3251 ; ARMPL-SVE-LABEL: define void @sin_f32
3252 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3253 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @armpl_svsin_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
3255 ; ARMPL-SVE-NOPRED-LABEL: define void @sin_f32
3256 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3257 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @armpl_svsin_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
3258 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call float @sinf(float [[IN:%.*]])
3260   entry:
3261   br label %for.body
3263   for.body:
3264   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
3265   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
3266   %in = load float, ptr %in.gep, align 8
3267   %call = tail call float @sinf(float %in)
3268   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
3269   store float %call, ptr %out.gep, align 4
3270   %iv.next = add nuw nsw i64 %iv, 1
3271   %exitcond = icmp eq i64 %iv.next, 1000
3272   br i1 %exitcond, label %for.end, label %for.body
3274   for.end:
3275   ret void
3278 ; FIXME: Re-enable sincos[f] vectorization once aliasing issues with output
3279 ; pointers have been resolved.
3281 declare void @sincos(double, ptr, ptr)
3282 declare void @sincosf(float, ptr, ptr)
3284 define void @sincos_f64(ptr noalias %a, ptr noalias %b, ptr noalias %c) {
3285 ; SLEEF-NEON-LABEL: define void @sincos_f64
3286 ; SLEEF-NEON-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
3287 ; SLEEF-NEON:    call void @sincos(double [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])
3289 ; SLEEF-SVE-LABEL: define void @sincos_f64
3290 ; SLEEF-SVE-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
3291 ; SLEEF-SVE:    call void @sincos(double [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])
3293 ; SLEEF-SVE-NOPRED-LABEL: define void @sincos_f64
3294 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
3295 ; SLEEF-SVE-NOPRED:    call void @sincos(double [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])
3297 ; ARMPL-NEON-LABEL: define void @sincos_f64
3298 ; ARMPL-NEON-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
3299 ; ARMPL-NEON:    call void @sincos(double [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])
3301 ; ARMPL-SVE-LABEL: define void @sincos_f64
3302 ; ARMPL-SVE-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
3303 ; ARMPL-SVE:    call void @sincos(double [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])
3305 ; ARMPL-SVE-NOPRED-LABEL: define void @sincos_f64
3306 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
3307 ; ARMPL-SVE-NOPRED:    call void @sincos(double [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])
3309 entry:
3310   br label %for.body
3312 for.body:
3313   %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]
3314   %gepa = getelementptr double, ptr %a, i64 %indvars.iv
3315   %num = load double, ptr %gepa, align 8
3316   %gepb = getelementptr double, ptr %b, i64 %indvars.iv
3317   %gepc = getelementptr double, ptr %c, i64 %indvars.iv
3318   call void @sincos(double %num, ptr %gepb, ptr %gepc)
3319   %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
3320   %exitcond = icmp eq i64 %indvars.iv.next, 1000
3321   br i1 %exitcond, label %for.cond.cleanup, label %for.body
3323 for.cond.cleanup:
3324   ret void
3327 define void @sincos_f32(ptr noalias %a, ptr noalias %b, ptr noalias %c) {
3328 ; SLEEF-NEON-LABEL: define void @sincos_f32
3329 ; SLEEF-NEON-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
3330 ; SLEEF-NEON:    call void @sincosf(float [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])
3332 ; SLEEF-SVE-LABEL: define void @sincos_f32
3333 ; SLEEF-SVE-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
3334 ; SLEEF-SVE:    call void @sincosf(float [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])
3336 ; SLEEF-SVE-NOPRED-LABEL: define void @sincos_f32
3337 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
3338 ; SLEEF-SVE-NOPRED:    call void @sincosf(float [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])
3340 ; ARMPL-NEON-LABEL: define void @sincos_f32
3341 ; ARMPL-NEON-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
3342 ; ARMPL-NEON:    call void @sincosf(float [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])
3344 ; ARMPL-SVE-LABEL: define void @sincos_f32
3345 ; ARMPL-SVE-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
3346 ; ARMPL-SVE:    call void @sincosf(float [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])
3348 ; ARMPL-SVE-NOPRED-LABEL: define void @sincos_f32
3349 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
3350 ; ARMPL-SVE-NOPRED:    call void @sincosf(float [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])
3352 entry:
3353   br label %for.body
3355 for.body:
3356   %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]
3357   %gepa = getelementptr float, ptr %a, i64 %indvars.iv
3358   %num = load float, ptr %gepa, align 8
3359   %gepb = getelementptr float, ptr %b, i64 %indvars.iv
3360   %gepc = getelementptr float, ptr %c, i64 %indvars.iv
3361   call void @sincosf(float %num, ptr %gepb, ptr %gepc)
3362   %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
3363   %exitcond = icmp eq i64 %indvars.iv.next, 1000
3364   br i1 %exitcond, label %for.cond.cleanup, label %for.body
3366 for.cond.cleanup:
3367   ret void
3370 ; FIXME: Re-enable sincospi[f] vectorization once aliasing issues with output
3371 ; pointers have been resolved.
3373 declare void @sincospi(double, ptr, ptr)
3374 declare void @sincospif(float, ptr, ptr)
3376 define void @sincospi_f64(ptr noalias %a, ptr noalias %b, ptr noalias %c) {
3377 ; SLEEF-NEON-LABEL: define void @sincospi_f64
3378 ; SLEEF-NEON-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
3379 ; SLEEF-NEON:    call void @sincospi(double [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])
3381 ; SLEEF-SVE-LABEL: define void @sincospi_f64
3382 ; SLEEF-SVE-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
3383 ; SLEEF-SVE:    call void @sincospi(double [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])
3385 ; SLEEF-SVE-NOPRED-LABEL: define void @sincospi_f64
3386 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
3387 ; SLEEF-SVE-NOPRED:    call void @sincospi(double [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])
3389 ; ARMPL-NEON-LABEL: define void @sincospi_f64
3390 ; ARMPL-NEON-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
3391 ; ARMPL-NEON:    call void @sincospi(double [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])
3393 ; ARMPL-SVE-LABEL: define void @sincospi_f64
3394 ; ARMPL-SVE-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
3395 ; ARMPL-SVE:    call void @sincospi(double [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])
3397 ; ARMPL-SVE-NOPRED-LABEL: define void @sincospi_f64
3398 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
3399 ; ARMPL-SVE-NOPRED:    call void @sincospi(double [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])
3401 entry:
3402   br label %for.body
3404 for.body:
3405   %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]
3406   %gepa = getelementptr double, ptr %a, i64 %indvars.iv
3407   %num = load double, ptr %gepa, align 8
3408   %gepb = getelementptr double, ptr %b, i64 %indvars.iv
3409   %gepc = getelementptr double, ptr %c, i64 %indvars.iv
3410   call void @sincospi(double %num, ptr %gepb, ptr %gepc)
3411   %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
3412   %exitcond = icmp eq i64 %indvars.iv.next, 1000
3413   br i1 %exitcond, label %for.cond.cleanup, label %for.body
3415 for.cond.cleanup:
3416   ret void
3419 define void @sincospi_f32(ptr noalias %a, ptr noalias %b, ptr noalias %c) {
3420 ; SLEEF-NEON-LABEL: define void @sincospi_f32
3421 ; SLEEF-NEON-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
3422 ; SLEEF-NEON:    call void @sincospif(float [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])
3424 ; SLEEF-SVE-LABEL: define void @sincospi_f32
3425 ; SLEEF-SVE-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
3426 ; SLEEF-SVE:    call void @sincospif(float [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])
3428 ; SLEEF-SVE-NOPRED-LABEL: define void @sincospi_f32
3429 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
3430 ; SLEEF-SVE-NOPRED:    call void @sincospif(float [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])
3432 ; ARMPL-NEON-LABEL: define void @sincospi_f32
3433 ; ARMPL-NEON-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
3434 ; ARMPL-NEON:    call void @sincospif(float [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])
3436 ; ARMPL-SVE-LABEL: define void @sincospi_f32
3437 ; ARMPL-SVE-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
3438 ; ARMPL-SVE:    call void @sincospif(float [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])
3440 ; ARMPL-SVE-NOPRED-LABEL: define void @sincospi_f32
3441 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
3442 ; ARMPL-SVE-NOPRED:    call void @sincospif(float [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])
3444 entry:
3445   br label %for.body
3447 for.body:
3448   %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]
3449   %gepa = getelementptr float, ptr %a, i64 %indvars.iv
3450   %num = load float, ptr %gepa, align 8
3451   %gepb = getelementptr float, ptr %b, i64 %indvars.iv
3452   %gepc = getelementptr float, ptr %c, i64 %indvars.iv
3453   call void @sincospif(float %num, ptr %gepb, ptr %gepc)
3454   %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
3455   %exitcond = icmp eq i64 %indvars.iv.next, 1000
3456   br i1 %exitcond, label %for.cond.cleanup, label %for.body
3458 for.cond.cleanup:
3459   ret void
3462 declare double @sinh(double)
3463 declare float @sinhf(float)
3465 define void @sinh_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
3466 ; SLEEF-NEON-LABEL: define void @sinh_f64
3467 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3468 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_sinh(<2 x double> [[WIDE_LOAD:%.*]])
3470 ; SLEEF-SVE-LABEL: define void @sinh_f64
3471 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3472 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_sinh(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
3474 ; SLEEF-SVE-NOPRED-LABEL: define void @sinh_f64
3475 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3476 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_sinh(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
3477 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call double @sinh(double [[IN:%.*]])
3479 ; ARMPL-NEON-LABEL: define void @sinh_f64
3480 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3481 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vsinhq_f64(<2 x double> [[WIDE_LOAD:%.*]])
3483 ; ARMPL-SVE-LABEL: define void @sinh_f64
3484 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3485 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @armpl_svsinh_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
3487 ; ARMPL-SVE-NOPRED-LABEL: define void @sinh_f64
3488 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3489 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @armpl_svsinh_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
3490 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call double @sinh(double [[IN:%.*]])
3492   entry:
3493   br label %for.body
3495   for.body:
3496   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
3497   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
3498   %in = load double, ptr %in.gep, align 8
3499   %call = tail call double @sinh(double %in)
3500   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
3501   store double %call, ptr %out.gep, align 8
3502   %iv.next = add nuw nsw i64 %iv, 1
3503   %exitcond = icmp eq i64 %iv.next, 1000
3504   br i1 %exitcond, label %for.end, label %for.body
3506   for.end:
3507   ret void
3510 define void @sinh_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
3511 ; SLEEF-NEON-LABEL: define void @sinh_f32
3512 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3513 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_sinhf(<4 x float> [[WIDE_LOAD:%.*]])
3515 ; SLEEF-SVE-LABEL: define void @sinh_f32
3516 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3517 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_sinhf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
3519 ; SLEEF-SVE-NOPRED-LABEL: define void @sinh_f32
3520 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3521 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_sinhf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
3522 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call float @sinhf(float [[IN:%.*]])
3524 ; ARMPL-NEON-LABEL: define void @sinh_f32
3525 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3526 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vsinhq_f32(<4 x float> [[WIDE_LOAD:%.*]])
3528 ; ARMPL-SVE-LABEL: define void @sinh_f32
3529 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3530 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @armpl_svsinh_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
3532 ; ARMPL-SVE-NOPRED-LABEL: define void @sinh_f32
3533 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3534 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @armpl_svsinh_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
3535 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call float @sinhf(float [[IN:%.*]])
3537   entry:
3538   br label %for.body
3540   for.body:
3541   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
3542   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
3543   %in = load float, ptr %in.gep, align 8
3544   %call = tail call float @sinhf(float %in)
3545   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
3546   store float %call, ptr %out.gep, align 4
3547   %iv.next = add nuw nsw i64 %iv, 1
3548   %exitcond = icmp eq i64 %iv.next, 1000
3549   br i1 %exitcond, label %for.end, label %for.body
3551   for.end:
3552   ret void
3555 declare double @sinpi(double)
3556 declare float @sinpif(float)
3558 define void @sinpi_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
3559 ; SLEEF-NEON-LABEL: define void @sinpi_f64
3560 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3561 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_sinpi(<2 x double> [[WIDE_LOAD:%.*]])
3563 ; SLEEF-SVE-LABEL: define void @sinpi_f64
3564 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3565 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_sinpi(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
3567 ; SLEEF-SVE-NOPRED-LABEL: define void @sinpi_f64
3568 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3569 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_sinpi(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
3570 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call double @sinpi(double [[IN:%.*]])
3572 ; ARMPL-NEON-LABEL: define void @sinpi_f64
3573 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3574 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vsinpiq_f64(<2 x double> [[WIDE_LOAD:%.*]])
3576 ; ARMPL-SVE-LABEL: define void @sinpi_f64
3577 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3578 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @armpl_svsinpi_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
3580 ; ARMPL-SVE-NOPRED-LABEL: define void @sinpi_f64
3581 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3582 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @armpl_svsinpi_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
3583 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call double @sinpi(double [[IN:%.*]])
3585   entry:
3586   br label %for.body
3588   for.body:
3589   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
3590   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
3591   %in = load double, ptr %in.gep, align 8
3592   %call = tail call double @sinpi(double %in)
3593   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
3594   store double %call, ptr %out.gep, align 8
3595   %iv.next = add nuw nsw i64 %iv, 1
3596   %exitcond = icmp eq i64 %iv.next, 1000
3597   br i1 %exitcond, label %for.end, label %for.body
3599   for.end:
3600   ret void
3603 define void @sinpi_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
3604 ; SLEEF-NEON-LABEL: define void @sinpi_f32
3605 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3606 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_sinpif(<4 x float> [[WIDE_LOAD:%.*]])
3608 ; SLEEF-SVE-LABEL: define void @sinpi_f32
3609 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3610 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_sinpif(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
3612 ; SLEEF-SVE-NOPRED-LABEL: define void @sinpi_f32
3613 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3614 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_sinpif(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
3615 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call float @sinpif(float [[IN:%.*]])
3617 ; ARMPL-NEON-LABEL: define void @sinpi_f32
3618 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3619 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vsinpiq_f32(<4 x float> [[WIDE_LOAD:%.*]])
3621 ; ARMPL-SVE-LABEL: define void @sinpi_f32
3622 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3623 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @armpl_svsinpi_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
3625 ; ARMPL-SVE-NOPRED-LABEL: define void @sinpi_f32
3626 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3627 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @armpl_svsinpi_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
3628 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call float @sinpif(float [[IN:%.*]])
3630   entry:
3631   br label %for.body
3633   for.body:
3634   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
3635   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
3636   %in = load float, ptr %in.gep, align 8
3637   %call = tail call float @sinpif(float %in)
3638   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
3639   store float %call, ptr %out.gep, align 4
3640   %iv.next = add nuw nsw i64 %iv, 1
3641   %exitcond = icmp eq i64 %iv.next, 1000
3642   br i1 %exitcond, label %for.end, label %for.body
3644   for.end:
3645   ret void
3648 declare double @sqrt(double)
3649 declare float @sqrtf(float)
3651 define void @sqrt_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
3652 ; SLEEF-NEON-LABEL: define void @sqrt_f64
3653 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3654 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_sqrt(<2 x double> [[WIDE_LOAD:%.*]])
3656 ; SLEEF-SVE-LABEL: define void @sqrt_f64
3657 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3658 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_sqrt(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
3660 ; SLEEF-SVE-NOPRED-LABEL: define void @sqrt_f64
3661 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3662 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_sqrt(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
3663 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call double @sqrt(double [[IN:%.*]])
3665 ; ARMPL-NEON-LABEL: define void @sqrt_f64
3666 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3667 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vsqrtq_f64(<2 x double> [[WIDE_LOAD:%.*]])
3669 ; ARMPL-SVE-LABEL: define void @sqrt_f64
3670 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3671 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @armpl_svsqrt_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
3673 ; ARMPL-SVE-NOPRED-LABEL: define void @sqrt_f64
3674 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3675 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @armpl_svsqrt_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
3676 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call double @sqrt(double [[IN:%.*]])
3678   entry:
3679   br label %for.body
3681   for.body:
3682   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
3683   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
3684   %in = load double, ptr %in.gep, align 8
3685   %call = tail call double @sqrt(double %in)
3686   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
3687   store double %call, ptr %out.gep, align 8
3688   %iv.next = add nuw nsw i64 %iv, 1
3689   %exitcond = icmp eq i64 %iv.next, 1000
3690   br i1 %exitcond, label %for.end, label %for.body
3692   for.end:
3693   ret void
3696 define void @sqrt_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
3697 ; SLEEF-NEON-LABEL: define void @sqrt_f32
3698 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3699 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_sqrtf(<4 x float> [[WIDE_LOAD:%.*]])
3701 ; SLEEF-SVE-LABEL: define void @sqrt_f32
3702 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3703 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_sqrtf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
3705 ; SLEEF-SVE-NOPRED-LABEL: define void @sqrt_f32
3706 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3707 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_sqrtf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
3708 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call float @sqrtf(float [[IN:%.*]])
3710 ; ARMPL-NEON-LABEL: define void @sqrt_f32
3711 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3712 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vsqrtq_f32(<4 x float> [[WIDE_LOAD:%.*]])
3714 ; ARMPL-SVE-LABEL: define void @sqrt_f32
3715 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3716 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @armpl_svsqrt_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
3718 ; ARMPL-SVE-NOPRED-LABEL: define void @sqrt_f32
3719 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3720 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @armpl_svsqrt_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
3721 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call float @sqrtf(float [[IN:%.*]])
3723   entry:
3724   br label %for.body
3726   for.body:
3727   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
3728   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
3729   %in = load float, ptr %in.gep, align 8
3730   %call = tail call float @sqrtf(float %in)
3731   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
3732   store float %call, ptr %out.gep, align 4
3733   %iv.next = add nuw nsw i64 %iv, 1
3734   %exitcond = icmp eq i64 %iv.next, 1000
3735   br i1 %exitcond, label %for.end, label %for.body
3737   for.end:
3738   ret void
3741 declare double @tan(double)
3742 declare float @tanf(float)
3744 define void @tan_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
3745 ; SLEEF-NEON-LABEL: define void @tan_f64
3746 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3747 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_tan(<2 x double> [[WIDE_LOAD:%.*]])
3749 ; SLEEF-SVE-LABEL: define void @tan_f64
3750 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3751 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_tan(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
3753 ; SLEEF-SVE-NOPRED-LABEL: define void @tan_f64
3754 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3755 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_tan(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
3756 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call double @tan(double [[IN:%.*]])
3758 ; ARMPL-NEON-LABEL: define void @tan_f64
3759 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3760 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vtanq_f64(<2 x double> [[WIDE_LOAD:%.*]])
3762 ; ARMPL-SVE-LABEL: define void @tan_f64
3763 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3764 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @armpl_svtan_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
3766 ; ARMPL-SVE-NOPRED-LABEL: define void @tan_f64
3767 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3768 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @armpl_svtan_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
3769 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call double @tan(double [[IN:%.*]])
3771   entry:
3772   br label %for.body
3774   for.body:
3775   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
3776   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
3777   %in = load double, ptr %in.gep, align 8
3778   %call = tail call double @tan(double %in)
3779   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
3780   store double %call, ptr %out.gep, align 8
3781   %iv.next = add nuw nsw i64 %iv, 1
3782   %exitcond = icmp eq i64 %iv.next, 1000
3783   br i1 %exitcond, label %for.end, label %for.body
3785   for.end:
3786   ret void
3789 define void @tan_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
3790 ; SLEEF-NEON-LABEL: define void @tan_f32
3791 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3792 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_tanf(<4 x float> [[WIDE_LOAD:%.*]])
3794 ; SLEEF-SVE-LABEL: define void @tan_f32
3795 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3796 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_tanf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
3798 ; SLEEF-SVE-NOPRED-LABEL: define void @tan_f32
3799 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3800 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_tanf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
3801 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call float @tanf(float [[IN:%.*]])
3803 ; ARMPL-NEON-LABEL: define void @tan_f32
3804 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3805 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vtanq_f32(<4 x float> [[WIDE_LOAD:%.*]])
3807 ; ARMPL-SVE-LABEL: define void @tan_f32
3808 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3809 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @armpl_svtan_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
3811 ; ARMPL-SVE-NOPRED-LABEL: define void @tan_f32
3812 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3813 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @armpl_svtan_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
3814 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call float @tanf(float [[IN:%.*]])
3816   entry:
3817   br label %for.body
3819   for.body:
3820   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
3821   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
3822   %in = load float, ptr %in.gep, align 8
3823   %call = tail call float @tanf(float %in)
3824   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
3825   store float %call, ptr %out.gep, align 4
3826   %iv.next = add nuw nsw i64 %iv, 1
3827   %exitcond = icmp eq i64 %iv.next, 1000
3828   br i1 %exitcond, label %for.end, label %for.body
3830   for.end:
3831   ret void
3834 declare double @tanh(double)
3835 declare float @tanhf(float)
3837 define void @tanh_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
3838 ; SLEEF-NEON-LABEL: define void @tanh_f64
3839 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3840 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_tanh(<2 x double> [[WIDE_LOAD:%.*]])
3842 ; SLEEF-SVE-LABEL: define void @tanh_f64
3843 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3844 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_tanh(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
3846 ; SLEEF-SVE-NOPRED-LABEL: define void @tanh_f64
3847 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3848 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_tanh(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
3849 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call double @tanh(double [[IN:%.*]])
3851 ; ARMPL-NEON-LABEL: define void @tanh_f64
3852 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3853 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vtanhq_f64(<2 x double> [[WIDE_LOAD:%.*]])
3855 ; ARMPL-SVE-LABEL: define void @tanh_f64
3856 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3857 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @armpl_svtanh_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
3859 ; ARMPL-SVE-NOPRED-LABEL: define void @tanh_f64
3860 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3861 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @armpl_svtanh_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
3862 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call double @tanh(double [[IN:%.*]])
3864   entry:
3865   br label %for.body
3867   for.body:
3868   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
3869   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
3870   %in = load double, ptr %in.gep, align 8
3871   %call = tail call double @tanh(double %in)
3872   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
3873   store double %call, ptr %out.gep, align 8
3874   %iv.next = add nuw nsw i64 %iv, 1
3875   %exitcond = icmp eq i64 %iv.next, 1000
3876   br i1 %exitcond, label %for.end, label %for.body
3878   for.end:
3879   ret void
3882 define void @tanh_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
3883 ; SLEEF-NEON-LABEL: define void @tanh_f32
3884 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3885 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_tanhf(<4 x float> [[WIDE_LOAD:%.*]])
3887 ; SLEEF-SVE-LABEL: define void @tanh_f32
3888 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3889 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_tanhf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
3891 ; SLEEF-SVE-NOPRED-LABEL: define void @tanh_f32
3892 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3893 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_tanhf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
3894 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call float @tanhf(float [[IN:%.*]])
3896 ; ARMPL-NEON-LABEL: define void @tanh_f32
3897 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3898 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vtanhq_f32(<4 x float> [[WIDE_LOAD:%.*]])
3900 ; ARMPL-SVE-LABEL: define void @tanh_f32
3901 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3902 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @armpl_svtanh_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
3904 ; ARMPL-SVE-NOPRED-LABEL: define void @tanh_f32
3905 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3906 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @armpl_svtanh_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
3907 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call float @tanhf(float [[IN:%.*]])
3909   entry:
3910   br label %for.body
3912   for.body:
3913   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
3914   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
3915   %in = load float, ptr %in.gep, align 8
3916   %call = tail call float @tanhf(float %in)
3917   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
3918   store float %call, ptr %out.gep, align 4
3919   %iv.next = add nuw nsw i64 %iv, 1
3920   %exitcond = icmp eq i64 %iv.next, 1000
3921   br i1 %exitcond, label %for.end, label %for.body
3923   for.end:
3924   ret void
3927 declare double @tgamma(double)
3928 declare float @tgammaf(float)
3930 define void @tgamma_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
3931 ; SLEEF-NEON-LABEL: define void @tgamma_f64
3932 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3933 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_tgamma(<2 x double> [[WIDE_LOAD:%.*]])
3935 ; SLEEF-SVE-LABEL: define void @tgamma_f64
3936 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3937 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_tgamma(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
3939 ; SLEEF-SVE-NOPRED-LABEL: define void @tgamma_f64
3940 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3941 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_tgamma(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
3942 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call double @tgamma(double [[IN:%.*]])
3944 ; ARMPL-NEON-LABEL: define void @tgamma_f64
3945 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3946 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vtgammaq_f64(<2 x double> [[WIDE_LOAD:%.*]])
3948 ; ARMPL-SVE-LABEL: define void @tgamma_f64
3949 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3950 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 2 x double> @armpl_svtgamma_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
3952 ; ARMPL-SVE-NOPRED-LABEL: define void @tgamma_f64
3953 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3954 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 2 x double> @armpl_svtgamma_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))
3955 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call double @tgamma(double [[IN:%.*]])
3957   entry:
3958   br label %for.body
3960   for.body:
3961   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
3962   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
3963   %in = load double, ptr %in.gep, align 8
3964   %call = tail call double @tgamma(double %in)
3965   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
3966   store double %call, ptr %out.gep, align 8
3967   %iv.next = add nuw nsw i64 %iv, 1
3968   %exitcond = icmp eq i64 %iv.next, 1000
3969   br i1 %exitcond, label %for.end, label %for.body
3971   for.end:
3972   ret void
3975 define void @tgamma_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
3976 ; SLEEF-NEON-LABEL: define void @tgamma_f32
3977 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3978 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_tgammaf(<4 x float> [[WIDE_LOAD:%.*]])
3980 ; SLEEF-SVE-LABEL: define void @tgamma_f32
3981 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3982 ; SLEEF-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_tgammaf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
3984 ; SLEEF-SVE-NOPRED-LABEL: define void @tgamma_f32
3985 ; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3986 ; SLEEF-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_tgammaf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
3987 ; SLEEF-SVE-NOPRED:    [[CALL:%.*]] = tail call float @tgammaf(float [[IN:%.*]])
3989 ; ARMPL-NEON-LABEL: define void @tgamma_f32
3990 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3991 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vtgammaq_f32(<4 x float> [[WIDE_LOAD:%.*]])
3993 ; ARMPL-SVE-LABEL: define void @tgamma_f32
3994 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3995 ; ARMPL-SVE:    [[TMP13:%.*]] = call <vscale x 4 x float> @armpl_svtgamma_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
3997 ; ARMPL-SVE-NOPRED-LABEL: define void @tgamma_f32
3998 ; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3999 ; ARMPL-SVE-NOPRED:    [[TMP9:%.*]] = call <vscale x 4 x float> @armpl_svtgamma_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))
4000 ; ARMPL-SVE-NOPRED:    [[CALL:%.*]] = tail call float @tgammaf(float [[IN:%.*]])
4002   entry:
4003   br label %for.body
4005   for.body:
4006   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
4007   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
4008   %in = load float, ptr %in.gep, align 8
4009   %call = tail call float @tgammaf(float %in)
4010   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
4011   store float %call, ptr %out.gep, align 4
4012   %iv.next = add nuw nsw i64 %iv, 1
4013   %exitcond = icmp eq i64 %iv.next, 1000
4014   br i1 %exitcond, label %for.end, label %for.body
4016   for.end:
4017   ret void