Re-land [openmp] Fix warnings when building on Windows with latest MSVC or Clang...
[llvm-project.git] / llvm / test / Transforms / LoopVectorize / AArch64 / veclib-function-calls.ll
blobd07f72792e6b991e996753ef21298d0ff2a1cd5f
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --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 -force-vector-interleave=1 -prefer-predicate-over-epilogue=predicate-dont-vectorize -S < %s | FileCheck %s --check-prefix=SLEEF-SVE
4 ; 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
5 ; RUN: opt -mattr=+sve -vector-library=ArmPL -passes=inject-tli-mappings,loop-vectorize,simplifycfg -force-vector-interleave=1 -prefer-predicate-over-epilogue=predicate-dont-vectorize -S < %s | FileCheck %s --check-prefix=ARMPL-SVE
7 target triple = "aarch64-unknown-linux-gnu"
9 ; We are checking whether loops containing function calls can be vectorized,
10 ; when the compiler provides TLI mappings to their vector variants. The tests
11 ; are checking fixed width vectorization with NEON and scalable vectorization
12 ; with SVE.
14 declare double @acos(double)
15 declare float @acosf(float)
17 define void @acos_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
18 ; SLEEF-NEON-LABEL: define void @acos_f64
19 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0:[0-9]+]] {
20 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_acos(<2 x double> [[WIDE_LOAD:%.*]])
22 ; SLEEF-SVE-LABEL: define void @acos_f64
23 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0:[0-9]+]] {
24 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_acos(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
26 ; ARMPL-NEON-LABEL: define void @acos_f64
27 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0:[0-9]+]] {
28 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vacosq_f64(<2 x double> [[WIDE_LOAD:%.*]])
30 ; ARMPL-SVE-LABEL: define void @acos_f64
31 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0:[0-9]+]] {
32 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
34   entry:
35   br label %for.body
37   for.body:
38   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
39   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
40   %in = load double, ptr %in.gep, align 8
41   %call = tail call double @acos(double %in)
42   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
43   store double %call, ptr %out.gep, align 8
44   %iv.next = add nuw nsw i64 %iv, 1
45   %exitcond = icmp eq i64 %iv.next, 1000
46   br i1 %exitcond, label %for.end, label %for.body
48   for.end:
49   ret void
52 define void @acos_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
53 ; SLEEF-NEON-LABEL: define void @acos_f32
54 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
55 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_acosf(<4 x float> [[WIDE_LOAD:%.*]])
57 ; SLEEF-SVE-LABEL: define void @acos_f32
58 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
59 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_acosf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
61 ; ARMPL-NEON-LABEL: define void @acos_f32
62 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
63 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vacosq_f32(<4 x float> [[WIDE_LOAD:%.*]])
65 ; ARMPL-SVE-LABEL: define void @acos_f32
66 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
67 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
69   entry:
70   br label %for.body
72   for.body:
73   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
74   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
75   %in = load float, ptr %in.gep, align 8
76   %call = tail call float @acosf(float %in)
77   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
78   store float %call, ptr %out.gep, align 4
79   %iv.next = add nuw nsw i64 %iv, 1
80   %exitcond = icmp eq i64 %iv.next, 1000
81   br i1 %exitcond, label %for.end, label %for.body
83   for.end:
84   ret void
87 declare double @acosh(double)
88 declare float @acoshf(float)
90 define void @acosh_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
91 ; SLEEF-NEON-LABEL: define void @acosh_f64
92 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
93 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_acosh(<2 x double> [[WIDE_LOAD:%.*]])
95 ; SLEEF-SVE-LABEL: define void @acosh_f64
96 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
97 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_acosh(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
99 ; ARMPL-NEON-LABEL: define void @acosh_f64
100 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
101 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vacoshq_f64(<2 x double> [[WIDE_LOAD:%.*]])
103 ; ARMPL-SVE-LABEL: define void @acosh_f64
104 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
105 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
107   entry:
108   br label %for.body
110   for.body:
111   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
112   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
113   %in = load double, ptr %in.gep, align 8
114   %call = tail call double @acosh(double %in)
115   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
116   store double %call, ptr %out.gep, align 8
117   %iv.next = add nuw nsw i64 %iv, 1
118   %exitcond = icmp eq i64 %iv.next, 1000
119   br i1 %exitcond, label %for.end, label %for.body
121   for.end:
122   ret void
125 define void @acosh_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
126 ; SLEEF-NEON-LABEL: define void @acosh_f32
127 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
128 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_acoshf(<4 x float> [[WIDE_LOAD:%.*]])
130 ; SLEEF-SVE-LABEL: define void @acosh_f32
131 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
132 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_acoshf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
134 ; ARMPL-NEON-LABEL: define void @acosh_f32
135 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
136 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vacoshq_f32(<4 x float> [[WIDE_LOAD:%.*]])
138 ; ARMPL-SVE-LABEL: define void @acosh_f32
139 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
140 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
142   entry:
143   br label %for.body
145   for.body:
146   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
147   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
148   %in = load float, ptr %in.gep, align 8
149   %call = tail call float @acoshf(float %in)
150   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
151   store float %call, ptr %out.gep, align 4
152   %iv.next = add nuw nsw i64 %iv, 1
153   %exitcond = icmp eq i64 %iv.next, 1000
154   br i1 %exitcond, label %for.end, label %for.body
156   for.end:
157   ret void
160 declare double @asin(double)
161 declare float @asinf(float)
163 define void @asin_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
164 ; SLEEF-NEON-LABEL: define void @asin_f64
165 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
166 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_asin(<2 x double> [[WIDE_LOAD:%.*]])
168 ; SLEEF-SVE-LABEL: define void @asin_f64
169 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
170 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_asin(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
172 ; ARMPL-NEON-LABEL: define void @asin_f64
173 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
174 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vasinq_f64(<2 x double> [[WIDE_LOAD:%.*]])
176 ; ARMPL-SVE-LABEL: define void @asin_f64
177 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
178 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
180   entry:
181   br label %for.body
183   for.body:
184   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
185   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
186   %in = load double, ptr %in.gep, align 8
187   %call = tail call double @asin(double %in)
188   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
189   store double %call, ptr %out.gep, align 8
190   %iv.next = add nuw nsw i64 %iv, 1
191   %exitcond = icmp eq i64 %iv.next, 1000
192   br i1 %exitcond, label %for.end, label %for.body
194   for.end:
195   ret void
198 define void @asin_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
199 ; SLEEF-NEON-LABEL: define void @asin_f32
200 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
201 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_asinf(<4 x float> [[WIDE_LOAD:%.*]])
203 ; SLEEF-SVE-LABEL: define void @asin_f32
204 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
205 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_asinf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
207 ; ARMPL-NEON-LABEL: define void @asin_f32
208 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
209 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vasinq_f32(<4 x float> [[WIDE_LOAD:%.*]])
211 ; ARMPL-SVE-LABEL: define void @asin_f32
212 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
213 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
215   entry:
216   br label %for.body
218   for.body:
219   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
220   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
221   %in = load float, ptr %in.gep, align 8
222   %call = tail call float @asinf(float %in)
223   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
224   store float %call, ptr %out.gep, align 4
225   %iv.next = add nuw nsw i64 %iv, 1
226   %exitcond = icmp eq i64 %iv.next, 1000
227   br i1 %exitcond, label %for.end, label %for.body
229   for.end:
230   ret void
233 declare double @asinh(double)
234 declare float @asinhf(float)
236 define void @asinh_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
237 ; SLEEF-NEON-LABEL: define void @asinh_f64
238 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
239 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_asinh(<2 x double> [[WIDE_LOAD:%.*]])
241 ; SLEEF-SVE-LABEL: define void @asinh_f64
242 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
243 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_asinh(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
245 ; ARMPL-NEON-LABEL: define void @asinh_f64
246 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
247 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vasinhq_f64(<2 x double> [[WIDE_LOAD:%.*]])
249 ; ARMPL-SVE-LABEL: define void @asinh_f64
250 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
251 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
253   entry:
254   br label %for.body
256   for.body:
257   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
258   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
259   %in = load double, ptr %in.gep, align 8
260   %call = tail call double @asinh(double %in)
261   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
262   store double %call, ptr %out.gep, align 8
263   %iv.next = add nuw nsw i64 %iv, 1
264   %exitcond = icmp eq i64 %iv.next, 1000
265   br i1 %exitcond, label %for.end, label %for.body
267   for.end:
268   ret void
271 define void @asinh_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
272 ; SLEEF-NEON-LABEL: define void @asinh_f32
273 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
274 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_asinhf(<4 x float> [[WIDE_LOAD:%.*]])
276 ; SLEEF-SVE-LABEL: define void @asinh_f32
277 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
278 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_asinhf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
280 ; ARMPL-NEON-LABEL: define void @asinh_f32
281 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
282 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vasinhq_f32(<4 x float> [[WIDE_LOAD:%.*]])
284 ; ARMPL-SVE-LABEL: define void @asinh_f32
285 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
286 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
288   entry:
289   br label %for.body
291   for.body:
292   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
293   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
294   %in = load float, ptr %in.gep, align 8
295   %call = tail call float @asinhf(float %in)
296   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
297   store float %call, ptr %out.gep, align 4
298   %iv.next = add nuw nsw i64 %iv, 1
299   %exitcond = icmp eq i64 %iv.next, 1000
300   br i1 %exitcond, label %for.end, label %for.body
302   for.end:
303   ret void
306 declare double @atan(double)
307 declare float @atanf(float)
309 define void @atan_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
310 ; SLEEF-NEON-LABEL: define void @atan_f64
311 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
312 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_atan(<2 x double> [[WIDE_LOAD:%.*]])
314 ; SLEEF-SVE-LABEL: define void @atan_f64
315 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
316 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_atan(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
318 ; ARMPL-NEON-LABEL: define void @atan_f64
319 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
320 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vatanq_f64(<2 x double> [[WIDE_LOAD:%.*]])
322 ; ARMPL-SVE-LABEL: define void @atan_f64
323 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
324 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
326   entry:
327   br label %for.body
329   for.body:
330   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
331   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
332   %in = load double, ptr %in.gep, align 8
333   %call = tail call double @atan(double %in)
334   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
335   store double %call, ptr %out.gep, align 8
336   %iv.next = add nuw nsw i64 %iv, 1
337   %exitcond = icmp eq i64 %iv.next, 1000
338   br i1 %exitcond, label %for.end, label %for.body
340   for.end:
341   ret void
344 define void @atan_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
345 ; SLEEF-NEON-LABEL: define void @atan_f32
346 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
347 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_atanf(<4 x float> [[WIDE_LOAD:%.*]])
349 ; SLEEF-SVE-LABEL: define void @atan_f32
350 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
351 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_atanf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
353 ; ARMPL-NEON-LABEL: define void @atan_f32
354 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
355 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vatanq_f32(<4 x float> [[WIDE_LOAD:%.*]])
357 ; ARMPL-SVE-LABEL: define void @atan_f32
358 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
359 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
361   entry:
362   br label %for.body
364   for.body:
365   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
366   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
367   %in = load float, ptr %in.gep, align 8
368   %call = tail call float @atanf(float %in)
369   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
370   store float %call, ptr %out.gep, align 4
371   %iv.next = add nuw nsw i64 %iv, 1
372   %exitcond = icmp eq i64 %iv.next, 1000
373   br i1 %exitcond, label %for.end, label %for.body
375   for.end:
376   ret void
379 declare double @atan2(double, double)
380 declare float @atan2f(float, float)
382 define void @atan2_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
383 ; SLEEF-NEON-LABEL: define void @atan2_f64
384 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
385 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2vv_atan2(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])
387 ; SLEEF-SVE-LABEL: define void @atan2_f64
388 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
389 ; SLEEF-SVE:    [[TMP15:%.*]] = 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:%.*]])
391 ; ARMPL-NEON-LABEL: define void @atan2_f64
392 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
393 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vatan2q_f64(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])
395 ; ARMPL-SVE-LABEL: define void @atan2_f64
396 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
397 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
399   entry:
400   br label %for.body
402   for.body:
403   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
404   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
405   %in = load double, ptr %in.gep, align 8
406   %call = tail call double @atan2(double %in, double %in)
407   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
408   store double %call, ptr %out.gep, align 8
409   %iv.next = add nuw nsw i64 %iv, 1
410   %exitcond = icmp eq i64 %iv.next, 1000
411   br i1 %exitcond, label %for.end, label %for.body
413   for.end:
414   ret void
417 define void @atan2_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
418 ; SLEEF-NEON-LABEL: define void @atan2_f32
419 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
420 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4vv_atan2f(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])
422 ; SLEEF-SVE-LABEL: define void @atan2_f32
423 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
424 ; SLEEF-SVE:    [[TMP15:%.*]] = 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:%.*]])
426 ; ARMPL-NEON-LABEL: define void @atan2_f32
427 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
428 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vatan2q_f32(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])
430 ; ARMPL-SVE-LABEL: define void @atan2_f32
431 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
432 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
434   entry:
435   br label %for.body
437   for.body:
438   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
439   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
440   %in = load float, ptr %in.gep, align 8
441   %call = tail call float @atan2f(float %in, float %in)
442   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
443   store float %call, ptr %out.gep, align 4
444   %iv.next = add nuw nsw i64 %iv, 1
445   %exitcond = icmp eq i64 %iv.next, 1000
446   br i1 %exitcond, label %for.end, label %for.body
448   for.end:
449   ret void
452 declare double @atanh(double)
453 declare float @atanhf(float)
455 define void @atanh_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
456 ; SLEEF-NEON-LABEL: define void @atanh_f64
457 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
458 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_atanh(<2 x double> [[WIDE_LOAD:%.*]])
460 ; SLEEF-SVE-LABEL: define void @atanh_f64
461 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
462 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_atanh(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
464 ; ARMPL-NEON-LABEL: define void @atanh_f64
465 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
466 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vatanhq_f64(<2 x double> [[WIDE_LOAD:%.*]])
468 ; ARMPL-SVE-LABEL: define void @atanh_f64
469 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
470 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
472   entry:
473   br label %for.body
475   for.body:
476   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
477   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
478   %in = load double, ptr %in.gep, align 8
479   %call = tail call double @atanh(double %in)
480   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
481   store double %call, ptr %out.gep, align 8
482   %iv.next = add nuw nsw i64 %iv, 1
483   %exitcond = icmp eq i64 %iv.next, 1000
484   br i1 %exitcond, label %for.end, label %for.body
486   for.end:
487   ret void
490 define void @atanh_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
491 ; SLEEF-NEON-LABEL: define void @atanh_f32
492 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
493 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_atanhf(<4 x float> [[WIDE_LOAD:%.*]])
495 ; SLEEF-SVE-LABEL: define void @atanh_f32
496 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
497 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_atanhf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
499 ; ARMPL-NEON-LABEL: define void @atanh_f32
500 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
501 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vatanhq_f32(<4 x float> [[WIDE_LOAD:%.*]])
503 ; ARMPL-SVE-LABEL: define void @atanh_f32
504 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
505 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
507   entry:
508   br label %for.body
510   for.body:
511   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
512   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
513   %in = load float, ptr %in.gep, align 8
514   %call = tail call float @atanhf(float %in)
515   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
516   store float %call, ptr %out.gep, align 4
517   %iv.next = add nuw nsw i64 %iv, 1
518   %exitcond = icmp eq i64 %iv.next, 1000
519   br i1 %exitcond, label %for.end, label %for.body
521   for.end:
522   ret void
525 declare double @cbrt(double)
526 declare float @cbrtf(float)
528 define void @cbrt_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
529 ; SLEEF-NEON-LABEL: define void @cbrt_f64
530 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
531 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_cbrt(<2 x double> [[WIDE_LOAD:%.*]])
533 ; SLEEF-SVE-LABEL: define void @cbrt_f64
534 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
535 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_cbrt(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
537 ; ARMPL-NEON-LABEL: define void @cbrt_f64
538 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
539 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vcbrtq_f64(<2 x double> [[WIDE_LOAD:%.*]])
541 ; ARMPL-SVE-LABEL: define void @cbrt_f64
542 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
543 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
545   entry:
546   br label %for.body
548   for.body:
549   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
550   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
551   %in = load double, ptr %in.gep, align 8
552   %call = tail call double @cbrt(double %in)
553   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
554   store double %call, ptr %out.gep, align 8
555   %iv.next = add nuw nsw i64 %iv, 1
556   %exitcond = icmp eq i64 %iv.next, 1000
557   br i1 %exitcond, label %for.end, label %for.body
559   for.end:
560   ret void
563 define void @cbrt_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
564 ; SLEEF-NEON-LABEL: define void @cbrt_f32
565 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
566 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_cbrtf(<4 x float> [[WIDE_LOAD:%.*]])
568 ; SLEEF-SVE-LABEL: define void @cbrt_f32
569 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
570 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_cbrtf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
572 ; ARMPL-NEON-LABEL: define void @cbrt_f32
573 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
574 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vcbrtq_f32(<4 x float> [[WIDE_LOAD:%.*]])
576 ; ARMPL-SVE-LABEL: define void @cbrt_f32
577 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
578 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
580   entry:
581   br label %for.body
583   for.body:
584   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
585   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
586   %in = load float, ptr %in.gep, align 8
587   %call = tail call float @cbrtf(float %in)
588   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
589   store float %call, ptr %out.gep, align 4
590   %iv.next = add nuw nsw i64 %iv, 1
591   %exitcond = icmp eq i64 %iv.next, 1000
592   br i1 %exitcond, label %for.end, label %for.body
594   for.end:
595   ret void
598 declare double @copysign(double, double)
599 declare float @copysignf(float, float)
601 define void @copysign_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
602 ; SLEEF-NEON-LABEL: define void @copysign_f64
603 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
604 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2vv_copysign(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])
606 ; SLEEF-SVE-LABEL: define void @copysign_f64
607 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
608 ; SLEEF-SVE:    [[TMP15:%.*]] = 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:%.*]])
610 ; ARMPL-NEON-LABEL: define void @copysign_f64
611 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
612 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vcopysignq_f64(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])
614 ; ARMPL-SVE-LABEL: define void @copysign_f64
615 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
616 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
618   entry:
619   br label %for.body
621   for.body:
622   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
623   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
624   %in = load double, ptr %in.gep, align 8
625   %call = tail call double @copysign(double %in, double %in)
626   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
627   store double %call, ptr %out.gep, align 8
628   %iv.next = add nuw nsw i64 %iv, 1
629   %exitcond = icmp eq i64 %iv.next, 1000
630   br i1 %exitcond, label %for.end, label %for.body
632   for.end:
633   ret void
636 define void @copysign_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
637 ; SLEEF-NEON-LABEL: define void @copysign_f32
638 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
639 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4vv_copysignf(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])
641 ; SLEEF-SVE-LABEL: define void @copysign_f32
642 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
643 ; SLEEF-SVE:    [[TMP15:%.*]] = 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:%.*]])
645 ; ARMPL-NEON-LABEL: define void @copysign_f32
646 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
647 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vcopysignq_f32(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])
649 ; ARMPL-SVE-LABEL: define void @copysign_f32
650 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
651 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
653   entry:
654   br label %for.body
656   for.body:
657   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
658   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
659   %in = load float, ptr %in.gep, align 8
660   %call = tail call float @copysignf(float %in, float %in)
661   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
662   store float %call, ptr %out.gep, align 4
663   %iv.next = add nuw nsw i64 %iv, 1
664   %exitcond = icmp eq i64 %iv.next, 1000
665   br i1 %exitcond, label %for.end, label %for.body
667   for.end:
668   ret void
671 declare double @cos(double)
672 declare float @cosf(float)
674 define void @cos_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
675 ; SLEEF-NEON-LABEL: define void @cos_f64
676 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
677 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_cos(<2 x double> [[WIDE_LOAD:%.*]])
679 ; SLEEF-SVE-LABEL: define void @cos_f64
680 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
681 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_cos(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
683 ; ARMPL-NEON-LABEL: define void @cos_f64
684 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
685 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vcosq_f64(<2 x double> [[WIDE_LOAD:%.*]])
687 ; ARMPL-SVE-LABEL: define void @cos_f64
688 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
689 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
691   entry:
692   br label %for.body
694   for.body:
695   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
696   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
697   %in = load double, ptr %in.gep, align 8
698   %call = tail call double @cos(double %in)
699   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
700   store double %call, ptr %out.gep, align 8
701   %iv.next = add nuw nsw i64 %iv, 1
702   %exitcond = icmp eq i64 %iv.next, 1000
703   br i1 %exitcond, label %for.end, label %for.body
705   for.end:
706   ret void
709 define void @cos_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
710 ; SLEEF-NEON-LABEL: define void @cos_f32
711 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
712 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_cosf(<4 x float> [[WIDE_LOAD:%.*]])
714 ; SLEEF-SVE-LABEL: define void @cos_f32
715 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
716 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_cosf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
718 ; ARMPL-NEON-LABEL: define void @cos_f32
719 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
720 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vcosq_f32(<4 x float> [[WIDE_LOAD:%.*]])
722 ; ARMPL-SVE-LABEL: define void @cos_f32
723 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
724 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
726   entry:
727   br label %for.body
729   for.body:
730   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
731   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
732   %in = load float, ptr %in.gep, align 8
733   %call = tail call float @cosf(float %in)
734   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
735   store float %call, ptr %out.gep, align 4
736   %iv.next = add nuw nsw i64 %iv, 1
737   %exitcond = icmp eq i64 %iv.next, 1000
738   br i1 %exitcond, label %for.end, label %for.body
740   for.end:
741   ret void
744 declare double @cosh(double)
745 declare float @coshf(float)
747 define void @cosh_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
748 ; SLEEF-NEON-LABEL: define void @cosh_f64
749 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
750 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_cosh(<2 x double> [[WIDE_LOAD:%.*]])
752 ; SLEEF-SVE-LABEL: define void @cosh_f64
753 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
754 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_cosh(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
756 ; ARMPL-NEON-LABEL: define void @cosh_f64
757 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
758 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vcoshq_f64(<2 x double> [[WIDE_LOAD:%.*]])
760 ; ARMPL-SVE-LABEL: define void @cosh_f64
761 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
762 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
764   entry:
765   br label %for.body
767   for.body:
768   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
769   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
770   %in = load double, ptr %in.gep, align 8
771   %call = tail call double @cosh(double %in)
772   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
773   store double %call, ptr %out.gep, align 8
774   %iv.next = add nuw nsw i64 %iv, 1
775   %exitcond = icmp eq i64 %iv.next, 1000
776   br i1 %exitcond, label %for.end, label %for.body
778   for.end:
779   ret void
782 define void @cosh_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
783 ; SLEEF-NEON-LABEL: define void @cosh_f32
784 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
785 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_coshf(<4 x float> [[WIDE_LOAD:%.*]])
787 ; SLEEF-SVE-LABEL: define void @cosh_f32
788 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
789 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_coshf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
791 ; ARMPL-NEON-LABEL: define void @cosh_f32
792 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
793 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vcoshq_f32(<4 x float> [[WIDE_LOAD:%.*]])
795 ; ARMPL-SVE-LABEL: define void @cosh_f32
796 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
797 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
799   entry:
800   br label %for.body
802   for.body:
803   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
804   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
805   %in = load float, ptr %in.gep, align 8
806   %call = tail call float @coshf(float %in)
807   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
808   store float %call, ptr %out.gep, align 4
809   %iv.next = add nuw nsw i64 %iv, 1
810   %exitcond = icmp eq i64 %iv.next, 1000
811   br i1 %exitcond, label %for.end, label %for.body
813   for.end:
814   ret void
817 declare double @cospi(double)
818 declare float @cospif(float)
820 define void @cospi_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
821 ; SLEEF-NEON-LABEL: define void @cospi_f64
822 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
823 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_cospi(<2 x double> [[WIDE_LOAD:%.*]])
825 ; SLEEF-SVE-LABEL: define void @cospi_f64
826 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
827 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_cospi(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
829 ; ARMPL-NEON-LABEL: define void @cospi_f64
830 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
831 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vcospiq_f64(<2 x double> [[WIDE_LOAD:%.*]])
833 ; ARMPL-SVE-LABEL: define void @cospi_f64
834 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
835 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
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 double, ptr %in.ptr, i64 %iv
843   %in = load double, ptr %in.gep, align 8
844   %call = tail call double @cospi(double %in)
845   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
846   store double %call, ptr %out.gep, align 8
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 define void @cospi_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
856 ; SLEEF-NEON-LABEL: define void @cospi_f32
857 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
858 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_cospif(<4 x float> [[WIDE_LOAD:%.*]])
860 ; SLEEF-SVE-LABEL: define void @cospi_f32
861 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
862 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_cospif(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
864 ; ARMPL-NEON-LABEL: define void @cospi_f32
865 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
866 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vcospiq_f32(<4 x float> [[WIDE_LOAD:%.*]])
868 ; ARMPL-SVE-LABEL: define void @cospi_f32
869 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
870 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
872   entry:
873   br label %for.body
875   for.body:
876   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
877   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
878   %in = load float, ptr %in.gep, align 8
879   %call = tail call float @cospif(float %in)
880   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
881   store float %call, ptr %out.gep, align 4
882   %iv.next = add nuw nsw i64 %iv, 1
883   %exitcond = icmp eq i64 %iv.next, 1000
884   br i1 %exitcond, label %for.end, label %for.body
886   for.end:
887   ret void
890 declare double @erf(double)
891 declare float @erff(float)
893 define void @erf_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
894 ; SLEEF-NEON-LABEL: define void @erf_f64
895 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
896 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_erf(<2 x double> [[WIDE_LOAD:%.*]])
898 ; SLEEF-SVE-LABEL: define void @erf_f64
899 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
900 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_erf(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
902 ; ARMPL-NEON-LABEL: define void @erf_f64
903 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
904 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_verfq_f64(<2 x double> [[WIDE_LOAD:%.*]])
906 ; ARMPL-SVE-LABEL: define void @erf_f64
907 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
908 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
910   entry:
911   br label %for.body
913   for.body:
914   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
915   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
916   %in = load double, ptr %in.gep, align 8
917   %call = tail call double @erf(double %in)
918   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
919   store double %call, ptr %out.gep, align 8
920   %iv.next = add nuw nsw i64 %iv, 1
921   %exitcond = icmp eq i64 %iv.next, 1000
922   br i1 %exitcond, label %for.end, label %for.body
924   for.end:
925   ret void
928 define void @erf_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
929 ; SLEEF-NEON-LABEL: define void @erf_f32
930 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
931 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_erff(<4 x float> [[WIDE_LOAD:%.*]])
933 ; SLEEF-SVE-LABEL: define void @erf_f32
934 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
935 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_erff(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
937 ; ARMPL-NEON-LABEL: define void @erf_f32
938 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
939 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_verfq_f32(<4 x float> [[WIDE_LOAD:%.*]])
941 ; ARMPL-SVE-LABEL: define void @erf_f32
942 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
943 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
945   entry:
946   br label %for.body
948   for.body:
949   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
950   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
951   %in = load float, ptr %in.gep, align 8
952   %call = tail call float @erff(float %in)
953   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
954   store float %call, ptr %out.gep, align 4
955   %iv.next = add nuw nsw i64 %iv, 1
956   %exitcond = icmp eq i64 %iv.next, 1000
957   br i1 %exitcond, label %for.end, label %for.body
959   for.end:
960   ret void
963 declare double @erfc(double)
964 declare float @erfcf(float)
966 define void @erfc_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
967 ; SLEEF-NEON-LABEL: define void @erfc_f64
968 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
969 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_erfc(<2 x double> [[WIDE_LOAD:%.*]])
971 ; SLEEF-SVE-LABEL: define void @erfc_f64
972 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
973 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_erfc(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
975 ; ARMPL-NEON-LABEL: define void @erfc_f64
976 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
977 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_verfcq_f64(<2 x double> [[WIDE_LOAD:%.*]])
979 ; ARMPL-SVE-LABEL: define void @erfc_f64
980 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
981 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
983   entry:
984   br label %for.body
986   for.body:
987   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
988   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
989   %in = load double, ptr %in.gep, align 8
990   %call = tail call double @erfc(double %in)
991   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
992   store double %call, ptr %out.gep, align 8
993   %iv.next = add nuw nsw i64 %iv, 1
994   %exitcond = icmp eq i64 %iv.next, 1000
995   br i1 %exitcond, label %for.end, label %for.body
997   for.end:
998   ret void
1001 define void @erfc_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1002 ; SLEEF-NEON-LABEL: define void @erfc_f32
1003 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1004 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_erfcf(<4 x float> [[WIDE_LOAD:%.*]])
1006 ; SLEEF-SVE-LABEL: define void @erfc_f32
1007 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1008 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_erfcf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
1010 ; ARMPL-NEON-LABEL: define void @erfc_f32
1011 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1012 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_verfcq_f32(<4 x float> [[WIDE_LOAD:%.*]])
1014 ; ARMPL-SVE-LABEL: define void @erfc_f32
1015 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1016 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
1018   entry:
1019   br label %for.body
1021   for.body:
1022   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1023   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
1024   %in = load float, ptr %in.gep, align 8
1025   %call = tail call float @erfcf(float %in)
1026   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
1027   store float %call, ptr %out.gep, align 4
1028   %iv.next = add nuw nsw i64 %iv, 1
1029   %exitcond = icmp eq i64 %iv.next, 1000
1030   br i1 %exitcond, label %for.end, label %for.body
1032   for.end:
1033   ret void
1036 declare double @exp(double)
1037 declare float @expf(float)
1039 define void @exp_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1040 ; SLEEF-NEON-LABEL: define void @exp_f64
1041 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1042 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_exp(<2 x double> [[WIDE_LOAD:%.*]])
1044 ; SLEEF-SVE-LABEL: define void @exp_f64
1045 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1046 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_exp(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
1048 ; ARMPL-NEON-LABEL: define void @exp_f64
1049 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1050 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vexpq_f64(<2 x double> [[WIDE_LOAD:%.*]])
1052 ; ARMPL-SVE-LABEL: define void @exp_f64
1053 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1054 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
1056   entry:
1057   br label %for.body
1059   for.body:
1060   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1061   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
1062   %in = load double, ptr %in.gep, align 8
1063   %call = tail call double @exp(double %in)
1064   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
1065   store double %call, ptr %out.gep, align 8
1066   %iv.next = add nuw nsw i64 %iv, 1
1067   %exitcond = icmp eq i64 %iv.next, 1000
1068   br i1 %exitcond, label %for.end, label %for.body
1070   for.end:
1071   ret void
1074 define void @exp_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1075 ; SLEEF-NEON-LABEL: define void @exp_f32
1076 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1077 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_expf(<4 x float> [[WIDE_LOAD:%.*]])
1079 ; SLEEF-SVE-LABEL: define void @exp_f32
1080 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1081 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_expf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
1083 ; ARMPL-NEON-LABEL: define void @exp_f32
1084 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1085 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vexpq_f32(<4 x float> [[WIDE_LOAD:%.*]])
1087 ; ARMPL-SVE-LABEL: define void @exp_f32
1088 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1089 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
1091   entry:
1092   br label %for.body
1094   for.body:
1095   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1096   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
1097   %in = load float, ptr %in.gep, align 8
1098   %call = tail call float @expf(float %in)
1099   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
1100   store float %call, ptr %out.gep, align 4
1101   %iv.next = add nuw nsw i64 %iv, 1
1102   %exitcond = icmp eq i64 %iv.next, 1000
1103   br i1 %exitcond, label %for.end, label %for.body
1105   for.end:
1106   ret void
1109 declare double @exp10(double)
1110 declare float @exp10f(float)
1112 define void @exp10_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1113 ; SLEEF-NEON-LABEL: define void @exp10_f64
1114 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1115 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_exp10(<2 x double> [[WIDE_LOAD:%.*]])
1117 ; SLEEF-SVE-LABEL: define void @exp10_f64
1118 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1119 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_exp10(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
1121 ; ARMPL-NEON-LABEL: define void @exp10_f64
1122 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1123 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vexp10q_f64(<2 x double> [[WIDE_LOAD:%.*]])
1125 ; ARMPL-SVE-LABEL: define void @exp10_f64
1126 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1127 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
1129   entry:
1130   br label %for.body
1132   for.body:
1133   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1134   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
1135   %in = load double, ptr %in.gep, align 8
1136   %call = tail call double @exp10(double %in)
1137   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
1138   store double %call, ptr %out.gep, align 8
1139   %iv.next = add nuw nsw i64 %iv, 1
1140   %exitcond = icmp eq i64 %iv.next, 1000
1141   br i1 %exitcond, label %for.end, label %for.body
1143   for.end:
1144   ret void
1147 define void @exp10_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1148 ; SLEEF-NEON-LABEL: define void @exp10_f32
1149 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1150 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_exp10f(<4 x float> [[WIDE_LOAD:%.*]])
1152 ; SLEEF-SVE-LABEL: define void @exp10_f32
1153 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1154 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_exp10f(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
1156 ; ARMPL-NEON-LABEL: define void @exp10_f32
1157 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1158 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vexp10q_f32(<4 x float> [[WIDE_LOAD:%.*]])
1160 ; ARMPL-SVE-LABEL: define void @exp10_f32
1161 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1162 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
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 float, ptr %in.ptr, i64 %iv
1170   %in = load float, ptr %in.gep, align 8
1171   %call = tail call float @exp10f(float %in)
1172   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
1173   store float %call, ptr %out.gep, align 4
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 declare double @exp2(double)
1183 declare float @exp2f(float)
1185 define void @exp2_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1186 ; SLEEF-NEON-LABEL: define void @exp2_f64
1187 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1188 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_exp2(<2 x double> [[WIDE_LOAD:%.*]])
1190 ; SLEEF-SVE-LABEL: define void @exp2_f64
1191 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1192 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_exp2(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
1194 ; ARMPL-NEON-LABEL: define void @exp2_f64
1195 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1196 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vexp2q_f64(<2 x double> [[WIDE_LOAD:%.*]])
1198 ; ARMPL-SVE-LABEL: define void @exp2_f64
1199 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1200 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
1202   entry:
1203   br label %for.body
1205   for.body:
1206   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1207   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
1208   %in = load double, ptr %in.gep, align 8
1209   %call = tail call double @exp2(double %in)
1210   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
1211   store double %call, ptr %out.gep, align 8
1212   %iv.next = add nuw nsw i64 %iv, 1
1213   %exitcond = icmp eq i64 %iv.next, 1000
1214   br i1 %exitcond, label %for.end, label %for.body
1216   for.end:
1217   ret void
1220 define void @exp2_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1221 ; SLEEF-NEON-LABEL: define void @exp2_f32
1222 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1223 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_exp2f(<4 x float> [[WIDE_LOAD:%.*]])
1225 ; SLEEF-SVE-LABEL: define void @exp2_f32
1226 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1227 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_exp2f(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
1229 ; ARMPL-NEON-LABEL: define void @exp2_f32
1230 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1231 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vexp2q_f32(<4 x float> [[WIDE_LOAD:%.*]])
1233 ; ARMPL-SVE-LABEL: define void @exp2_f32
1234 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1235 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
1237   entry:
1238   br label %for.body
1240   for.body:
1241   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1242   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
1243   %in = load float, ptr %in.gep, align 8
1244   %call = tail call float @exp2f(float %in)
1245   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
1246   store float %call, ptr %out.gep, align 4
1247   %iv.next = add nuw nsw i64 %iv, 1
1248   %exitcond = icmp eq i64 %iv.next, 1000
1249   br i1 %exitcond, label %for.end, label %for.body
1251   for.end:
1252   ret void
1255 declare double @expm1(double)
1256 declare float @expm1f(float)
1258 define void @expm1_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1259 ; SLEEF-NEON-LABEL: define void @expm1_f64
1260 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1261 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_expm1(<2 x double> [[WIDE_LOAD:%.*]])
1263 ; SLEEF-SVE-LABEL: define void @expm1_f64
1264 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1265 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_expm1(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
1267 ; ARMPL-NEON-LABEL: define void @expm1_f64
1268 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1269 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vexpm1q_f64(<2 x double> [[WIDE_LOAD:%.*]])
1271 ; ARMPL-SVE-LABEL: define void @expm1_f64
1272 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1273 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
1275   entry:
1276   br label %for.body
1278   for.body:
1279   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1280   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
1281   %in = load double, ptr %in.gep, align 8
1282   %call = tail call double @expm1(double %in)
1283   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
1284   store double %call, ptr %out.gep, align 8
1285   %iv.next = add nuw nsw i64 %iv, 1
1286   %exitcond = icmp eq i64 %iv.next, 1000
1287   br i1 %exitcond, label %for.end, label %for.body
1289   for.end:
1290   ret void
1293 define void @expm1_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1294 ; SLEEF-NEON-LABEL: define void @expm1_f32
1295 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1296 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_expm1f(<4 x float> [[WIDE_LOAD:%.*]])
1298 ; SLEEF-SVE-LABEL: define void @expm1_f32
1299 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1300 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_expm1f(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
1302 ; ARMPL-NEON-LABEL: define void @expm1_f32
1303 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1304 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vexpm1q_f32(<4 x float> [[WIDE_LOAD:%.*]])
1306 ; ARMPL-SVE-LABEL: define void @expm1_f32
1307 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1308 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
1310   entry:
1311   br label %for.body
1313   for.body:
1314   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1315   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
1316   %in = load float, ptr %in.gep, align 8
1317   %call = tail call float @expm1f(float %in)
1318   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
1319   store float %call, ptr %out.gep, align 4
1320   %iv.next = add nuw nsw i64 %iv, 1
1321   %exitcond = icmp eq i64 %iv.next, 1000
1322   br i1 %exitcond, label %for.end, label %for.body
1324   for.end:
1325   ret void
1328 declare double @fdim(double, double)
1329 declare float @fdimf(float, float)
1331 define void @fdim_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1332 ; SLEEF-NEON-LABEL: define void @fdim_f64
1333 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1334 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2vv_fdim(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])
1336 ; SLEEF-SVE-LABEL: define void @fdim_f64
1337 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1338 ; SLEEF-SVE:    [[TMP15:%.*]] = 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:%.*]])
1340 ; ARMPL-NEON-LABEL: define void @fdim_f64
1341 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1342 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vfdimq_f64(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])
1344 ; ARMPL-SVE-LABEL: define void @fdim_f64
1345 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1346 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
1348   entry:
1349   br label %for.body
1351   for.body:
1352   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1353   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
1354   %in = load double, ptr %in.gep, align 8
1355   %call = tail call double @fdim(double %in, double %in)
1356   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
1357   store double %call, ptr %out.gep, align 8
1358   %iv.next = add nuw nsw i64 %iv, 1
1359   %exitcond = icmp eq i64 %iv.next, 1000
1360   br i1 %exitcond, label %for.end, label %for.body
1362   for.end:
1363   ret void
1366 define void @fdim_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1367 ; SLEEF-NEON-LABEL: define void @fdim_f32
1368 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1369 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4vv_fdimf(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])
1371 ; SLEEF-SVE-LABEL: define void @fdim_f32
1372 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1373 ; SLEEF-SVE:    [[TMP15:%.*]] = 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:%.*]])
1375 ; ARMPL-NEON-LABEL: define void @fdim_f32
1376 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1377 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vfdimq_f32(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])
1379 ; ARMPL-SVE-LABEL: define void @fdim_f32
1380 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1381 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
1383   entry:
1384   br label %for.body
1386   for.body:
1387   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1388   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
1389   %in = load float, ptr %in.gep, align 8
1390   %call = tail call float @fdimf(float %in, float %in)
1391   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
1392   store float %call, ptr %out.gep, align 4
1393   %iv.next = add nuw nsw i64 %iv, 1
1394   %exitcond = icmp eq i64 %iv.next, 1000
1395   br i1 %exitcond, label %for.end, label %for.body
1397   for.end:
1398   ret void
1401 declare double @fma(double, double, double)
1402 declare float @fmaf(float, float, float)
1404 define void @fma_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1405 ; SLEEF-NEON-LABEL: define void @fma_f64
1406 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1407 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2vvv_fma(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]], <2 x double> [[WIDE_LOAD]])
1409 ; SLEEF-SVE-LABEL: define void @fma_f64
1410 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1411 ; SLEEF-SVE:    [[TMP15:%.*]] = 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:%.*]])
1413 ; ARMPL-NEON-LABEL: define void @fma_f64
1414 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1415 ; 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]])
1417 ; ARMPL-SVE-LABEL: define void @fma_f64
1418 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1419 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
1421   entry:
1422   br label %for.body
1424   for.body:
1425   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1426   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
1427   %in = load double, ptr %in.gep, align 8
1428   %call = tail call double @fma(double %in, double %in, double %in)
1429   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
1430   store double %call, ptr %out.gep, align 8
1431   %iv.next = add nuw nsw i64 %iv, 1
1432   %exitcond = icmp eq i64 %iv.next, 1000
1433   br i1 %exitcond, label %for.end, label %for.body
1435   for.end:
1436   ret void
1439 define void @fma_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1440 ; SLEEF-NEON-LABEL: define void @fma_f32
1441 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1442 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4vvv_fmaf(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]], <4 x float> [[WIDE_LOAD]])
1444 ; SLEEF-SVE-LABEL: define void @fma_f32
1445 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1446 ; SLEEF-SVE:    [[TMP15:%.*]] = 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:%.*]])
1448 ; ARMPL-NEON-LABEL: define void @fma_f32
1449 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1450 ; 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]])
1452 ; ARMPL-SVE-LABEL: define void @fma_f32
1453 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1454 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
1456   entry:
1457   br label %for.body
1459   for.body:
1460   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1461   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
1462   %in = load float, ptr %in.gep, align 8
1463   %call = tail call float @fmaf(float %in, float %in, float %in)
1464   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
1465   store float %call, ptr %out.gep, align 4
1466   %iv.next = add nuw nsw i64 %iv, 1
1467   %exitcond = icmp eq i64 %iv.next, 1000
1468   br i1 %exitcond, label %for.end, label %for.body
1470   for.end:
1471   ret void
1474 declare double @fmax(double, double)
1475 declare float @fmaxf(float, float)
1477 define void @fmax_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1478 ; SLEEF-NEON-LABEL: define void @fmax_f64
1479 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1480 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2vv_fmax(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])
1482 ; SLEEF-SVE-LABEL: define void @fmax_f64
1483 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1484 ; SLEEF-SVE:    [[TMP15:%.*]] = 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:%.*]])
1486 ; ARMPL-NEON-LABEL: define void @fmax_f64
1487 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1488 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vfmaxq_f64(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])
1490 ; ARMPL-SVE-LABEL: define void @fmax_f64
1491 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1492 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
1494   entry:
1495   br label %for.body
1497   for.body:
1498   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1499   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
1500   %in = load double, ptr %in.gep, align 8
1501   %call = tail call double @fmax(double %in, double %in)
1502   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
1503   store double %call, ptr %out.gep, align 8
1504   %iv.next = add nuw nsw i64 %iv, 1
1505   %exitcond = icmp eq i64 %iv.next, 1000
1506   br i1 %exitcond, label %for.end, label %for.body
1508   for.end:
1509   ret void
1512 define void @fmax_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1513 ; SLEEF-NEON-LABEL: define void @fmax_f32
1514 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1515 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4vv_fmaxf(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])
1517 ; SLEEF-SVE-LABEL: define void @fmax_f32
1518 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1519 ; SLEEF-SVE:    [[TMP15:%.*]] = 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:%.*]])
1521 ; ARMPL-NEON-LABEL: define void @fmax_f32
1522 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1523 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vfmaxq_f32(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])
1525 ; ARMPL-SVE-LABEL: define void @fmax_f32
1526 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1527 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
1529   entry:
1530   br label %for.body
1532   for.body:
1533   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1534   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
1535   %in = load float, ptr %in.gep, align 8
1536   %call = tail call float @fmaxf(float %in, float %in)
1537   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
1538   store float %call, ptr %out.gep, align 4
1539   %iv.next = add nuw nsw i64 %iv, 1
1540   %exitcond = icmp eq i64 %iv.next, 1000
1541   br i1 %exitcond, label %for.end, label %for.body
1543   for.end:
1544   ret void
1547 declare double @fmin(double, double)
1548 declare float @fminf(float, float)
1550 define void @fmin_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1551 ; SLEEF-NEON-LABEL: define void @fmin_f64
1552 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1553 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2vv_fmin(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])
1555 ; SLEEF-SVE-LABEL: define void @fmin_f64
1556 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1557 ; SLEEF-SVE:    [[TMP15:%.*]] = 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:%.*]])
1559 ; ARMPL-NEON-LABEL: define void @fmin_f64
1560 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1561 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vfminq_f64(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])
1563 ; ARMPL-SVE-LABEL: define void @fmin_f64
1564 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1565 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
1567   entry:
1568   br label %for.body
1570   for.body:
1571   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1572   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
1573   %in = load double, ptr %in.gep, align 8
1574   %call = tail call double @fmin(double %in, double %in)
1575   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
1576   store double %call, ptr %out.gep, align 8
1577   %iv.next = add nuw nsw i64 %iv, 1
1578   %exitcond = icmp eq i64 %iv.next, 1000
1579   br i1 %exitcond, label %for.end, label %for.body
1581   for.end:
1582   ret void
1585 define void @fmin_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1586 ; SLEEF-NEON-LABEL: define void @fmin_f32
1587 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1588 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4vv_fminf(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])
1590 ; SLEEF-SVE-LABEL: define void @fmin_f32
1591 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1592 ; SLEEF-SVE:    [[TMP15:%.*]] = 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:%.*]])
1594 ; ARMPL-NEON-LABEL: define void @fmin_f32
1595 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1596 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vfminq_f32(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])
1598 ; ARMPL-SVE-LABEL: define void @fmin_f32
1599 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1600 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
1602   entry:
1603   br label %for.body
1605   for.body:
1606   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1607   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
1608   %in = load float, ptr %in.gep, align 8
1609   %call = tail call float @fminf(float %in, float %in)
1610   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
1611   store float %call, ptr %out.gep, align 4
1612   %iv.next = add nuw nsw i64 %iv, 1
1613   %exitcond = icmp eq i64 %iv.next, 1000
1614   br i1 %exitcond, label %for.end, label %for.body
1616   for.end:
1617   ret void
1620 declare double @fmod(double, double)
1621 declare float @fmodf(float, float)
1623 define void @fmod_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1624 ; SLEEF-NEON-LABEL: define void @fmod_f64
1625 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1626 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2vv_fmod(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])
1628 ; SLEEF-SVE-LABEL: define void @fmod_f64
1629 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1630 ; SLEEF-SVE:    [[TMP15:%.*]] = 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:%.*]])
1632 ; ARMPL-NEON-LABEL: define void @fmod_f64
1633 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1634 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vfmodq_f64(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])
1636 ; ARMPL-SVE-LABEL: define void @fmod_f64
1637 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1638 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
1640   entry:
1641   br label %for.body
1643   for.body:
1644   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1645   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
1646   %in = load double, ptr %in.gep, align 8
1647   %call = tail call double @fmod(double %in, double %in)
1648   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
1649   store double %call, ptr %out.gep, align 8
1650   %iv.next = add nuw nsw i64 %iv, 1
1651   %exitcond = icmp eq i64 %iv.next, 1000
1652   br i1 %exitcond, label %for.end, label %for.body
1654   for.end:
1655   ret void
1658 define void @fmod_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1659 ; SLEEF-NEON-LABEL: define void @fmod_f32
1660 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1661 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4vv_fmodf(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])
1663 ; SLEEF-SVE-LABEL: define void @fmod_f32
1664 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1665 ; SLEEF-SVE:    [[TMP15:%.*]] = 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:%.*]])
1667 ; ARMPL-NEON-LABEL: define void @fmod_f32
1668 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1669 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vfmodq_f32(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])
1671 ; ARMPL-SVE-LABEL: define void @fmod_f32
1672 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1673 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
1675   entry:
1676   br label %for.body
1678   for.body:
1679   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1680   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
1681   %in = load float, ptr %in.gep, align 8
1682   %call = tail call float @fmodf(float %in, float %in)
1683   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
1684   store float %call, ptr %out.gep, align 4
1685   %iv.next = add nuw nsw i64 %iv, 1
1686   %exitcond = icmp eq i64 %iv.next, 1000
1687   br i1 %exitcond, label %for.end, label %for.body
1689   for.end:
1690   ret void
1693 declare double @hypot(double, double)
1694 declare float @hypotf(float, float)
1696 define void @hypot_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1697 ; SLEEF-NEON-LABEL: define void @hypot_f64
1698 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1699 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2vv_hypot(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])
1701 ; SLEEF-SVE-LABEL: define void @hypot_f64
1702 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1703 ; SLEEF-SVE:    [[TMP15:%.*]] = 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:%.*]])
1705 ; ARMPL-NEON-LABEL: define void @hypot_f64
1706 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1707 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vhypotq_f64(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])
1709 ; ARMPL-SVE-LABEL: define void @hypot_f64
1710 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1711 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
1713   entry:
1714   br label %for.body
1716   for.body:
1717   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1718   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
1719   %in = load double, ptr %in.gep, align 8
1720   %call = tail call double @hypot(double %in, double %in)
1721   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
1722   store double %call, ptr %out.gep, align 8
1723   %iv.next = add nuw nsw i64 %iv, 1
1724   %exitcond = icmp eq i64 %iv.next, 1000
1725   br i1 %exitcond, label %for.end, label %for.body
1727   for.end:
1728   ret void
1731 define void @hypot_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1732 ; SLEEF-NEON-LABEL: define void @hypot_f32
1733 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1734 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4vv_hypotf(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])
1736 ; SLEEF-SVE-LABEL: define void @hypot_f32
1737 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1738 ; SLEEF-SVE:    [[TMP15:%.*]] = 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:%.*]])
1740 ; ARMPL-NEON-LABEL: define void @hypot_f32
1741 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1742 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vhypotq_f32(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])
1744 ; ARMPL-SVE-LABEL: define void @hypot_f32
1745 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1746 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
1748   entry:
1749   br label %for.body
1751   for.body:
1752   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1753   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
1754   %in = load float, ptr %in.gep, align 8
1755   %call = tail call float @hypotf(float %in, float %in)
1756   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
1757   store float %call, ptr %out.gep, align 4
1758   %iv.next = add nuw nsw i64 %iv, 1
1759   %exitcond = icmp eq i64 %iv.next, 1000
1760   br i1 %exitcond, label %for.end, label %for.body
1762   for.end:
1763   ret void
1766 declare i32 @ilogb(double)
1767 declare i32 @ilogbf(float)
1769 define void @ilogb_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1770 ; SLEEF-NEON-LABEL: define void @ilogb_f64
1771 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1772 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x i32> @_ZGVnN2v_ilogb(<2 x double> [[WIDE_LOAD:%.*]])
1774 ; SLEEF-SVE-LABEL: define void @ilogb_f64
1775 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1776 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 2 x i32> @_ZGVsMxv_ilogb(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
1778 ; ARMPL-NEON-LABEL: define void @ilogb_f64
1779 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1780 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x i32> @armpl_vilogbq_f64(<2 x double> [[WIDE_LOAD:%.*]])
1782 ; ARMPL-SVE-LABEL: define void @ilogb_f64
1783 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1784 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
1786   entry:
1787   br label %for.body
1789   for.body:
1790   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1791   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
1792   %in = load double, ptr %in.gep, align 8
1793   %call = tail call i32 @ilogb(double %in)
1794   %out.gep = getelementptr inbounds i32, ptr %out.ptr, i64 %iv
1795   store i32 %call, ptr %out.gep, align 8
1796   %iv.next = add nuw nsw i64 %iv, 1
1797   %exitcond = icmp eq i64 %iv.next, 1000
1798   br i1 %exitcond, label %for.end, label %for.body
1800   for.end:
1801   ret void
1804 define void @ilogb_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1805 ; SLEEF-NEON-LABEL: define void @ilogb_f32
1806 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1807 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x i32> @_ZGVnN4v_ilogbf(<4 x float> [[WIDE_LOAD:%.*]])
1809 ; SLEEF-SVE-LABEL: define void @ilogb_f32
1810 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1811 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 4 x i32> @_ZGVsMxv_ilogbf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
1813 ; ARMPL-NEON-LABEL: define void @ilogb_f32
1814 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1815 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x i32> @armpl_vilogbq_f32(<4 x float> [[WIDE_LOAD:%.*]])
1817 ; ARMPL-SVE-LABEL: define void @ilogb_f32
1818 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1819 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
1821   entry:
1822   br label %for.body
1824   for.body:
1825   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1826   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
1827   %in = load float, ptr %in.gep, align 8
1828   %call = tail call i32 @ilogbf(float %in)
1829   %out.gep = getelementptr inbounds i32, ptr %out.ptr, i64 %iv
1830   store i32 %call, ptr %out.gep, align 4
1831   %iv.next = add nuw nsw i64 %iv, 1
1832   %exitcond = icmp eq i64 %iv.next, 1000
1833   br i1 %exitcond, label %for.end, label %for.body
1835   for.end:
1836   ret void
1839 declare double @ldexp(double, i32)
1840 declare float @ldexpf(float, i32)
1842 define void @ldexp_f64(ptr noalias %in1.ptr, ptr noalias %in2.ptr, ptr noalias %out.ptr) {
1843 ; SLEEF-NEON-LABEL: define void @ldexp_f64
1844 ; SLEEF-NEON-SAME: (ptr noalias [[IN1_PTR:%.*]], ptr noalias [[IN2_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1845 ; SLEEF-NEON:    [[TMP5:%.*]] = call <2 x double> @_ZGVnN2vv_ldexp(<2 x double> [[WIDE_LOAD:%.*]], <2 x i32> [[WIDE_LOAD1:%.*]])
1847 ; SLEEF-SVE-LABEL: define void @ldexp_f64
1848 ; SLEEF-SVE-SAME: (ptr noalias [[IN1_PTR:%.*]], ptr noalias [[IN2_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1849 ; SLEEF-SVE:    [[TMP17:%.*]] = 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:%.*]])
1851 ; ARMPL-NEON-LABEL: define void @ldexp_f64
1852 ; ARMPL-NEON-SAME: (ptr noalias [[IN1_PTR:%.*]], ptr noalias [[IN2_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1853 ; ARMPL-NEON:    [[TMP5:%.*]] = call <2 x double> @armpl_vldexpq_f64(<2 x double> [[WIDE_LOAD:%.*]], <2 x i32> [[WIDE_LOAD1:%.*]])
1855 ; ARMPL-SVE-LABEL: define void @ldexp_f64
1856 ; ARMPL-SVE-SAME: (ptr noalias [[IN1_PTR:%.*]], ptr noalias [[IN2_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1857 ; ARMPL-SVE:    [[TMP17:%.*]] = 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:%.*]])
1859   entry:
1860   br label %for.body
1862   for.body:
1863   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1864   %in1.gep = getelementptr inbounds double, ptr %in1.ptr, i64 %iv
1865   %in1 = load double, ptr %in1.gep, align 8
1866   %in2.gep = getelementptr inbounds i32, ptr %in2.ptr, i64 %iv
1867   %in2 = load i32, ptr %in2.gep, align 8
1868   %call = tail call double @ldexp(double %in1, i32 %in2)
1869   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
1870   store double %call, ptr %out.gep, align 8
1871   %iv.next = add nuw nsw i64 %iv, 1
1872   %exitcond = icmp eq i64 %iv.next, 1000
1873   br i1 %exitcond, label %for.end, label %for.body
1875   for.end:
1876   ret void
1879 define void @ldexp_f32(ptr noalias %in1.ptr, ptr noalias %in2.ptr, ptr noalias %out.ptr) {
1880 ; SLEEF-NEON-LABEL: define void @ldexp_f32
1881 ; SLEEF-NEON-SAME: (ptr noalias [[IN1_PTR:%.*]], ptr noalias [[IN2_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1882 ; SLEEF-NEON:    [[TMP5:%.*]] = call <4 x float> @_ZGVnN4vv_ldexpf(<4 x float> [[WIDE_LOAD:%.*]], <4 x i32> [[WIDE_LOAD1:%.*]])
1884 ; SLEEF-SVE-LABEL: define void @ldexp_f32
1885 ; SLEEF-SVE-SAME: (ptr noalias [[IN1_PTR:%.*]], ptr noalias [[IN2_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1886 ; SLEEF-SVE:    [[TMP17:%.*]] = 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:%.*]])
1888 ; ARMPL-NEON-LABEL: define void @ldexp_f32
1889 ; ARMPL-NEON-SAME: (ptr noalias [[IN1_PTR:%.*]], ptr noalias [[IN2_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1890 ; ARMPL-NEON:    [[TMP5:%.*]] = call <4 x float> @armpl_vldexpq_f32(<4 x float> [[WIDE_LOAD:%.*]], <4 x i32> [[WIDE_LOAD1:%.*]])
1892 ; ARMPL-SVE-LABEL: define void @ldexp_f32
1893 ; ARMPL-SVE-SAME: (ptr noalias [[IN1_PTR:%.*]], ptr noalias [[IN2_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1894 ; ARMPL-SVE:    [[TMP17:%.*]] = 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:%.*]])
1896   entry:
1897   br label %for.body
1899   for.body:
1900   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1901   %in1.gep = getelementptr inbounds float, ptr %in1.ptr, i64 %iv
1902   %in1 = load float, ptr %in1.gep, align 8
1903   %in2.gep = getelementptr inbounds i32, ptr %in2.ptr, i64 %iv
1904   %in2 = load i32, ptr %in2.gep, align 8
1905   %call = tail call float @ldexpf(float %in1, i32 %in2)
1906   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
1907   store float %call, ptr %out.gep, align 4
1908   %iv.next = add nuw nsw i64 %iv, 1
1909   %exitcond = icmp eq i64 %iv.next, 1000
1910   br i1 %exitcond, label %for.end, label %for.body
1912   for.end:
1913   ret void
1916 declare double @lgamma(double)
1917 declare float @lgammaf(float)
1919 define void @lgamma_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1920 ; SLEEF-NEON-LABEL: define void @lgamma_f64
1921 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1922 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_lgamma(<2 x double> [[WIDE_LOAD:%.*]])
1924 ; SLEEF-SVE-LABEL: define void @lgamma_f64
1925 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1926 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_lgamma(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
1928 ; ARMPL-NEON-LABEL: define void @lgamma_f64
1929 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1930 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vlgammaq_f64(<2 x double> [[WIDE_LOAD:%.*]])
1932 ; ARMPL-SVE-LABEL: define void @lgamma_f64
1933 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1934 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
1936   entry:
1937   br label %for.body
1939   for.body:
1940   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1941   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
1942   %in = load double, ptr %in.gep, align 8
1943   %call = tail call double @lgamma(double %in)
1944   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
1945   store double %call, ptr %out.gep, align 8
1946   %iv.next = add nuw nsw i64 %iv, 1
1947   %exitcond = icmp eq i64 %iv.next, 1000
1948   br i1 %exitcond, label %for.end, label %for.body
1950   for.end:
1951   ret void
1954 define void @lgamma_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1955 ; SLEEF-NEON-LABEL: define void @lgamma_f32
1956 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1957 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_lgammaf(<4 x float> [[WIDE_LOAD:%.*]])
1959 ; SLEEF-SVE-LABEL: define void @lgamma_f32
1960 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1961 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_lgammaf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
1963 ; ARMPL-NEON-LABEL: define void @lgamma_f32
1964 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1965 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vlgammaq_f32(<4 x float> [[WIDE_LOAD:%.*]])
1967 ; ARMPL-SVE-LABEL: define void @lgamma_f32
1968 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1969 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
1971   entry:
1972   br label %for.body
1974   for.body:
1975   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1976   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
1977   %in = load float, ptr %in.gep, align 8
1978   %call = tail call float @lgammaf(float %in)
1979   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
1980   store float %call, ptr %out.gep, align 4
1981   %iv.next = add nuw nsw i64 %iv, 1
1982   %exitcond = icmp eq i64 %iv.next, 1000
1983   br i1 %exitcond, label %for.end, label %for.body
1985   for.end:
1986   ret void
1989 declare double @log(double)
1990 declare float @logf(float)
1992 define void @log_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1993 ; SLEEF-NEON-LABEL: define void @log_f64
1994 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1995 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_log(<2 x double> [[WIDE_LOAD:%.*]])
1997 ; SLEEF-SVE-LABEL: define void @log_f64
1998 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1999 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_log(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
2001 ; ARMPL-NEON-LABEL: define void @log_f64
2002 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2003 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vlogq_f64(<2 x double> [[WIDE_LOAD:%.*]])
2005 ; ARMPL-SVE-LABEL: define void @log_f64
2006 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2007 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
2009   entry:
2010   br label %for.body
2012   for.body:
2013   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2014   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
2015   %in = load double, ptr %in.gep, align 8
2016   %call = tail call double @log(double %in)
2017   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
2018   store double %call, ptr %out.gep, align 8
2019   %iv.next = add nuw nsw i64 %iv, 1
2020   %exitcond = icmp eq i64 %iv.next, 1000
2021   br i1 %exitcond, label %for.end, label %for.body
2023   for.end:
2024   ret void
2027 define void @log_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2028 ; SLEEF-NEON-LABEL: define void @log_f32
2029 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2030 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_logf(<4 x float> [[WIDE_LOAD:%.*]])
2032 ; SLEEF-SVE-LABEL: define void @log_f32
2033 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2034 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_logf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
2036 ; ARMPL-NEON-LABEL: define void @log_f32
2037 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2038 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vlogq_f32(<4 x float> [[WIDE_LOAD:%.*]])
2040 ; ARMPL-SVE-LABEL: define void @log_f32
2041 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2042 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
2044   entry:
2045   br label %for.body
2047   for.body:
2048   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2049   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
2050   %in = load float, ptr %in.gep, align 8
2051   %call = tail call float @logf(float %in)
2052   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
2053   store float %call, ptr %out.gep, align 4
2054   %iv.next = add nuw nsw i64 %iv, 1
2055   %exitcond = icmp eq i64 %iv.next, 1000
2056   br i1 %exitcond, label %for.end, label %for.body
2058   for.end:
2059   ret void
2062 declare double @log10(double)
2063 declare float @log10f(float)
2065 define void @log10_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2066 ; SLEEF-NEON-LABEL: define void @log10_f64
2067 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2068 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_log10(<2 x double> [[WIDE_LOAD:%.*]])
2070 ; SLEEF-SVE-LABEL: define void @log10_f64
2071 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2072 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_log10(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
2074 ; ARMPL-NEON-LABEL: define void @log10_f64
2075 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2076 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vlog10q_f64(<2 x double> [[WIDE_LOAD:%.*]])
2078 ; ARMPL-SVE-LABEL: define void @log10_f64
2079 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2080 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
2082   entry:
2083   br label %for.body
2085   for.body:
2086   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2087   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
2088   %in = load double, ptr %in.gep, align 8
2089   %call = tail call double @log10(double %in)
2090   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
2091   store double %call, ptr %out.gep, align 8
2092   %iv.next = add nuw nsw i64 %iv, 1
2093   %exitcond = icmp eq i64 %iv.next, 1000
2094   br i1 %exitcond, label %for.end, label %for.body
2096   for.end:
2097   ret void
2100 define void @log10_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2101 ; SLEEF-NEON-LABEL: define void @log10_f32
2102 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2103 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_log10f(<4 x float> [[WIDE_LOAD:%.*]])
2105 ; SLEEF-SVE-LABEL: define void @log10_f32
2106 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2107 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_log10f(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
2109 ; ARMPL-NEON-LABEL: define void @log10_f32
2110 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2111 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vlog10q_f32(<4 x float> [[WIDE_LOAD:%.*]])
2113 ; ARMPL-SVE-LABEL: define void @log10_f32
2114 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2115 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
2117   entry:
2118   br label %for.body
2120   for.body:
2121   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2122   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
2123   %in = load float, ptr %in.gep, align 8
2124   %call = tail call float @log10f(float %in)
2125   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
2126   store float %call, ptr %out.gep, align 4
2127   %iv.next = add nuw nsw i64 %iv, 1
2128   %exitcond = icmp eq i64 %iv.next, 1000
2129   br i1 %exitcond, label %for.end, label %for.body
2131   for.end:
2132   ret void
2135 declare double @log1p(double)
2136 declare float @log1pf(float)
2138 define void @log1p_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2139 ; SLEEF-NEON-LABEL: define void @log1p_f64
2140 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2141 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_log1p(<2 x double> [[WIDE_LOAD:%.*]])
2143 ; SLEEF-SVE-LABEL: define void @log1p_f64
2144 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2145 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_log1p(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
2147 ; ARMPL-NEON-LABEL: define void @log1p_f64
2148 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2149 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vlog1pq_f64(<2 x double> [[WIDE_LOAD:%.*]])
2151 ; ARMPL-SVE-LABEL: define void @log1p_f64
2152 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2153 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
2155   entry:
2156   br label %for.body
2158   for.body:
2159   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2160   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
2161   %in = load double, ptr %in.gep, align 8
2162   %call = tail call double @log1p(double %in)
2163   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
2164   store double %call, ptr %out.gep, align 8
2165   %iv.next = add nuw nsw i64 %iv, 1
2166   %exitcond = icmp eq i64 %iv.next, 1000
2167   br i1 %exitcond, label %for.end, label %for.body
2169   for.end:
2170   ret void
2173 define void @log1p_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2174 ; SLEEF-NEON-LABEL: define void @log1p_f32
2175 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2176 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_log1pf(<4 x float> [[WIDE_LOAD:%.*]])
2178 ; SLEEF-SVE-LABEL: define void @log1p_f32
2179 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2180 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_log1pf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
2182 ; ARMPL-NEON-LABEL: define void @log1p_f32
2183 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2184 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vlog1pq_f32(<4 x float> [[WIDE_LOAD:%.*]])
2186 ; ARMPL-SVE-LABEL: define void @log1p_f32
2187 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2188 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
2190   entry:
2191   br label %for.body
2193   for.body:
2194   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2195   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
2196   %in = load float, ptr %in.gep, align 8
2197   %call = tail call float @log1pf(float %in)
2198   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
2199   store float %call, ptr %out.gep, align 4
2200   %iv.next = add nuw nsw i64 %iv, 1
2201   %exitcond = icmp eq i64 %iv.next, 1000
2202   br i1 %exitcond, label %for.end, label %for.body
2204   for.end:
2205   ret void
2208 declare double @log2(double)
2209 declare float @log2f(float)
2211 define void @log2_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2212 ; SLEEF-NEON-LABEL: define void @log2_f64
2213 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2214 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_log2(<2 x double> [[WIDE_LOAD:%.*]])
2216 ; SLEEF-SVE-LABEL: define void @log2_f64
2217 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2218 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_log2(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
2220 ; ARMPL-NEON-LABEL: define void @log2_f64
2221 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2222 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vlog2q_f64(<2 x double> [[WIDE_LOAD:%.*]])
2224 ; ARMPL-SVE-LABEL: define void @log2_f64
2225 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2226 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
2228   entry:
2229   br label %for.body
2231   for.body:
2232   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2233   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
2234   %in = load double, ptr %in.gep, align 8
2235   %call = tail call double @log2(double %in)
2236   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
2237   store double %call, ptr %out.gep, align 8
2238   %iv.next = add nuw nsw i64 %iv, 1
2239   %exitcond = icmp eq i64 %iv.next, 1000
2240   br i1 %exitcond, label %for.end, label %for.body
2242   for.end:
2243   ret void
2246 define void @log2_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2247 ; SLEEF-NEON-LABEL: define void @log2_f32
2248 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2249 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_log2f(<4 x float> [[WIDE_LOAD:%.*]])
2251 ; SLEEF-SVE-LABEL: define void @log2_f32
2252 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2253 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_log2f(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
2255 ; ARMPL-NEON-LABEL: define void @log2_f32
2256 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2257 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vlog2q_f32(<4 x float> [[WIDE_LOAD:%.*]])
2259 ; ARMPL-SVE-LABEL: define void @log2_f32
2260 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2261 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
2263   entry:
2264   br label %for.body
2266   for.body:
2267   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2268   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
2269   %in = load float, ptr %in.gep, align 8
2270   %call = tail call float @log2f(float %in)
2271   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
2272   store float %call, ptr %out.gep, align 4
2273   %iv.next = add nuw nsw i64 %iv, 1
2274   %exitcond = icmp eq i64 %iv.next, 1000
2275   br i1 %exitcond, label %for.end, label %for.body
2277   for.end:
2278   ret void
2281 declare double @modf(double, ptr)
2282 declare float @modff(float, ptr)
2284 define void @modf_f64(ptr noalias %a, ptr noalias %b, ptr noalias %c) {
2285 ; SLEEF-NEON-LABEL: define void @modf_f64
2286 ; SLEEF-NEON-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
2287 ; SLEEF-NEON:    [[TMP5:%.*]] = call <2 x double> @_ZGVnN2vl8_modf(<2 x double> [[WIDE_LOAD:%.*]], ptr [[TMP4:%.*]])
2289 ; SLEEF-SVE-LABEL: define void @modf_f64
2290 ; SLEEF-SVE-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
2291 ; SLEEF-SVE:    [[TMP23:%.*]] = call <vscale x 2 x double> @_ZGVsMxvl8_modf(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], ptr [[TMP22:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
2293 ; ARMPL-NEON-LABEL: define void @modf_f64
2294 ; ARMPL-NEON-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
2295 ; ARMPL-NEON:    [[TMP5:%.*]] = call <2 x double> @armpl_vmodfq_f64(<2 x double> [[WIDE_LOAD:%.*]], ptr [[TMP4:%.*]])
2297 ; ARMPL-SVE-LABEL: define void @modf_f64
2298 ; ARMPL-SVE-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
2299 ; ARMPL-SVE:    [[TMP23:%.*]] = call <vscale x 2 x double> @armpl_svmodf_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], ptr [[TMP22:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
2301 entry:
2302   br label %for.body
2304 for.body:
2305   %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]
2306   %gepa = getelementptr double, ptr %a, i64 %indvars.iv
2307   %num = load double, ptr %gepa, align 8
2308   %gepb = getelementptr double, ptr %b, i64 %indvars.iv
2309   %data = call double @modf(double %num, ptr %gepb)
2310   %gepc = getelementptr inbounds double, ptr %c, i64 %indvars.iv
2311   store double %data, ptr %gepc, align 8
2312   %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
2313   %exitcond = icmp eq i64 %indvars.iv.next, 1000
2314   br i1 %exitcond, label %for.cond.cleanup, label %for.body
2316 for.cond.cleanup:
2317   ret void
2320 define void @modf_f32(ptr noalias %a, ptr noalias %b, ptr noalias %c) {
2321 ; SLEEF-NEON-LABEL: define void @modf_f32
2322 ; SLEEF-NEON-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
2323 ; SLEEF-NEON:    [[TMP5:%.*]] = call <4 x float> @_ZGVnN4vl4_modff(<4 x float> [[WIDE_LOAD:%.*]], ptr [[TMP4:%.*]])
2325 ; SLEEF-SVE-LABEL: define void @modf_f32
2326 ; SLEEF-SVE-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
2327 ; SLEEF-SVE:    [[TMP23:%.*]] = call <vscale x 4 x float> @_ZGVsMxvl4_modff(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], ptr [[TMP22:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
2329 ; ARMPL-NEON-LABEL: define void @modf_f32
2330 ; ARMPL-NEON-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
2331 ; ARMPL-NEON:    [[TMP5:%.*]] = call <4 x float> @armpl_vmodfq_f32(<4 x float> [[WIDE_LOAD:%.*]], ptr [[TMP4:%.*]])
2333 ; ARMPL-SVE-LABEL: define void @modf_f32
2334 ; ARMPL-SVE-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
2335 ; ARMPL-SVE:    [[TMP23:%.*]] = call <vscale x 4 x float> @armpl_svmodf_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], ptr [[TMP22:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
2337 entry:
2338   br label %for.body
2340 for.body:
2341   %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]
2342   %gepa = getelementptr float, ptr %a, i64 %indvars.iv
2343   %num = load float, ptr %gepa, align 8
2344   %gepb = getelementptr float, ptr %b, i64 %indvars.iv
2345   %data = call float @modff(float %num, ptr %gepb)
2346   %gepc = getelementptr inbounds float, ptr %c, i64 %indvars.iv
2347   store float %data, ptr %gepc, align 8
2348   %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
2349   %exitcond = icmp eq i64 %indvars.iv.next, 1000
2350   br i1 %exitcond, label %for.cond.cleanup, label %for.body
2352 for.cond.cleanup:
2353   ret void
2356 declare double @nextafter(double, double)
2357 declare float @nextafterf(float, float)
2359 define void @nextafter_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2360 ; SLEEF-NEON-LABEL: define void @nextafter_f64
2361 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2362 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2vv_nextafter(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])
2364 ; SLEEF-SVE-LABEL: define void @nextafter_f64
2365 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2366 ; SLEEF-SVE:    [[TMP15:%.*]] = 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:%.*]])
2368 ; ARMPL-NEON-LABEL: define void @nextafter_f64
2369 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2370 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vnextafterq_f64(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])
2372 ; ARMPL-SVE-LABEL: define void @nextafter_f64
2373 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2374 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
2376   entry:
2377   br label %for.body
2379   for.body:
2380   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2381   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
2382   %in = load double, ptr %in.gep, align 8
2383   %call = tail call double @nextafter(double %in, double %in)
2384   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
2385   store double %call, ptr %out.gep, align 8
2386   %iv.next = add nuw nsw i64 %iv, 1
2387   %exitcond = icmp eq i64 %iv.next, 1000
2388   br i1 %exitcond, label %for.end, label %for.body
2390   for.end:
2391   ret void
2394 define void @nextafter_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2395 ; SLEEF-NEON-LABEL: define void @nextafter_f32
2396 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2397 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4vv_nextafterf(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])
2399 ; SLEEF-SVE-LABEL: define void @nextafter_f32
2400 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2401 ; SLEEF-SVE:    [[TMP15:%.*]] = 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:%.*]])
2403 ; ARMPL-NEON-LABEL: define void @nextafter_f32
2404 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2405 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vnextafterq_f32(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])
2407 ; ARMPL-SVE-LABEL: define void @nextafter_f32
2408 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2409 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
2411   entry:
2412   br label %for.body
2414   for.body:
2415   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2416   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
2417   %in = load float, ptr %in.gep, align 8
2418   %call = tail call float @nextafterf(float %in, float %in)
2419   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
2420   store float %call, ptr %out.gep, align 4
2421   %iv.next = add nuw nsw i64 %iv, 1
2422   %exitcond = icmp eq i64 %iv.next, 1000
2423   br i1 %exitcond, label %for.end, label %for.body
2425   for.end:
2426   ret void
2429 declare double @pow(double, double)
2430 declare float @powf(float, float)
2432 define void @pow_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2433 ; SLEEF-NEON-LABEL: define void @pow_f64
2434 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2435 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2vv_pow(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])
2437 ; SLEEF-SVE-LABEL: define void @pow_f64
2438 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2439 ; SLEEF-SVE:    [[TMP15:%.*]] = 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:%.*]])
2441 ; ARMPL-NEON-LABEL: define void @pow_f64
2442 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2443 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vpowq_f64(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])
2445 ; ARMPL-SVE-LABEL: define void @pow_f64
2446 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2447 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
2449   entry:
2450   br label %for.body
2452   for.body:
2453   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2454   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
2455   %in = load double, ptr %in.gep, align 8
2456   %call = tail call double @pow(double %in, double %in)
2457   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
2458   store double %call, ptr %out.gep, align 8
2459   %iv.next = add nuw nsw i64 %iv, 1
2460   %exitcond = icmp eq i64 %iv.next, 1000
2461   br i1 %exitcond, label %for.end, label %for.body
2463   for.end:
2464   ret void
2467 define void @pow_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2468 ; SLEEF-NEON-LABEL: define void @pow_f32
2469 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2470 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4vv_powf(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])
2472 ; SLEEF-SVE-LABEL: define void @pow_f32
2473 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2474 ; SLEEF-SVE:    [[TMP15:%.*]] = 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:%.*]])
2476 ; ARMPL-NEON-LABEL: define void @pow_f32
2477 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2478 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vpowq_f32(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])
2480 ; ARMPL-SVE-LABEL: define void @pow_f32
2481 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2482 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
2484   entry:
2485   br label %for.body
2487   for.body:
2488   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2489   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
2490   %in = load float, ptr %in.gep, align 8
2491   %call = tail call float @powf(float %in, float %in)
2492   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
2493   store float %call, ptr %out.gep, align 4
2494   %iv.next = add nuw nsw i64 %iv, 1
2495   %exitcond = icmp eq i64 %iv.next, 1000
2496   br i1 %exitcond, label %for.end, label %for.body
2498   for.end:
2499   ret void
2502 declare double @sin(double)
2503 declare float @sinf(float)
2505 define void @sin_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2506 ; SLEEF-NEON-LABEL: define void @sin_f64
2507 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2508 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_sin(<2 x double> [[WIDE_LOAD:%.*]])
2510 ; SLEEF-SVE-LABEL: define void @sin_f64
2511 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2512 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_sin(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
2514 ; ARMPL-NEON-LABEL: define void @sin_f64
2515 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2516 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vsinq_f64(<2 x double> [[WIDE_LOAD:%.*]])
2518 ; ARMPL-SVE-LABEL: define void @sin_f64
2519 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2520 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
2522   entry:
2523   br label %for.body
2525   for.body:
2526   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2527   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
2528   %in = load double, ptr %in.gep, align 8
2529   %call = tail call double @sin(double %in)
2530   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
2531   store double %call, ptr %out.gep, align 8
2532   %iv.next = add nuw nsw i64 %iv, 1
2533   %exitcond = icmp eq i64 %iv.next, 1000
2534   br i1 %exitcond, label %for.end, label %for.body
2536   for.end:
2537   ret void
2540 define void @sin_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2541 ; SLEEF-NEON-LABEL: define void @sin_f32
2542 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2543 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_sinf(<4 x float> [[WIDE_LOAD:%.*]])
2545 ; SLEEF-SVE-LABEL: define void @sin_f32
2546 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2547 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_sinf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
2549 ; ARMPL-NEON-LABEL: define void @sin_f32
2550 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2551 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vsinq_f32(<4 x float> [[WIDE_LOAD:%.*]])
2553 ; ARMPL-SVE-LABEL: define void @sin_f32
2554 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2555 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
2557   entry:
2558   br label %for.body
2560   for.body:
2561   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2562   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
2563   %in = load float, ptr %in.gep, align 8
2564   %call = tail call float @sinf(float %in)
2565   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
2566   store float %call, ptr %out.gep, align 4
2567   %iv.next = add nuw nsw i64 %iv, 1
2568   %exitcond = icmp eq i64 %iv.next, 1000
2569   br i1 %exitcond, label %for.end, label %for.body
2571   for.end:
2572   ret void
2575 declare void @sincos(double, ptr, ptr)
2576 declare void @sincosf(float, ptr, ptr)
2578 define void @sincos_f64(ptr noalias %a, ptr noalias %b, ptr noalias %c) {
2579 ; SLEEF-NEON-LABEL: define void @sincos_f64
2580 ; SLEEF-NEON-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
2581 ; SLEEF-NEON:    call void @_ZGVnN2vl8l8_sincos(<2 x double> [[WIDE_LOAD:%.*]], ptr [[TMP5:%.*]], ptr [[TMP6:%.*]])
2583 ; SLEEF-SVE-LABEL: define void @sincos_f64
2584 ; SLEEF-SVE-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
2585 ; SLEEF-SVE:    call void @_ZGVsMxvl8l8_sincos(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], ptr [[TMP23:%.*]], ptr [[TMP24:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
2587 ; ARMPL-NEON-LABEL: define void @sincos_f64
2588 ; ARMPL-NEON-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
2589 ; ARMPL-NEON:    call void @armpl_vsincosq_f64(<2 x double> [[WIDE_LOAD:%.*]], ptr [[TMP5:%.*]], ptr [[TMP6:%.*]])
2591 ; ARMPL-SVE-LABEL: define void @sincos_f64
2592 ; ARMPL-SVE-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
2593 ; ARMPL-SVE:    call void @armpl_svsincos_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], ptr [[TMP23:%.*]], ptr [[TMP24:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
2595 entry:
2596   br label %for.body
2598 for.body:
2599   %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]
2600   %gepa = getelementptr double, ptr %a, i64 %indvars.iv
2601   %num = load double, ptr %gepa, align 8
2602   %gepb = getelementptr double, ptr %b, i64 %indvars.iv
2603   %gepc = getelementptr double, ptr %c, i64 %indvars.iv
2604   call void @sincos(double %num, ptr %gepb, ptr %gepc)
2605   %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
2606   %exitcond = icmp eq i64 %indvars.iv.next, 1000
2607   br i1 %exitcond, label %for.cond.cleanup, label %for.body
2609 for.cond.cleanup:
2610   ret void
2613 define void @sincos_f32(ptr noalias %a, ptr noalias %b, ptr noalias %c) {
2614 ; SLEEF-NEON-LABEL: define void @sincos_f32
2615 ; SLEEF-NEON-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
2616 ; SLEEF-NEON:    call void @_ZGVnN4vl4l4_sincosf(<4 x float> [[WIDE_LOAD:%.*]], ptr [[TMP5:%.*]], ptr [[TMP6:%.*]])
2618 ; SLEEF-SVE-LABEL: define void @sincos_f32
2619 ; SLEEF-SVE-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
2620 ; SLEEF-SVE:    call void @_ZGVsMxvl4l4_sincosf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], ptr [[TMP23:%.*]], ptr [[TMP24:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
2622 ; ARMPL-NEON-LABEL: define void @sincos_f32
2623 ; ARMPL-NEON-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
2624 ; ARMPL-NEON:    call void @armpl_vsincosq_f32(<4 x float> [[WIDE_LOAD:%.*]], ptr [[TMP5:%.*]], ptr [[TMP6:%.*]])
2626 ; ARMPL-SVE-LABEL: define void @sincos_f32
2627 ; ARMPL-SVE-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
2628 ; ARMPL-SVE:    call void @armpl_svsincos_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], ptr [[TMP23:%.*]], ptr [[TMP24:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
2630 entry:
2631   br label %for.body
2633 for.body:
2634   %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]
2635   %gepa = getelementptr float, ptr %a, i64 %indvars.iv
2636   %num = load float, ptr %gepa, align 8
2637   %gepb = getelementptr float, ptr %b, i64 %indvars.iv
2638   %gepc = getelementptr float, ptr %c, i64 %indvars.iv
2639   call void @sincosf(float %num, ptr %gepb, ptr %gepc)
2640   %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
2641   %exitcond = icmp eq i64 %indvars.iv.next, 1000
2642   br i1 %exitcond, label %for.cond.cleanup, label %for.body
2644 for.cond.cleanup:
2645   ret void
2648 declare void @sincospi(double, ptr, ptr)
2649 declare void @sincospif(float, ptr, ptr)
2651 define void @sincospi_f64(ptr noalias %a, ptr noalias %b, ptr noalias %c) {
2652 ; SLEEF-NEON-LABEL: define void @sincospi_f64
2653 ; SLEEF-NEON-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
2654 ; SLEEF-NEON:    call void @_ZGVnN2vl8l8_sincospi(<2 x double> [[WIDE_LOAD:%.*]], ptr [[TMP5:%.*]], ptr [[TMP6:%.*]])
2656 ; SLEEF-SVE-LABEL: define void @sincospi_f64
2657 ; SLEEF-SVE-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
2658 ; SLEEF-SVE:    call void @_ZGVsMxvl8l8_sincospi(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], ptr [[TMP23:%.*]], ptr [[TMP24:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
2660 ; ARMPL-NEON-LABEL: define void @sincospi_f64
2661 ; ARMPL-NEON-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
2662 ; ARMPL-NEON:    call void @armpl_vsincospiq_f64(<2 x double> [[WIDE_LOAD:%.*]], ptr [[TMP5:%.*]], ptr [[TMP6:%.*]])
2664 ; ARMPL-SVE-LABEL: define void @sincospi_f64
2665 ; ARMPL-SVE-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
2666 ; ARMPL-SVE:    call void @armpl_svsincospi_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], ptr [[TMP23:%.*]], ptr [[TMP24:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
2668 entry:
2669   br label %for.body
2671 for.body:
2672   %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]
2673   %gepa = getelementptr double, ptr %a, i64 %indvars.iv
2674   %num = load double, ptr %gepa, align 8
2675   %gepb = getelementptr double, ptr %b, i64 %indvars.iv
2676   %gepc = getelementptr double, ptr %c, i64 %indvars.iv
2677   call void @sincospi(double %num, ptr %gepb, ptr %gepc)
2678   %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
2679   %exitcond = icmp eq i64 %indvars.iv.next, 1000
2680   br i1 %exitcond, label %for.cond.cleanup, label %for.body
2682 for.cond.cleanup:
2683   ret void
2686 define void @sincospi_f32(ptr noalias %a, ptr noalias %b, ptr noalias %c) {
2687 ; SLEEF-NEON-LABEL: define void @sincospi_f32
2688 ; SLEEF-NEON-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
2689 ; SLEEF-NEON:    call void @_ZGVnN4vl4l4_sincospif(<4 x float> [[WIDE_LOAD:%.*]], ptr [[TMP5:%.*]], ptr [[TMP6:%.*]])
2691 ; SLEEF-SVE-LABEL: define void @sincospi_f32
2692 ; SLEEF-SVE-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
2693 ; SLEEF-SVE:    call void @_ZGVsMxvl4l4_sincospif(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], ptr [[TMP23:%.*]], ptr [[TMP24:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
2695 ; ARMPL-NEON-LABEL: define void @sincospi_f32
2696 ; ARMPL-NEON-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
2697 ; ARMPL-NEON:    call void @armpl_vsincospiq_f32(<4 x float> [[WIDE_LOAD:%.*]], ptr [[TMP5:%.*]], ptr [[TMP6:%.*]])
2699 ; ARMPL-SVE-LABEL: define void @sincospi_f32
2700 ; ARMPL-SVE-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
2701 ; ARMPL-SVE:    call void @armpl_svsincospi_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], ptr [[TMP23:%.*]], ptr [[TMP24:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
2703 entry:
2704   br label %for.body
2706 for.body:
2707   %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]
2708   %gepa = getelementptr float, ptr %a, i64 %indvars.iv
2709   %num = load float, ptr %gepa, align 8
2710   %gepb = getelementptr float, ptr %b, i64 %indvars.iv
2711   %gepc = getelementptr float, ptr %c, i64 %indvars.iv
2712   call void @sincospif(float %num, ptr %gepb, ptr %gepc)
2713   %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
2714   %exitcond = icmp eq i64 %indvars.iv.next, 1000
2715   br i1 %exitcond, label %for.cond.cleanup, label %for.body
2717 for.cond.cleanup:
2718   ret void
2721 declare double @sinh(double)
2722 declare float @sinhf(float)
2724 define void @sinh_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2725 ; SLEEF-NEON-LABEL: define void @sinh_f64
2726 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2727 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_sinh(<2 x double> [[WIDE_LOAD:%.*]])
2729 ; SLEEF-SVE-LABEL: define void @sinh_f64
2730 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2731 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_sinh(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
2733 ; ARMPL-NEON-LABEL: define void @sinh_f64
2734 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2735 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vsinhq_f64(<2 x double> [[WIDE_LOAD:%.*]])
2737 ; ARMPL-SVE-LABEL: define void @sinh_f64
2738 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2739 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
2741   entry:
2742   br label %for.body
2744   for.body:
2745   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2746   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
2747   %in = load double, ptr %in.gep, align 8
2748   %call = tail call double @sinh(double %in)
2749   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
2750   store double %call, ptr %out.gep, align 8
2751   %iv.next = add nuw nsw i64 %iv, 1
2752   %exitcond = icmp eq i64 %iv.next, 1000
2753   br i1 %exitcond, label %for.end, label %for.body
2755   for.end:
2756   ret void
2759 define void @sinh_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2760 ; SLEEF-NEON-LABEL: define void @sinh_f32
2761 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2762 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_sinhf(<4 x float> [[WIDE_LOAD:%.*]])
2764 ; SLEEF-SVE-LABEL: define void @sinh_f32
2765 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2766 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_sinhf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
2768 ; ARMPL-NEON-LABEL: define void @sinh_f32
2769 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2770 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vsinhq_f32(<4 x float> [[WIDE_LOAD:%.*]])
2772 ; ARMPL-SVE-LABEL: define void @sinh_f32
2773 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2774 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
2776   entry:
2777   br label %for.body
2779   for.body:
2780   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2781   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
2782   %in = load float, ptr %in.gep, align 8
2783   %call = tail call float @sinhf(float %in)
2784   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
2785   store float %call, ptr %out.gep, align 4
2786   %iv.next = add nuw nsw i64 %iv, 1
2787   %exitcond = icmp eq i64 %iv.next, 1000
2788   br i1 %exitcond, label %for.end, label %for.body
2790   for.end:
2791   ret void
2794 declare double @sinpi(double)
2795 declare float @sinpif(float)
2797 define void @sinpi_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2798 ; SLEEF-NEON-LABEL: define void @sinpi_f64
2799 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2800 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_sinpi(<2 x double> [[WIDE_LOAD:%.*]])
2802 ; SLEEF-SVE-LABEL: define void @sinpi_f64
2803 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2804 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_sinpi(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
2806 ; ARMPL-NEON-LABEL: define void @sinpi_f64
2807 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2808 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vsinpiq_f64(<2 x double> [[WIDE_LOAD:%.*]])
2810 ; ARMPL-SVE-LABEL: define void @sinpi_f64
2811 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2812 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
2814   entry:
2815   br label %for.body
2817   for.body:
2818   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2819   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
2820   %in = load double, ptr %in.gep, align 8
2821   %call = tail call double @sinpi(double %in)
2822   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
2823   store double %call, ptr %out.gep, align 8
2824   %iv.next = add nuw nsw i64 %iv, 1
2825   %exitcond = icmp eq i64 %iv.next, 1000
2826   br i1 %exitcond, label %for.end, label %for.body
2828   for.end:
2829   ret void
2832 define void @sinpi_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2833 ; SLEEF-NEON-LABEL: define void @sinpi_f32
2834 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2835 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_sinpif(<4 x float> [[WIDE_LOAD:%.*]])
2837 ; SLEEF-SVE-LABEL: define void @sinpi_f32
2838 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2839 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_sinpif(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
2841 ; ARMPL-NEON-LABEL: define void @sinpi_f32
2842 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2843 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vsinpiq_f32(<4 x float> [[WIDE_LOAD:%.*]])
2845 ; ARMPL-SVE-LABEL: define void @sinpi_f32
2846 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2847 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
2849   entry:
2850   br label %for.body
2852   for.body:
2853   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2854   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
2855   %in = load float, ptr %in.gep, align 8
2856   %call = tail call float @sinpif(float %in)
2857   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
2858   store float %call, ptr %out.gep, align 4
2859   %iv.next = add nuw nsw i64 %iv, 1
2860   %exitcond = icmp eq i64 %iv.next, 1000
2861   br i1 %exitcond, label %for.end, label %for.body
2863   for.end:
2864   ret void
2867 declare double @sqrt(double)
2868 declare float @sqrtf(float)
2870 define void @sqrt_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2871 ; SLEEF-NEON-LABEL: define void @sqrt_f64
2872 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2873 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_sqrt(<2 x double> [[WIDE_LOAD:%.*]])
2875 ; SLEEF-SVE-LABEL: define void @sqrt_f64
2876 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2877 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_sqrt(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
2879 ; ARMPL-NEON-LABEL: define void @sqrt_f64
2880 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2881 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vsqrtq_f64(<2 x double> [[WIDE_LOAD:%.*]])
2883 ; ARMPL-SVE-LABEL: define void @sqrt_f64
2884 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2885 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
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 double, ptr %in.ptr, i64 %iv
2893   %in = load double, ptr %in.gep, align 8
2894   %call = tail call double @sqrt(double %in)
2895   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
2896   store double %call, ptr %out.gep, align 8
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 define void @sqrt_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2906 ; SLEEF-NEON-LABEL: define void @sqrt_f32
2907 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2908 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_sqrtf(<4 x float> [[WIDE_LOAD:%.*]])
2910 ; SLEEF-SVE-LABEL: define void @sqrt_f32
2911 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2912 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_sqrtf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
2914 ; ARMPL-NEON-LABEL: define void @sqrt_f32
2915 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2916 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vsqrtq_f32(<4 x float> [[WIDE_LOAD:%.*]])
2918 ; ARMPL-SVE-LABEL: define void @sqrt_f32
2919 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2920 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
2922   entry:
2923   br label %for.body
2925   for.body:
2926   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2927   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
2928   %in = load float, ptr %in.gep, align 8
2929   %call = tail call float @sqrtf(float %in)
2930   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
2931   store float %call, ptr %out.gep, align 4
2932   %iv.next = add nuw nsw i64 %iv, 1
2933   %exitcond = icmp eq i64 %iv.next, 1000
2934   br i1 %exitcond, label %for.end, label %for.body
2936   for.end:
2937   ret void
2940 declare double @tan(double)
2941 declare float @tanf(float)
2943 define void @tan_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2944 ; SLEEF-NEON-LABEL: define void @tan_f64
2945 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2946 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_tan(<2 x double> [[WIDE_LOAD:%.*]])
2948 ; SLEEF-SVE-LABEL: define void @tan_f64
2949 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2950 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_tan(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
2952 ; ARMPL-NEON-LABEL: define void @tan_f64
2953 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2954 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vtanq_f64(<2 x double> [[WIDE_LOAD:%.*]])
2956 ; ARMPL-SVE-LABEL: define void @tan_f64
2957 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2958 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
2960   entry:
2961   br label %for.body
2963   for.body:
2964   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2965   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
2966   %in = load double, ptr %in.gep, align 8
2967   %call = tail call double @tan(double %in)
2968   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
2969   store double %call, ptr %out.gep, align 8
2970   %iv.next = add nuw nsw i64 %iv, 1
2971   %exitcond = icmp eq i64 %iv.next, 1000
2972   br i1 %exitcond, label %for.end, label %for.body
2974   for.end:
2975   ret void
2978 define void @tan_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2979 ; SLEEF-NEON-LABEL: define void @tan_f32
2980 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2981 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_tanf(<4 x float> [[WIDE_LOAD:%.*]])
2983 ; SLEEF-SVE-LABEL: define void @tan_f32
2984 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2985 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_tanf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
2987 ; ARMPL-NEON-LABEL: define void @tan_f32
2988 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2989 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vtanq_f32(<4 x float> [[WIDE_LOAD:%.*]])
2991 ; ARMPL-SVE-LABEL: define void @tan_f32
2992 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2993 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
2995   entry:
2996   br label %for.body
2998   for.body:
2999   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
3000   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
3001   %in = load float, ptr %in.gep, align 8
3002   %call = tail call float @tanf(float %in)
3003   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
3004   store float %call, ptr %out.gep, align 4
3005   %iv.next = add nuw nsw i64 %iv, 1
3006   %exitcond = icmp eq i64 %iv.next, 1000
3007   br i1 %exitcond, label %for.end, label %for.body
3009   for.end:
3010   ret void
3013 declare double @tanh(double)
3014 declare float @tanhf(float)
3016 define void @tanh_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
3017 ; SLEEF-NEON-LABEL: define void @tanh_f64
3018 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3019 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_tanh(<2 x double> [[WIDE_LOAD:%.*]])
3021 ; SLEEF-SVE-LABEL: define void @tanh_f64
3022 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3023 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_tanh(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
3025 ; ARMPL-NEON-LABEL: define void @tanh_f64
3026 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3027 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vtanhq_f64(<2 x double> [[WIDE_LOAD:%.*]])
3029 ; ARMPL-SVE-LABEL: define void @tanh_f64
3030 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3031 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
3033   entry:
3034   br label %for.body
3036   for.body:
3037   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
3038   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
3039   %in = load double, ptr %in.gep, align 8
3040   %call = tail call double @tanh(double %in)
3041   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
3042   store double %call, ptr %out.gep, align 8
3043   %iv.next = add nuw nsw i64 %iv, 1
3044   %exitcond = icmp eq i64 %iv.next, 1000
3045   br i1 %exitcond, label %for.end, label %for.body
3047   for.end:
3048   ret void
3051 define void @tanh_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
3052 ; SLEEF-NEON-LABEL: define void @tanh_f32
3053 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3054 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_tanhf(<4 x float> [[WIDE_LOAD:%.*]])
3056 ; SLEEF-SVE-LABEL: define void @tanh_f32
3057 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3058 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_tanhf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
3060 ; ARMPL-NEON-LABEL: define void @tanh_f32
3061 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3062 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vtanhq_f32(<4 x float> [[WIDE_LOAD:%.*]])
3064 ; ARMPL-SVE-LABEL: define void @tanh_f32
3065 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3066 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
3068   entry:
3069   br label %for.body
3071   for.body:
3072   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
3073   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
3074   %in = load float, ptr %in.gep, align 8
3075   %call = tail call float @tanhf(float %in)
3076   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
3077   store float %call, ptr %out.gep, align 4
3078   %iv.next = add nuw nsw i64 %iv, 1
3079   %exitcond = icmp eq i64 %iv.next, 1000
3080   br i1 %exitcond, label %for.end, label %for.body
3082   for.end:
3083   ret void
3086 declare double @tgamma(double)
3087 declare float @tgammaf(float)
3089 define void @tgamma_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
3090 ; SLEEF-NEON-LABEL: define void @tgamma_f64
3091 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3092 ; SLEEF-NEON:    [[TMP3:%.*]] = call <2 x double> @_ZGVnN2v_tgamma(<2 x double> [[WIDE_LOAD:%.*]])
3094 ; SLEEF-SVE-LABEL: define void @tgamma_f64
3095 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3096 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_tgamma(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])
3098 ; ARMPL-NEON-LABEL: define void @tgamma_f64
3099 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3100 ; ARMPL-NEON:    [[TMP3:%.*]] = call <2 x double> @armpl_vtgammaq_f64(<2 x double> [[WIDE_LOAD:%.*]])
3102 ; ARMPL-SVE-LABEL: define void @tgamma_f64
3103 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3104 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
3106   entry:
3107   br label %for.body
3109   for.body:
3110   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
3111   %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
3112   %in = load double, ptr %in.gep, align 8
3113   %call = tail call double @tgamma(double %in)
3114   %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
3115   store double %call, ptr %out.gep, align 8
3116   %iv.next = add nuw nsw i64 %iv, 1
3117   %exitcond = icmp eq i64 %iv.next, 1000
3118   br i1 %exitcond, label %for.end, label %for.body
3120   for.end:
3121   ret void
3124 define void @tgamma_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
3125 ; SLEEF-NEON-LABEL: define void @tgamma_f32
3126 ; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3127 ; SLEEF-NEON:    [[TMP3:%.*]] = call <4 x float> @_ZGVnN4v_tgammaf(<4 x float> [[WIDE_LOAD:%.*]])
3129 ; SLEEF-SVE-LABEL: define void @tgamma_f32
3130 ; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3131 ; SLEEF-SVE:    [[TMP15:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_tgammaf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])
3133 ; ARMPL-NEON-LABEL: define void @tgamma_f32
3134 ; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3135 ; ARMPL-NEON:    [[TMP3:%.*]] = call <4 x float> @armpl_vtgammaq_f32(<4 x float> [[WIDE_LOAD:%.*]])
3137 ; ARMPL-SVE-LABEL: define void @tgamma_f32
3138 ; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
3139 ; ARMPL-SVE:    [[TMP15:%.*]] = 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:%.*]])
3141   entry:
3142   br label %for.body
3144   for.body:
3145   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
3146   %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
3147   %in = load float, ptr %in.gep, align 8
3148   %call = tail call float @tgammaf(float %in)
3149   %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
3150   store float %call, ptr %out.gep, align 4
3151   %iv.next = add nuw nsw i64 %iv, 1
3152   %exitcond = icmp eq i64 %iv.next, 1000
3153   br i1 %exitcond, label %for.end, label %for.body
3155   for.end:
3156   ret void