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