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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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
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:%.*]])
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