xref: /llvm-project/llvm/test/Transforms/LoopVectorize/RISCV/veclib-function-calls.ll (revision 93caee17add0c7bc6770365b1d3cae93f258d866)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals --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=+v -vector-library=sleefgnuabi -passes=inject-tli-mappings,loop-vectorize,simplifycfg -S < %s | FileCheck %s
3
4target triple = "riscv64-unknown-linux-gnu"
5
6; We are checking whether loops containing function calls can be vectorized,
7; when the compiler provides TLI mappings to their vector variants.
8
9declare double @acos(double)
10declare float @acosf(float)
11
12;.
13; CHECK: @llvm.compiler.used = appending global [86 x ptr] [ptr @Sleef_acosdx_u10rvvm2, ptr @Sleef_acosfx_u10rvvm2, ptr @Sleef_acoshdx_u10rvvm2, ptr @Sleef_acoshfx_u10rvvm2, ptr @Sleef_asindx_u10rvvm2, ptr @Sleef_asinfx_u10rvvm2, ptr @Sleef_asinhdx_u10rvvm2, ptr @Sleef_asinhfx_u10rvvm2, ptr @Sleef_atandx_u10rvvm2, ptr @Sleef_atanfx_u10rvvm2, ptr @Sleef_atan2dx_u10rvvm2, ptr @Sleef_atan2fx_u10rvvm2, ptr @Sleef_atanhdx_u10rvvm2, ptr @Sleef_atanhfx_u10rvvm2, ptr @Sleef_cbrtdx_u10rvvm2, ptr @Sleef_cbrtfx_u10rvvm2, ptr @Sleef_copysigndx_rvvm2, ptr @Sleef_copysignfx_rvvm2, ptr @Sleef_cosdx_u10rvvm2, ptr @Sleef_cosfx_u10rvvm2, ptr @Sleef_coshdx_u10rvvm2, ptr @Sleef_coshfx_u10rvvm2, ptr @Sleef_cospidx_u05rvvm2, ptr @Sleef_cospifx_u05rvvm2, ptr @Sleef_erfdx_u10rvvm2, ptr @Sleef_erffx_u10rvvm2, ptr @Sleef_erfcdx_u15rvvm2, ptr @Sleef_erfcfx_u15rvvm2, ptr @Sleef_expdx_u10rvvm2, ptr @Sleef_expfx_u10rvvm2, ptr @Sleef_exp10dx_u10rvvm2, ptr @Sleef_exp10fx_u10rvvm2, ptr @Sleef_exp2dx_u10rvvm2, ptr @Sleef_exp2fx_u10rvvm2, ptr @Sleef_expm1dx_u10rvvm2, ptr @Sleef_expm1fx_u10rvvm2, ptr @Sleef_fdimdx_rvvm2, ptr @Sleef_fdimfx_rvvm2, ptr @Sleef_fmadx_rvvm2, ptr @Sleef_fmafx_rvvm2, ptr @Sleef_fmaxdx_rvvm2, ptr @Sleef_fmaxfx_rvvm2, ptr @Sleef_fmindx_u10rvvm2, ptr @Sleef_fminfx_u10rvvm2, ptr @Sleef_fmoddx_rvvm2, ptr @Sleef_fmodfx_rvvm2, ptr @Sleef_hypotdx_u05rvvm2, ptr @Sleef_hypotfx_u05rvvm2, ptr @Sleef_ilogbdx_rvvm2, ptr @Sleef_ilogbfx_rvvm2, ptr @Sleef_ldexpdx_rvvm2, ptr @Sleef_ldexpfx_rvvm2, ptr @Sleef_lgammadx_u10rvvm2, ptr @Sleef_lgammafx_u10rvvm2, ptr @Sleef_logdx_u10rvvm2, ptr @Sleef_logfx_u10rvvm2, ptr @Sleef_log10dx_u10rvvm2, ptr @Sleef_log10fx_u10rvvm2, ptr @Sleef_log1pdx_u10rvvm2, ptr @Sleef_log1pfx_u10rvvm2, ptr @Sleef_log2dx_u10rvvm2, ptr @Sleef_log2fx_u10rvvm2, ptr @Sleef_modfdx_rvvm2, ptr @Sleef_modffx_rvvm2, ptr @Sleef_nextafterdx_rvvm2, ptr @Sleef_nextafterfx_rvvm2, ptr @Sleef_powdx_u10rvvm2, ptr @Sleef_powfx_u10rvvm2, ptr @Sleef_sindx_u10rvvm2, ptr @Sleef_sinfx_u10rvvm2, ptr @Sleef_sincosdx_u10rvvm2, ptr @Sleef_sincosfx_u10rvvm2, ptr @Sleef_sincospidx_u10rvvm2, ptr @Sleef_sincospifx_u10rvvm2, ptr @Sleef_sinhdx_u10rvvm2, ptr @Sleef_sinhfx_u10rvvm2, ptr @Sleef_sinpidx_u05rvvm2, ptr @Sleef_sinpifx_u05rvvm2, ptr @Sleef_sqrtdx_u05rvvm2, ptr @Sleef_sqrtfx_u05rvvm2, ptr @Sleef_tandx_u10rvvm2, ptr @Sleef_tanfx_u10rvvm2, ptr @Sleef_tanhdx_u10rvvm2, ptr @Sleef_tanhfx_u10rvvm2, ptr @Sleef_tgammadx_u10rvvm2, ptr @Sleef_tgammafx_u10rvvm2], section "llvm.metadata"
14;.
15define void @acos_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
16;
17; CHECK-LABEL: define void @acos_f64
18; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0:[0-9]+]] {
19; CHECK:    [[TMP9:%.*]] = call <vscale x 2 x double> @Sleef_acosdx_u10rvvm2(<vscale x 2 x double> [[WIDE_LOAD:%.*]])
20; CHECK:    [[CALL:%.*]] = tail call double @acos(double [[IN:%.*]]) #[[ATTR2:[0-9]+]]
21;
22  entry:
23  br label %for.body
24
25  for.body:
26  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
27  %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
28  %in = load double, ptr %in.gep, align 8
29  %call = tail call double @acos(double %in)
30  %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
31  store double %call, ptr %out.gep, align 8
32  %iv.next = add nuw nsw i64 %iv, 1
33  %exitcond = icmp eq i64 %iv.next, 1000
34  br i1 %exitcond, label %for.end, label %for.body
35
36  for.end:
37  ret void
38}
39
40define void @acos_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
41;
42; CHECK-LABEL: define void @acos_f32
43; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
44; CHECK:    [[TMP9:%.*]] = call <vscale x 4 x float> @Sleef_acosfx_u10rvvm2(<vscale x 4 x float> [[WIDE_LOAD:%.*]])
45; CHECK:    [[CALL:%.*]] = tail call float @acosf(float [[IN:%.*]]) #[[ATTR3:[0-9]+]]
46;
47  entry:
48  br label %for.body
49
50  for.body:
51  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
52  %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
53  %in = load float, ptr %in.gep, align 8
54  %call = tail call float @acosf(float %in)
55  %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
56  store float %call, ptr %out.gep, align 4
57  %iv.next = add nuw nsw i64 %iv, 1
58  %exitcond = icmp eq i64 %iv.next, 1000
59  br i1 %exitcond, label %for.end, label %for.body
60
61  for.end:
62  ret void
63}
64
65declare double @acosh(double)
66declare float @acoshf(float)
67
68define void @acosh_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
69;
70; CHECK-LABEL: define void @acosh_f64
71; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
72; CHECK:    [[TMP9:%.*]] = call <vscale x 2 x double> @Sleef_acoshdx_u10rvvm2(<vscale x 2 x double> [[WIDE_LOAD:%.*]])
73; CHECK:    [[CALL:%.*]] = tail call double @acosh(double [[IN:%.*]]) #[[ATTR4:[0-9]+]]
74;
75  entry:
76  br label %for.body
77
78  for.body:
79  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
80  %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
81  %in = load double, ptr %in.gep, align 8
82  %call = tail call double @acosh(double %in)
83  %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
84  store double %call, ptr %out.gep, align 8
85  %iv.next = add nuw nsw i64 %iv, 1
86  %exitcond = icmp eq i64 %iv.next, 1000
87  br i1 %exitcond, label %for.end, label %for.body
88
89  for.end:
90  ret void
91}
92
93define void @acosh_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
94;
95; CHECK-LABEL: define void @acosh_f32
96; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
97; CHECK:    [[TMP9:%.*]] = call <vscale x 4 x float> @Sleef_acoshfx_u10rvvm2(<vscale x 4 x float> [[WIDE_LOAD:%.*]])
98; CHECK:    [[CALL:%.*]] = tail call float @acoshf(float [[IN:%.*]]) #[[ATTR5:[0-9]+]]
99;
100  entry:
101  br label %for.body
102
103  for.body:
104  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
105  %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
106  %in = load float, ptr %in.gep, align 8
107  %call = tail call float @acoshf(float %in)
108  %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
109  store float %call, ptr %out.gep, align 4
110  %iv.next = add nuw nsw i64 %iv, 1
111  %exitcond = icmp eq i64 %iv.next, 1000
112  br i1 %exitcond, label %for.end, label %for.body
113
114  for.end:
115  ret void
116}
117
118declare double @asin(double)
119declare float @asinf(float)
120
121define void @asin_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
122;
123; CHECK-LABEL: define void @asin_f64
124; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
125; CHECK:    [[TMP9:%.*]] = call <vscale x 2 x double> @Sleef_asindx_u10rvvm2(<vscale x 2 x double> [[WIDE_LOAD:%.*]])
126; CHECK:    [[CALL:%.*]] = tail call double @asin(double [[IN:%.*]]) #[[ATTR6:[0-9]+]]
127;
128  entry:
129  br label %for.body
130
131  for.body:
132  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
133  %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
134  %in = load double, ptr %in.gep, align 8
135  %call = tail call double @asin(double %in)
136  %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
137  store double %call, ptr %out.gep, align 8
138  %iv.next = add nuw nsw i64 %iv, 1
139  %exitcond = icmp eq i64 %iv.next, 1000
140  br i1 %exitcond, label %for.end, label %for.body
141
142  for.end:
143  ret void
144}
145
146define void @asin_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
147;
148; CHECK-LABEL: define void @asin_f32
149; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
150; CHECK:    [[TMP9:%.*]] = call <vscale x 4 x float> @Sleef_asinfx_u10rvvm2(<vscale x 4 x float> [[WIDE_LOAD:%.*]])
151; CHECK:    [[CALL:%.*]] = tail call float @asinf(float [[IN:%.*]]) #[[ATTR7:[0-9]+]]
152;
153  entry:
154  br label %for.body
155
156  for.body:
157  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
158  %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
159  %in = load float, ptr %in.gep, align 8
160  %call = tail call float @asinf(float %in)
161  %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
162  store float %call, ptr %out.gep, align 4
163  %iv.next = add nuw nsw i64 %iv, 1
164  %exitcond = icmp eq i64 %iv.next, 1000
165  br i1 %exitcond, label %for.end, label %for.body
166
167  for.end:
168  ret void
169}
170
171declare double @asinh(double)
172declare float @asinhf(float)
173
174define void @asinh_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
175;
176; CHECK-LABEL: define void @asinh_f64
177; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
178; CHECK:    [[TMP9:%.*]] = call <vscale x 2 x double> @Sleef_asinhdx_u10rvvm2(<vscale x 2 x double> [[WIDE_LOAD:%.*]])
179; CHECK:    [[CALL:%.*]] = tail call double @asinh(double [[IN:%.*]]) #[[ATTR8:[0-9]+]]
180;
181  entry:
182  br label %for.body
183
184  for.body:
185  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
186  %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
187  %in = load double, ptr %in.gep, align 8
188  %call = tail call double @asinh(double %in)
189  %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
190  store double %call, ptr %out.gep, align 8
191  %iv.next = add nuw nsw i64 %iv, 1
192  %exitcond = icmp eq i64 %iv.next, 1000
193  br i1 %exitcond, label %for.end, label %for.body
194
195  for.end:
196  ret void
197}
198
199define void @asinh_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
200;
201; CHECK-LABEL: define void @asinh_f32
202; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
203; CHECK:    [[TMP9:%.*]] = call <vscale x 4 x float> @Sleef_asinhfx_u10rvvm2(<vscale x 4 x float> [[WIDE_LOAD:%.*]])
204; CHECK:    [[CALL:%.*]] = tail call float @asinhf(float [[IN:%.*]]) #[[ATTR9:[0-9]+]]
205;
206  entry:
207  br label %for.body
208
209  for.body:
210  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
211  %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
212  %in = load float, ptr %in.gep, align 8
213  %call = tail call float @asinhf(float %in)
214  %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
215  store float %call, ptr %out.gep, align 4
216  %iv.next = add nuw nsw i64 %iv, 1
217  %exitcond = icmp eq i64 %iv.next, 1000
218  br i1 %exitcond, label %for.end, label %for.body
219
220  for.end:
221  ret void
222}
223
224declare double @atan(double)
225declare float @atanf(float)
226
227define void @atan_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
228;
229; CHECK-LABEL: define void @atan_f64
230; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
231; CHECK:    [[TMP9:%.*]] = call <vscale x 2 x double> @Sleef_atandx_u10rvvm2(<vscale x 2 x double> [[WIDE_LOAD:%.*]])
232; CHECK:    [[CALL:%.*]] = tail call double @atan(double [[IN:%.*]]) #[[ATTR10:[0-9]+]]
233;
234  entry:
235  br label %for.body
236
237  for.body:
238  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
239  %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
240  %in = load double, ptr %in.gep, align 8
241  %call = tail call double @atan(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
247
248  for.end:
249  ret void
250}
251
252define void @atan_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
253;
254; CHECK-LABEL: define void @atan_f32
255; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
256; CHECK:    [[TMP9:%.*]] = call <vscale x 4 x float> @Sleef_atanfx_u10rvvm2(<vscale x 4 x float> [[WIDE_LOAD:%.*]])
257; CHECK:    [[CALL:%.*]] = tail call float @atanf(float [[IN:%.*]]) #[[ATTR11:[0-9]+]]
258;
259  entry:
260  br label %for.body
261
262  for.body:
263  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
264  %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
265  %in = load float, ptr %in.gep, align 8
266  %call = tail call float @atanf(float %in)
267  %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
268  store float %call, ptr %out.gep, align 4
269  %iv.next = add nuw nsw i64 %iv, 1
270  %exitcond = icmp eq i64 %iv.next, 1000
271  br i1 %exitcond, label %for.end, label %for.body
272
273  for.end:
274  ret void
275}
276
277declare double @atan2(double, double)
278declare float @atan2f(float, float)
279
280define void @atan2_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
281;
282; CHECK-LABEL: define void @atan2_f64
283; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
284; CHECK:    [[TMP9:%.*]] = call <vscale x 2 x double> @Sleef_atan2dx_u10rvvm2(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]])
285; CHECK:    [[CALL:%.*]] = tail call double @atan2(double [[IN:%.*]], double [[IN]]) #[[ATTR12:[0-9]+]]
286;
287  entry:
288  br label %for.body
289
290  for.body:
291  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
292  %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
293  %in = load double, ptr %in.gep, align 8
294  %call = tail call double @atan2(double %in, double %in)
295  %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
296  store double %call, ptr %out.gep, align 8
297  %iv.next = add nuw nsw i64 %iv, 1
298  %exitcond = icmp eq i64 %iv.next, 1000
299  br i1 %exitcond, label %for.end, label %for.body
300
301  for.end:
302  ret void
303}
304
305define void @atan2_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
306;
307; CHECK-LABEL: define void @atan2_f32
308; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
309; CHECK:    [[TMP9:%.*]] = call <vscale x 4 x float> @Sleef_atan2fx_u10rvvm2(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]])
310; CHECK:    [[CALL:%.*]] = tail call float @atan2f(float [[IN:%.*]], float [[IN]]) #[[ATTR13:[0-9]+]]
311;
312  entry:
313  br label %for.body
314
315  for.body:
316  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
317  %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
318  %in = load float, ptr %in.gep, align 8
319  %call = tail call float @atan2f(float %in, float %in)
320  %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
321  store float %call, ptr %out.gep, align 4
322  %iv.next = add nuw nsw i64 %iv, 1
323  %exitcond = icmp eq i64 %iv.next, 1000
324  br i1 %exitcond, label %for.end, label %for.body
325
326  for.end:
327  ret void
328}
329
330declare double @atanh(double)
331declare float @atanhf(float)
332
333define void @atanh_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
334;
335; CHECK-LABEL: define void @atanh_f64
336; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
337; CHECK:    [[TMP9:%.*]] = call <vscale x 2 x double> @Sleef_atanhdx_u10rvvm2(<vscale x 2 x double> [[WIDE_LOAD:%.*]])
338; CHECK:    [[CALL:%.*]] = tail call double @atanh(double [[IN:%.*]]) #[[ATTR14:[0-9]+]]
339;
340  entry:
341  br label %for.body
342
343  for.body:
344  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
345  %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
346  %in = load double, ptr %in.gep, align 8
347  %call = tail call double @atanh(double %in)
348  %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
349  store double %call, ptr %out.gep, align 8
350  %iv.next = add nuw nsw i64 %iv, 1
351  %exitcond = icmp eq i64 %iv.next, 1000
352  br i1 %exitcond, label %for.end, label %for.body
353
354  for.end:
355  ret void
356}
357
358define void @atanh_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
359;
360; CHECK-LABEL: define void @atanh_f32
361; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
362; CHECK:    [[TMP9:%.*]] = call <vscale x 4 x float> @Sleef_atanhfx_u10rvvm2(<vscale x 4 x float> [[WIDE_LOAD:%.*]])
363; CHECK:    [[CALL:%.*]] = tail call float @atanhf(float [[IN:%.*]]) #[[ATTR15:[0-9]+]]
364;
365  entry:
366  br label %for.body
367
368  for.body:
369  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
370  %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
371  %in = load float, ptr %in.gep, align 8
372  %call = tail call float @atanhf(float %in)
373  %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
374  store float %call, ptr %out.gep, align 4
375  %iv.next = add nuw nsw i64 %iv, 1
376  %exitcond = icmp eq i64 %iv.next, 1000
377  br i1 %exitcond, label %for.end, label %for.body
378
379  for.end:
380  ret void
381}
382
383declare double @cbrt(double)
384declare float @cbrtf(float)
385
386define void @cbrt_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
387;
388; CHECK-LABEL: define void @cbrt_f64
389; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
390; CHECK:    [[TMP9:%.*]] = call <vscale x 2 x double> @Sleef_cbrtdx_u10rvvm2(<vscale x 2 x double> [[WIDE_LOAD:%.*]])
391; CHECK:    [[CALL:%.*]] = tail call double @cbrt(double [[IN:%.*]]) #[[ATTR16:[0-9]+]]
392;
393  entry:
394  br label %for.body
395
396  for.body:
397  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
398  %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
399  %in = load double, ptr %in.gep, align 8
400  %call = tail call double @cbrt(double %in)
401  %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
402  store double %call, ptr %out.gep, align 8
403  %iv.next = add nuw nsw i64 %iv, 1
404  %exitcond = icmp eq i64 %iv.next, 1000
405  br i1 %exitcond, label %for.end, label %for.body
406
407  for.end:
408  ret void
409}
410
411define void @cbrt_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
412;
413; CHECK-LABEL: define void @cbrt_f32
414; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
415; CHECK:    [[TMP9:%.*]] = call <vscale x 4 x float> @Sleef_cbrtfx_u10rvvm2(<vscale x 4 x float> [[WIDE_LOAD:%.*]])
416; CHECK:    [[CALL:%.*]] = tail call float @cbrtf(float [[IN:%.*]]) #[[ATTR17:[0-9]+]]
417;
418  entry:
419  br label %for.body
420
421  for.body:
422  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
423  %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
424  %in = load float, ptr %in.gep, align 8
425  %call = tail call float @cbrtf(float %in)
426  %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
427  store float %call, ptr %out.gep, align 4
428  %iv.next = add nuw nsw i64 %iv, 1
429  %exitcond = icmp eq i64 %iv.next, 1000
430  br i1 %exitcond, label %for.end, label %for.body
431
432  for.end:
433  ret void
434}
435
436declare double @copysign(double, double)
437declare float @copysignf(float, float)
438
439define void @copysign_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
440;
441; CHECK-LABEL: define void @copysign_f64
442; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
443; CHECK:    [[TMP9:%.*]] = call <vscale x 2 x double> @Sleef_copysigndx_rvvm2(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]])
444; CHECK:    [[CALL:%.*]] = tail call double @copysign(double [[IN:%.*]], double [[IN]]) #[[ATTR18:[0-9]+]]
445;
446  entry:
447  br label %for.body
448
449  for.body:
450  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
451  %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
452  %in = load double, ptr %in.gep, align 8
453  %call = tail call double @copysign(double %in, double %in)
454  %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
455  store double %call, ptr %out.gep, align 8
456  %iv.next = add nuw nsw i64 %iv, 1
457  %exitcond = icmp eq i64 %iv.next, 1000
458  br i1 %exitcond, label %for.end, label %for.body
459
460  for.end:
461  ret void
462}
463
464define void @copysign_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
465;
466; CHECK-LABEL: define void @copysign_f32
467; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
468; CHECK:    [[TMP9:%.*]] = call <vscale x 4 x float> @Sleef_copysignfx_rvvm2(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]])
469; CHECK:    [[CALL:%.*]] = tail call float @copysignf(float [[IN:%.*]], float [[IN]]) #[[ATTR19:[0-9]+]]
470;
471  entry:
472  br label %for.body
473
474  for.body:
475  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
476  %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
477  %in = load float, ptr %in.gep, align 8
478  %call = tail call float @copysignf(float %in, float %in)
479  %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
480  store float %call, ptr %out.gep, align 4
481  %iv.next = add nuw nsw i64 %iv, 1
482  %exitcond = icmp eq i64 %iv.next, 1000
483  br i1 %exitcond, label %for.end, label %for.body
484
485  for.end:
486  ret void
487}
488
489declare double @cos(double)
490declare float @cosf(float)
491
492define void @cos_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
493;
494; CHECK-LABEL: define void @cos_f64
495; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
496; CHECK:    [[TMP9:%.*]] = call <vscale x 2 x double> @Sleef_cosdx_u10rvvm2(<vscale x 2 x double> [[WIDE_LOAD:%.*]])
497; CHECK:    [[CALL:%.*]] = tail call double @cos(double [[IN:%.*]]) #[[ATTR20:[0-9]+]]
498;
499  entry:
500  br label %for.body
501
502  for.body:
503  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
504  %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
505  %in = load double, ptr %in.gep, align 8
506  %call = tail call double @cos(double %in)
507  %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
508  store double %call, ptr %out.gep, align 8
509  %iv.next = add nuw nsw i64 %iv, 1
510  %exitcond = icmp eq i64 %iv.next, 1000
511  br i1 %exitcond, label %for.end, label %for.body
512
513  for.end:
514  ret void
515}
516
517define void @cos_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
518;
519; CHECK-LABEL: define void @cos_f32
520; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
521; CHECK:    [[TMP9:%.*]] = call <vscale x 4 x float> @Sleef_cosfx_u10rvvm2(<vscale x 4 x float> [[WIDE_LOAD:%.*]])
522; CHECK:    [[CALL:%.*]] = tail call float @cosf(float [[IN:%.*]]) #[[ATTR21:[0-9]+]]
523;
524  entry:
525  br label %for.body
526
527  for.body:
528  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
529  %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
530  %in = load float, ptr %in.gep, align 8
531  %call = tail call float @cosf(float %in)
532  %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
533  store float %call, ptr %out.gep, align 4
534  %iv.next = add nuw nsw i64 %iv, 1
535  %exitcond = icmp eq i64 %iv.next, 1000
536  br i1 %exitcond, label %for.end, label %for.body
537
538  for.end:
539  ret void
540}
541
542declare double @cosh(double)
543declare float @coshf(float)
544
545define void @cosh_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
546;
547; CHECK-LABEL: define void @cosh_f64
548; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
549; CHECK:    [[TMP9:%.*]] = call <vscale x 2 x double> @Sleef_coshdx_u10rvvm2(<vscale x 2 x double> [[WIDE_LOAD:%.*]])
550; CHECK:    [[CALL:%.*]] = tail call double @cosh(double [[IN:%.*]]) #[[ATTR22:[0-9]+]]
551;
552  entry:
553  br label %for.body
554
555  for.body:
556  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
557  %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
558  %in = load double, ptr %in.gep, align 8
559  %call = tail call double @cosh(double %in)
560  %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
561  store double %call, ptr %out.gep, align 8
562  %iv.next = add nuw nsw i64 %iv, 1
563  %exitcond = icmp eq i64 %iv.next, 1000
564  br i1 %exitcond, label %for.end, label %for.body
565
566  for.end:
567  ret void
568}
569
570define void @cosh_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
571;
572; CHECK-LABEL: define void @cosh_f32
573; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
574; CHECK:    [[TMP9:%.*]] = call <vscale x 4 x float> @Sleef_coshfx_u10rvvm2(<vscale x 4 x float> [[WIDE_LOAD:%.*]])
575; CHECK:    [[CALL:%.*]] = tail call float @coshf(float [[IN:%.*]]) #[[ATTR23:[0-9]+]]
576;
577  entry:
578  br label %for.body
579
580  for.body:
581  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
582  %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
583  %in = load float, ptr %in.gep, align 8
584  %call = tail call float @coshf(float %in)
585  %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
586  store float %call, ptr %out.gep, align 4
587  %iv.next = add nuw nsw i64 %iv, 1
588  %exitcond = icmp eq i64 %iv.next, 1000
589  br i1 %exitcond, label %for.end, label %for.body
590
591  for.end:
592  ret void
593}
594
595declare double @cospi(double)
596declare float @cospif(float)
597
598define void @cospi_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
599;
600; CHECK-LABEL: define void @cospi_f64
601; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
602; CHECK:    [[TMP9:%.*]] = call <vscale x 2 x double> @Sleef_cospidx_u05rvvm2(<vscale x 2 x double> [[WIDE_LOAD:%.*]])
603; CHECK:    [[CALL:%.*]] = tail call double @cospi(double [[IN:%.*]]) #[[ATTR24:[0-9]+]]
604;
605  entry:
606  br label %for.body
607
608  for.body:
609  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
610  %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
611  %in = load double, ptr %in.gep, align 8
612  %call = tail call double @cospi(double %in)
613  %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
614  store double %call, ptr %out.gep, align 8
615  %iv.next = add nuw nsw i64 %iv, 1
616  %exitcond = icmp eq i64 %iv.next, 1000
617  br i1 %exitcond, label %for.end, label %for.body
618
619  for.end:
620  ret void
621}
622
623define void @cospi_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
624;
625; CHECK-LABEL: define void @cospi_f32
626; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
627; CHECK:    [[TMP9:%.*]] = call <vscale x 4 x float> @Sleef_cospifx_u05rvvm2(<vscale x 4 x float> [[WIDE_LOAD:%.*]])
628; CHECK:    [[CALL:%.*]] = tail call float @cospif(float [[IN:%.*]]) #[[ATTR25:[0-9]+]]
629;
630  entry:
631  br label %for.body
632
633  for.body:
634  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
635  %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
636  %in = load float, ptr %in.gep, align 8
637  %call = tail call float @cospif(float %in)
638  %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
639  store float %call, ptr %out.gep, align 4
640  %iv.next = add nuw nsw i64 %iv, 1
641  %exitcond = icmp eq i64 %iv.next, 1000
642  br i1 %exitcond, label %for.end, label %for.body
643
644  for.end:
645  ret void
646}
647
648declare double @erf(double)
649declare float @erff(float)
650
651define void @erf_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
652;
653; CHECK-LABEL: define void @erf_f64
654; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
655; CHECK:    [[TMP9:%.*]] = call <vscale x 2 x double> @Sleef_erfdx_u10rvvm2(<vscale x 2 x double> [[WIDE_LOAD:%.*]])
656; CHECK:    [[CALL:%.*]] = tail call double @erf(double [[IN:%.*]]) #[[ATTR26:[0-9]+]]
657;
658  entry:
659  br label %for.body
660
661  for.body:
662  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
663  %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
664  %in = load double, ptr %in.gep, align 8
665  %call = tail call double @erf(double %in)
666  %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
667  store double %call, ptr %out.gep, align 8
668  %iv.next = add nuw nsw i64 %iv, 1
669  %exitcond = icmp eq i64 %iv.next, 1000
670  br i1 %exitcond, label %for.end, label %for.body
671
672  for.end:
673  ret void
674}
675
676define void @erf_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
677;
678; CHECK-LABEL: define void @erf_f32
679; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
680; CHECK:    [[TMP9:%.*]] = call <vscale x 4 x float> @Sleef_erffx_u10rvvm2(<vscale x 4 x float> [[WIDE_LOAD:%.*]])
681; CHECK:    [[CALL:%.*]] = tail call float @erff(float [[IN:%.*]]) #[[ATTR27:[0-9]+]]
682;
683  entry:
684  br label %for.body
685
686  for.body:
687  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
688  %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
689  %in = load float, ptr %in.gep, align 8
690  %call = tail call float @erff(float %in)
691  %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
692  store float %call, ptr %out.gep, align 4
693  %iv.next = add nuw nsw i64 %iv, 1
694  %exitcond = icmp eq i64 %iv.next, 1000
695  br i1 %exitcond, label %for.end, label %for.body
696
697  for.end:
698  ret void
699}
700
701declare double @erfc(double)
702declare float @erfcf(float)
703
704define void @erfc_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
705;
706; CHECK-LABEL: define void @erfc_f64
707; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
708; CHECK:    [[TMP9:%.*]] = call <vscale x 2 x double> @Sleef_erfcdx_u15rvvm2(<vscale x 2 x double> [[WIDE_LOAD:%.*]])
709; CHECK:    [[CALL:%.*]] = tail call double @erfc(double [[IN:%.*]]) #[[ATTR28:[0-9]+]]
710;
711  entry:
712  br label %for.body
713
714  for.body:
715  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
716  %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
717  %in = load double, ptr %in.gep, align 8
718  %call = tail call double @erfc(double %in)
719  %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
720  store double %call, ptr %out.gep, align 8
721  %iv.next = add nuw nsw i64 %iv, 1
722  %exitcond = icmp eq i64 %iv.next, 1000
723  br i1 %exitcond, label %for.end, label %for.body
724
725  for.end:
726  ret void
727}
728
729define void @erfc_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
730;
731; CHECK-LABEL: define void @erfc_f32
732; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
733; CHECK:    [[TMP9:%.*]] = call <vscale x 4 x float> @Sleef_erfcfx_u15rvvm2(<vscale x 4 x float> [[WIDE_LOAD:%.*]])
734; CHECK:    [[CALL:%.*]] = tail call float @erfcf(float [[IN:%.*]]) #[[ATTR29:[0-9]+]]
735;
736  entry:
737  br label %for.body
738
739  for.body:
740  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
741  %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
742  %in = load float, ptr %in.gep, align 8
743  %call = tail call float @erfcf(float %in)
744  %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
745  store float %call, ptr %out.gep, align 4
746  %iv.next = add nuw nsw i64 %iv, 1
747  %exitcond = icmp eq i64 %iv.next, 1000
748  br i1 %exitcond, label %for.end, label %for.body
749
750  for.end:
751  ret void
752}
753
754declare double @exp(double)
755declare float @expf(float)
756
757define void @exp_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
758;
759; CHECK-LABEL: define void @exp_f64
760; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
761; CHECK:    [[TMP9:%.*]] = call <vscale x 2 x double> @Sleef_expdx_u10rvvm2(<vscale x 2 x double> [[WIDE_LOAD:%.*]])
762; CHECK:    [[CALL:%.*]] = tail call double @exp(double [[IN:%.*]]) #[[ATTR30:[0-9]+]]
763;
764  entry:
765  br label %for.body
766
767  for.body:
768  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
769  %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
770  %in = load double, ptr %in.gep, align 8
771  %call = tail call double @exp(double %in)
772  %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
773  store double %call, ptr %out.gep, align 8
774  %iv.next = add nuw nsw i64 %iv, 1
775  %exitcond = icmp eq i64 %iv.next, 1000
776  br i1 %exitcond, label %for.end, label %for.body
777
778  for.end:
779  ret void
780}
781
782define void @exp_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
783;
784; CHECK-LABEL: define void @exp_f32
785; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
786; CHECK:    [[TMP9:%.*]] = call <vscale x 4 x float> @Sleef_expfx_u10rvvm2(<vscale x 4 x float> [[WIDE_LOAD:%.*]])
787; CHECK:    [[CALL:%.*]] = tail call float @expf(float [[IN:%.*]]) #[[ATTR31:[0-9]+]]
788;
789  entry:
790  br label %for.body
791
792  for.body:
793  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
794  %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
795  %in = load float, ptr %in.gep, align 8
796  %call = tail call float @expf(float %in)
797  %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
798  store float %call, ptr %out.gep, align 4
799  %iv.next = add nuw nsw i64 %iv, 1
800  %exitcond = icmp eq i64 %iv.next, 1000
801  br i1 %exitcond, label %for.end, label %for.body
802
803  for.end:
804  ret void
805}
806
807declare double @exp10(double)
808declare float @exp10f(float)
809
810define void @exp10_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
811;
812; CHECK-LABEL: define void @exp10_f64
813; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
814; CHECK:    [[TMP9:%.*]] = call <vscale x 2 x double> @Sleef_exp10dx_u10rvvm2(<vscale x 2 x double> [[WIDE_LOAD:%.*]])
815; CHECK:    [[CALL:%.*]] = tail call double @exp10(double [[IN:%.*]]) #[[ATTR32:[0-9]+]]
816;
817  entry:
818  br label %for.body
819
820  for.body:
821  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
822  %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
823  %in = load double, ptr %in.gep, align 8
824  %call = tail call double @exp10(double %in)
825  %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
826  store double %call, ptr %out.gep, align 8
827  %iv.next = add nuw nsw i64 %iv, 1
828  %exitcond = icmp eq i64 %iv.next, 1000
829  br i1 %exitcond, label %for.end, label %for.body
830
831  for.end:
832  ret void
833}
834
835define void @exp10_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
836;
837; CHECK-LABEL: define void @exp10_f32
838; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
839; CHECK:    [[TMP9:%.*]] = call <vscale x 4 x float> @Sleef_exp10fx_u10rvvm2(<vscale x 4 x float> [[WIDE_LOAD:%.*]])
840; CHECK:    [[CALL:%.*]] = tail call float @exp10f(float [[IN:%.*]]) #[[ATTR33:[0-9]+]]
841;
842  entry:
843  br label %for.body
844
845  for.body:
846  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
847  %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
848  %in = load float, ptr %in.gep, align 8
849  %call = tail call float @exp10f(float %in)
850  %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
851  store float %call, ptr %out.gep, align 4
852  %iv.next = add nuw nsw i64 %iv, 1
853  %exitcond = icmp eq i64 %iv.next, 1000
854  br i1 %exitcond, label %for.end, label %for.body
855
856  for.end:
857  ret void
858}
859
860declare double @exp2(double)
861declare float @exp2f(float)
862
863define void @exp2_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
864;
865; CHECK-LABEL: define void @exp2_f64
866; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
867; CHECK:    [[TMP9:%.*]] = call <vscale x 2 x double> @Sleef_exp2dx_u10rvvm2(<vscale x 2 x double> [[WIDE_LOAD:%.*]])
868; CHECK:    [[CALL:%.*]] = tail call double @exp2(double [[IN:%.*]]) #[[ATTR34:[0-9]+]]
869;
870  entry:
871  br label %for.body
872
873  for.body:
874  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
875  %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
876  %in = load double, ptr %in.gep, align 8
877  %call = tail call double @exp2(double %in)
878  %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
879  store double %call, ptr %out.gep, align 8
880  %iv.next = add nuw nsw i64 %iv, 1
881  %exitcond = icmp eq i64 %iv.next, 1000
882  br i1 %exitcond, label %for.end, label %for.body
883
884  for.end:
885  ret void
886}
887
888define void @exp2_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
889;
890; CHECK-LABEL: define void @exp2_f32
891; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
892; CHECK:    [[TMP9:%.*]] = call <vscale x 4 x float> @Sleef_exp2fx_u10rvvm2(<vscale x 4 x float> [[WIDE_LOAD:%.*]])
893; CHECK:    [[CALL:%.*]] = tail call float @exp2f(float [[IN:%.*]]) #[[ATTR35:[0-9]+]]
894;
895  entry:
896  br label %for.body
897
898  for.body:
899  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
900  %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
901  %in = load float, ptr %in.gep, align 8
902  %call = tail call float @exp2f(float %in)
903  %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
904  store float %call, ptr %out.gep, align 4
905  %iv.next = add nuw nsw i64 %iv, 1
906  %exitcond = icmp eq i64 %iv.next, 1000
907  br i1 %exitcond, label %for.end, label %for.body
908
909  for.end:
910  ret void
911}
912
913declare double @expm1(double)
914declare float @expm1f(float)
915
916define void @expm1_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
917;
918; CHECK-LABEL: define void @expm1_f64
919; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
920; CHECK:    [[TMP9:%.*]] = call <vscale x 2 x double> @Sleef_expm1dx_u10rvvm2(<vscale x 2 x double> [[WIDE_LOAD:%.*]])
921; CHECK:    [[CALL:%.*]] = tail call double @expm1(double [[IN:%.*]]) #[[ATTR36:[0-9]+]]
922;
923  entry:
924  br label %for.body
925
926  for.body:
927  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
928  %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
929  %in = load double, ptr %in.gep, align 8
930  %call = tail call double @expm1(double %in)
931  %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
932  store double %call, ptr %out.gep, align 8
933  %iv.next = add nuw nsw i64 %iv, 1
934  %exitcond = icmp eq i64 %iv.next, 1000
935  br i1 %exitcond, label %for.end, label %for.body
936
937  for.end:
938  ret void
939}
940
941define void @expm1_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
942;
943; CHECK-LABEL: define void @expm1_f32
944; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
945; CHECK:    [[TMP9:%.*]] = call <vscale x 4 x float> @Sleef_expm1fx_u10rvvm2(<vscale x 4 x float> [[WIDE_LOAD:%.*]])
946; CHECK:    [[CALL:%.*]] = tail call float @expm1f(float [[IN:%.*]]) #[[ATTR37:[0-9]+]]
947;
948  entry:
949  br label %for.body
950
951  for.body:
952  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
953  %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
954  %in = load float, ptr %in.gep, align 8
955  %call = tail call float @expm1f(float %in)
956  %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
957  store float %call, ptr %out.gep, align 4
958  %iv.next = add nuw nsw i64 %iv, 1
959  %exitcond = icmp eq i64 %iv.next, 1000
960  br i1 %exitcond, label %for.end, label %for.body
961
962  for.end:
963  ret void
964}
965
966declare double @fdim(double, double)
967declare float @fdimf(float, float)
968
969define void @fdim_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
970;
971; CHECK-LABEL: define void @fdim_f64
972; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
973; CHECK:    [[TMP9:%.*]] = call <vscale x 2 x double> @Sleef_fdimdx_rvvm2(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]])
974; CHECK:    [[CALL:%.*]] = tail call double @fdim(double [[IN:%.*]], double [[IN]]) #[[ATTR38:[0-9]+]]
975;
976  entry:
977  br label %for.body
978
979  for.body:
980  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
981  %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
982  %in = load double, ptr %in.gep, align 8
983  %call = tail call double @fdim(double %in, double %in)
984  %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
985  store double %call, ptr %out.gep, align 8
986  %iv.next = add nuw nsw i64 %iv, 1
987  %exitcond = icmp eq i64 %iv.next, 1000
988  br i1 %exitcond, label %for.end, label %for.body
989
990  for.end:
991  ret void
992}
993
994define void @fdim_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
995;
996; CHECK-LABEL: define void @fdim_f32
997; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
998; CHECK:    [[TMP9:%.*]] = call <vscale x 4 x float> @Sleef_fdimfx_rvvm2(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]])
999; CHECK:    [[CALL:%.*]] = tail call float @fdimf(float [[IN:%.*]], float [[IN]]) #[[ATTR39:[0-9]+]]
1000;
1001  entry:
1002  br label %for.body
1003
1004  for.body:
1005  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1006  %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
1007  %in = load float, ptr %in.gep, align 8
1008  %call = tail call float @fdimf(float %in, float %in)
1009  %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
1010  store float %call, ptr %out.gep, align 4
1011  %iv.next = add nuw nsw i64 %iv, 1
1012  %exitcond = icmp eq i64 %iv.next, 1000
1013  br i1 %exitcond, label %for.end, label %for.body
1014
1015  for.end:
1016  ret void
1017}
1018
1019declare double @fma(double, double, double)
1020declare float @fmaf(float, float, float)
1021
1022define void @fma_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1023;
1024; CHECK-LABEL: define void @fma_f64
1025; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1026; CHECK:    [[TMP9:%.*]] = call <vscale x 2 x double> @Sleef_fmadx_rvvm2(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]], <vscale x 2 x double> [[WIDE_LOAD]])
1027; CHECK:    [[CALL:%.*]] = tail call double @fma(double [[IN:%.*]], double [[IN]], double [[IN]]) #[[ATTR40:[0-9]+]]
1028;
1029  entry:
1030  br label %for.body
1031
1032  for.body:
1033  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1034  %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
1035  %in = load double, ptr %in.gep, align 8
1036  %call = tail call double @fma(double %in, double %in, double %in)
1037  %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
1038  store double %call, ptr %out.gep, align 8
1039  %iv.next = add nuw nsw i64 %iv, 1
1040  %exitcond = icmp eq i64 %iv.next, 1000
1041  br i1 %exitcond, label %for.end, label %for.body
1042
1043  for.end:
1044  ret void
1045}
1046
1047define void @fma_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1048;
1049; CHECK-LABEL: define void @fma_f32
1050; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1051; CHECK:    [[TMP9:%.*]] = call <vscale x 4 x float> @Sleef_fmafx_rvvm2(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]], <vscale x 4 x float> [[WIDE_LOAD]])
1052; CHECK:    [[CALL:%.*]] = tail call float @fmaf(float [[IN:%.*]], float [[IN]], float [[IN]]) #[[ATTR41:[0-9]+]]
1053;
1054  entry:
1055  br label %for.body
1056
1057  for.body:
1058  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1059  %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
1060  %in = load float, ptr %in.gep, align 8
1061  %call = tail call float @fmaf(float %in, float %in, float %in)
1062  %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
1063  store float %call, ptr %out.gep, align 4
1064  %iv.next = add nuw nsw i64 %iv, 1
1065  %exitcond = icmp eq i64 %iv.next, 1000
1066  br i1 %exitcond, label %for.end, label %for.body
1067
1068  for.end:
1069  ret void
1070}
1071
1072declare double @fmax(double, double)
1073declare float @fmaxf(float, float)
1074
1075define void @fmax_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1076;
1077; CHECK-LABEL: define void @fmax_f64
1078; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1079; CHECK:    [[TMP9:%.*]] = call <vscale x 2 x double> @Sleef_fmaxdx_rvvm2(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]])
1080; CHECK:    [[CALL:%.*]] = tail call double @fmax(double [[IN:%.*]], double [[IN]]) #[[ATTR42:[0-9]+]]
1081;
1082  entry:
1083  br label %for.body
1084
1085  for.body:
1086  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1087  %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
1088  %in = load double, ptr %in.gep, align 8
1089  %call = tail call double @fmax(double %in, double %in)
1090  %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
1091  store double %call, ptr %out.gep, align 8
1092  %iv.next = add nuw nsw i64 %iv, 1
1093  %exitcond = icmp eq i64 %iv.next, 1000
1094  br i1 %exitcond, label %for.end, label %for.body
1095
1096  for.end:
1097  ret void
1098}
1099
1100define void @fmax_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1101;
1102; CHECK-LABEL: define void @fmax_f32
1103; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1104; CHECK:    [[TMP9:%.*]] = call <vscale x 4 x float> @Sleef_fmaxfx_rvvm2(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]])
1105; CHECK:    [[CALL:%.*]] = tail call float @fmaxf(float [[IN:%.*]], float [[IN]]) #[[ATTR43:[0-9]+]]
1106;
1107  entry:
1108  br label %for.body
1109
1110  for.body:
1111  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1112  %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
1113  %in = load float, ptr %in.gep, align 8
1114  %call = tail call float @fmaxf(float %in, float %in)
1115  %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
1116  store float %call, ptr %out.gep, align 4
1117  %iv.next = add nuw nsw i64 %iv, 1
1118  %exitcond = icmp eq i64 %iv.next, 1000
1119  br i1 %exitcond, label %for.end, label %for.body
1120
1121  for.end:
1122  ret void
1123}
1124
1125declare double @fmin(double, double)
1126declare float @fminf(float, float)
1127
1128define void @fmin_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1129;
1130; CHECK-LABEL: define void @fmin_f64
1131; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1132; CHECK:    [[TMP9:%.*]] = call <vscale x 2 x double> @Sleef_fmindx_u10rvvm2(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]])
1133; CHECK:    [[CALL:%.*]] = tail call double @fmin(double [[IN:%.*]], double [[IN]]) #[[ATTR44:[0-9]+]]
1134;
1135  entry:
1136  br label %for.body
1137
1138  for.body:
1139  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1140  %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
1141  %in = load double, ptr %in.gep, align 8
1142  %call = tail call double @fmin(double %in, double %in)
1143  %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
1144  store double %call, ptr %out.gep, align 8
1145  %iv.next = add nuw nsw i64 %iv, 1
1146  %exitcond = icmp eq i64 %iv.next, 1000
1147  br i1 %exitcond, label %for.end, label %for.body
1148
1149  for.end:
1150  ret void
1151}
1152
1153define void @fmin_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1154;
1155; CHECK-LABEL: define void @fmin_f32
1156; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1157; CHECK:    [[TMP9:%.*]] = call <vscale x 4 x float> @Sleef_fminfx_u10rvvm2(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]])
1158; CHECK:    [[CALL:%.*]] = tail call float @fminf(float [[IN:%.*]], float [[IN]]) #[[ATTR45:[0-9]+]]
1159;
1160  entry:
1161  br label %for.body
1162
1163  for.body:
1164  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1165  %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
1166  %in = load float, ptr %in.gep, align 8
1167  %call = tail call float @fminf(float %in, float %in)
1168  %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
1169  store float %call, ptr %out.gep, align 4
1170  %iv.next = add nuw nsw i64 %iv, 1
1171  %exitcond = icmp eq i64 %iv.next, 1000
1172  br i1 %exitcond, label %for.end, label %for.body
1173
1174  for.end:
1175  ret void
1176}
1177
1178declare double @fmod(double, double)
1179declare float @fmodf(float, float)
1180
1181define void @fmod_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1182;
1183; CHECK-LABEL: define void @fmod_f64
1184; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1185; CHECK:    [[TMP9:%.*]] = call <vscale x 2 x double> @Sleef_fmoddx_rvvm2(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]])
1186; CHECK:    [[CALL:%.*]] = tail call double @fmod(double [[IN:%.*]], double [[IN]]) #[[ATTR46:[0-9]+]]
1187;
1188  entry:
1189  br label %for.body
1190
1191  for.body:
1192  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1193  %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
1194  %in = load double, ptr %in.gep, align 8
1195  %call = tail call double @fmod(double %in, double %in)
1196  %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
1197  store double %call, ptr %out.gep, align 8
1198  %iv.next = add nuw nsw i64 %iv, 1
1199  %exitcond = icmp eq i64 %iv.next, 1000
1200  br i1 %exitcond, label %for.end, label %for.body
1201
1202  for.end:
1203  ret void
1204}
1205
1206define void @fmod_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1207;
1208; CHECK-LABEL: define void @fmod_f32
1209; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1210; CHECK:    [[TMP9:%.*]] = call <vscale x 4 x float> @Sleef_fmodfx_rvvm2(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]])
1211; CHECK:    [[CALL:%.*]] = tail call float @fmodf(float [[IN:%.*]], float [[IN]]) #[[ATTR47:[0-9]+]]
1212;
1213  entry:
1214  br label %for.body
1215
1216  for.body:
1217  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1218  %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
1219  %in = load float, ptr %in.gep, align 8
1220  %call = tail call float @fmodf(float %in, float %in)
1221  %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
1222  store float %call, ptr %out.gep, align 4
1223  %iv.next = add nuw nsw i64 %iv, 1
1224  %exitcond = icmp eq i64 %iv.next, 1000
1225  br i1 %exitcond, label %for.end, label %for.body
1226
1227  for.end:
1228  ret void
1229}
1230
1231declare double @hypot(double, double)
1232declare float @hypotf(float, float)
1233
1234define void @hypot_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1235;
1236; CHECK-LABEL: define void @hypot_f64
1237; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1238; CHECK:    [[TMP9:%.*]] = call <vscale x 2 x double> @Sleef_hypotdx_u05rvvm2(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]])
1239; CHECK:    [[CALL:%.*]] = tail call double @hypot(double [[IN:%.*]], double [[IN]]) #[[ATTR48:[0-9]+]]
1240;
1241  entry:
1242  br label %for.body
1243
1244  for.body:
1245  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1246  %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
1247  %in = load double, ptr %in.gep, align 8
1248  %call = tail call double @hypot(double %in, double %in)
1249  %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
1250  store double %call, ptr %out.gep, align 8
1251  %iv.next = add nuw nsw i64 %iv, 1
1252  %exitcond = icmp eq i64 %iv.next, 1000
1253  br i1 %exitcond, label %for.end, label %for.body
1254
1255  for.end:
1256  ret void
1257}
1258
1259define void @hypot_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1260;
1261; CHECK-LABEL: define void @hypot_f32
1262; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1263; CHECK:    [[TMP9:%.*]] = call <vscale x 4 x float> @Sleef_hypotfx_u05rvvm2(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]])
1264; CHECK:    [[CALL:%.*]] = tail call float @hypotf(float [[IN:%.*]], float [[IN]]) #[[ATTR49:[0-9]+]]
1265;
1266  entry:
1267  br label %for.body
1268
1269  for.body:
1270  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1271  %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
1272  %in = load float, ptr %in.gep, align 8
1273  %call = tail call float @hypotf(float %in, float %in)
1274  %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
1275  store float %call, ptr %out.gep, align 4
1276  %iv.next = add nuw nsw i64 %iv, 1
1277  %exitcond = icmp eq i64 %iv.next, 1000
1278  br i1 %exitcond, label %for.end, label %for.body
1279
1280  for.end:
1281  ret void
1282}
1283
1284declare i32 @ilogb(double)
1285declare i32 @ilogbf(float)
1286
1287define void @ilogb_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1288;
1289; CHECK-LABEL: define void @ilogb_f64
1290; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1291; CHECK:    [[TMP9:%.*]] = call <vscale x 2 x i32> @Sleef_ilogbdx_rvvm2(<vscale x 2 x double> [[WIDE_LOAD:%.*]])
1292; CHECK:    [[CALL:%.*]] = tail call i32 @ilogb(double [[IN:%.*]]) #[[ATTR50:[0-9]+]]
1293;
1294  entry:
1295  br label %for.body
1296
1297  for.body:
1298  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1299  %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
1300  %in = load double, ptr %in.gep, align 8
1301  %call = tail call i32 @ilogb(double %in)
1302  %out.gep = getelementptr inbounds i32, ptr %out.ptr, i64 %iv
1303  store i32 %call, ptr %out.gep, align 8
1304  %iv.next = add nuw nsw i64 %iv, 1
1305  %exitcond = icmp eq i64 %iv.next, 1000
1306  br i1 %exitcond, label %for.end, label %for.body
1307
1308  for.end:
1309  ret void
1310}
1311
1312define void @ilogb_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1313;
1314; CHECK-LABEL: define void @ilogb_f32
1315; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1316; CHECK:    [[TMP9:%.*]] = call <vscale x 4 x i32> @Sleef_ilogbfx_rvvm2(<vscale x 4 x float> [[WIDE_LOAD:%.*]])
1317; CHECK:    [[CALL:%.*]] = tail call i32 @ilogbf(float [[IN:%.*]]) #[[ATTR51:[0-9]+]]
1318;
1319  entry:
1320  br label %for.body
1321
1322  for.body:
1323  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1324  %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
1325  %in = load float, ptr %in.gep, align 8
1326  %call = tail call i32 @ilogbf(float %in)
1327  %out.gep = getelementptr inbounds i32, ptr %out.ptr, i64 %iv
1328  store i32 %call, ptr %out.gep, align 4
1329  %iv.next = add nuw nsw i64 %iv, 1
1330  %exitcond = icmp eq i64 %iv.next, 1000
1331  br i1 %exitcond, label %for.end, label %for.body
1332
1333  for.end:
1334  ret void
1335}
1336
1337declare double @ldexp(double, i32)
1338declare float @ldexpf(float, i32)
1339
1340define void @ldexp_f64(ptr noalias %in1.ptr, ptr noalias %in2.ptr, ptr noalias %out.ptr) {
1341;
1342; CHECK-LABEL: define void @ldexp_f64
1343; CHECK-SAME: (ptr noalias [[IN1_PTR:%.*]], ptr noalias [[IN2_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1344; CHECK:    [[TMP11:%.*]] = call <vscale x 2 x double> @Sleef_ldexpdx_rvvm2(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i32> [[WIDE_LOAD1:%.*]])
1345; CHECK:    [[CALL:%.*]] = tail call double @ldexp(double [[IN1:%.*]], i32 [[IN2:%.*]]) #[[ATTR52:[0-9]+]]
1346;
1347  entry:
1348  br label %for.body
1349
1350  for.body:
1351  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1352  %in1.gep = getelementptr inbounds double, ptr %in1.ptr, i64 %iv
1353  %in1 = load double, ptr %in1.gep, align 8
1354  %in2.gep = getelementptr inbounds i32, ptr %in2.ptr, i64 %iv
1355  %in2 = load i32, ptr %in2.gep, align 8
1356  %call = tail call double @ldexp(double %in1, i32 %in2)
1357  %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
1358  store double %call, ptr %out.gep, align 8
1359  %iv.next = add nuw nsw i64 %iv, 1
1360  %exitcond = icmp eq i64 %iv.next, 1000
1361  br i1 %exitcond, label %for.end, label %for.body
1362
1363  for.end:
1364  ret void
1365}
1366
1367define void @ldexp_f32(ptr noalias %in1.ptr, ptr noalias %in2.ptr, ptr noalias %out.ptr) {
1368;
1369; CHECK-LABEL: define void @ldexp_f32
1370; CHECK-SAME: (ptr noalias [[IN1_PTR:%.*]], ptr noalias [[IN2_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1371; CHECK:    [[TMP11:%.*]] = call <vscale x 4 x float> @Sleef_ldexpfx_rvvm2(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i32> [[WIDE_LOAD1:%.*]])
1372; CHECK:    [[CALL:%.*]] = tail call float @ldexpf(float [[IN1:%.*]], i32 [[IN2:%.*]]) #[[ATTR53:[0-9]+]]
1373;
1374  entry:
1375  br label %for.body
1376
1377  for.body:
1378  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1379  %in1.gep = getelementptr inbounds float, ptr %in1.ptr, i64 %iv
1380  %in1 = load float, ptr %in1.gep, align 8
1381  %in2.gep = getelementptr inbounds i32, ptr %in2.ptr, i64 %iv
1382  %in2 = load i32, ptr %in2.gep, align 8
1383  %call = tail call float @ldexpf(float %in1, i32 %in2)
1384  %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
1385  store float %call, ptr %out.gep, align 4
1386  %iv.next = add nuw nsw i64 %iv, 1
1387  %exitcond = icmp eq i64 %iv.next, 1000
1388  br i1 %exitcond, label %for.end, label %for.body
1389
1390  for.end:
1391  ret void
1392}
1393
1394declare double @lgamma(double)
1395declare float @lgammaf(float)
1396
1397define void @lgamma_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1398;
1399; CHECK-LABEL: define void @lgamma_f64
1400; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1401; CHECK:    [[TMP9:%.*]] = call <vscale x 2 x double> @Sleef_lgammadx_u10rvvm2(<vscale x 2 x double> [[WIDE_LOAD:%.*]])
1402; CHECK:    [[CALL:%.*]] = tail call double @lgamma(double [[IN:%.*]]) #[[ATTR54:[0-9]+]]
1403;
1404  entry:
1405  br label %for.body
1406
1407  for.body:
1408  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1409  %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
1410  %in = load double, ptr %in.gep, align 8
1411  %call = tail call double @lgamma(double %in)
1412  %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
1413  store double %call, ptr %out.gep, align 8
1414  %iv.next = add nuw nsw i64 %iv, 1
1415  %exitcond = icmp eq i64 %iv.next, 1000
1416  br i1 %exitcond, label %for.end, label %for.body
1417
1418  for.end:
1419  ret void
1420}
1421
1422define void @lgamma_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1423;
1424; CHECK-LABEL: define void @lgamma_f32
1425; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1426; CHECK:    [[TMP9:%.*]] = call <vscale x 4 x float> @Sleef_lgammafx_u10rvvm2(<vscale x 4 x float> [[WIDE_LOAD:%.*]])
1427; CHECK:    [[CALL:%.*]] = tail call float @lgammaf(float [[IN:%.*]]) #[[ATTR55:[0-9]+]]
1428;
1429  entry:
1430  br label %for.body
1431
1432  for.body:
1433  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1434  %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
1435  %in = load float, ptr %in.gep, align 8
1436  %call = tail call float @lgammaf(float %in)
1437  %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
1438  store float %call, ptr %out.gep, align 4
1439  %iv.next = add nuw nsw i64 %iv, 1
1440  %exitcond = icmp eq i64 %iv.next, 1000
1441  br i1 %exitcond, label %for.end, label %for.body
1442
1443  for.end:
1444  ret void
1445}
1446
1447declare double @log(double)
1448declare float @logf(float)
1449
1450define void @log_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1451;
1452; CHECK-LABEL: define void @log_f64
1453; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1454; CHECK:    [[TMP9:%.*]] = call <vscale x 2 x double> @Sleef_logdx_u10rvvm2(<vscale x 2 x double> [[WIDE_LOAD:%.*]])
1455; CHECK:    [[CALL:%.*]] = tail call double @log(double [[IN:%.*]]) #[[ATTR56:[0-9]+]]
1456;
1457  entry:
1458  br label %for.body
1459
1460  for.body:
1461  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1462  %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
1463  %in = load double, ptr %in.gep, align 8
1464  %call = tail call double @log(double %in)
1465  %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
1466  store double %call, ptr %out.gep, align 8
1467  %iv.next = add nuw nsw i64 %iv, 1
1468  %exitcond = icmp eq i64 %iv.next, 1000
1469  br i1 %exitcond, label %for.end, label %for.body
1470
1471  for.end:
1472  ret void
1473}
1474
1475define void @log_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1476;
1477; CHECK-LABEL: define void @log_f32
1478; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1479; CHECK:    [[TMP9:%.*]] = call <vscale x 4 x float> @Sleef_logfx_u10rvvm2(<vscale x 4 x float> [[WIDE_LOAD:%.*]])
1480; CHECK:    [[CALL:%.*]] = tail call float @logf(float [[IN:%.*]]) #[[ATTR57:[0-9]+]]
1481;
1482  entry:
1483  br label %for.body
1484
1485  for.body:
1486  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1487  %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
1488  %in = load float, ptr %in.gep, align 8
1489  %call = tail call float @logf(float %in)
1490  %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
1491  store float %call, ptr %out.gep, align 4
1492  %iv.next = add nuw nsw i64 %iv, 1
1493  %exitcond = icmp eq i64 %iv.next, 1000
1494  br i1 %exitcond, label %for.end, label %for.body
1495
1496  for.end:
1497  ret void
1498}
1499
1500declare double @log10(double)
1501declare float @log10f(float)
1502
1503define void @log10_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1504;
1505; CHECK-LABEL: define void @log10_f64
1506; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1507; CHECK:    [[TMP9:%.*]] = call <vscale x 2 x double> @Sleef_log10dx_u10rvvm2(<vscale x 2 x double> [[WIDE_LOAD:%.*]])
1508; CHECK:    [[CALL:%.*]] = tail call double @log10(double [[IN:%.*]]) #[[ATTR58:[0-9]+]]
1509;
1510  entry:
1511  br label %for.body
1512
1513  for.body:
1514  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1515  %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
1516  %in = load double, ptr %in.gep, align 8
1517  %call = tail call double @log10(double %in)
1518  %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
1519  store double %call, ptr %out.gep, align 8
1520  %iv.next = add nuw nsw i64 %iv, 1
1521  %exitcond = icmp eq i64 %iv.next, 1000
1522  br i1 %exitcond, label %for.end, label %for.body
1523
1524  for.end:
1525  ret void
1526}
1527
1528define void @log10_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1529;
1530; CHECK-LABEL: define void @log10_f32
1531; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1532; CHECK:    [[TMP9:%.*]] = call <vscale x 4 x float> @Sleef_log10fx_u10rvvm2(<vscale x 4 x float> [[WIDE_LOAD:%.*]])
1533; CHECK:    [[CALL:%.*]] = tail call float @log10f(float [[IN:%.*]]) #[[ATTR59:[0-9]+]]
1534;
1535  entry:
1536  br label %for.body
1537
1538  for.body:
1539  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1540  %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
1541  %in = load float, ptr %in.gep, align 8
1542  %call = tail call float @log10f(float %in)
1543  %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
1544  store float %call, ptr %out.gep, align 4
1545  %iv.next = add nuw nsw i64 %iv, 1
1546  %exitcond = icmp eq i64 %iv.next, 1000
1547  br i1 %exitcond, label %for.end, label %for.body
1548
1549  for.end:
1550  ret void
1551}
1552
1553declare double @log1p(double)
1554declare float @log1pf(float)
1555
1556define void @log1p_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1557;
1558; CHECK-LABEL: define void @log1p_f64
1559; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1560; CHECK:    [[TMP9:%.*]] = call <vscale x 2 x double> @Sleef_log1pdx_u10rvvm2(<vscale x 2 x double> [[WIDE_LOAD:%.*]])
1561; CHECK:    [[CALL:%.*]] = tail call double @log1p(double [[IN:%.*]]) #[[ATTR60:[0-9]+]]
1562;
1563  entry:
1564  br label %for.body
1565
1566  for.body:
1567  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1568  %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
1569  %in = load double, ptr %in.gep, align 8
1570  %call = tail call double @log1p(double %in)
1571  %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
1572  store double %call, ptr %out.gep, align 8
1573  %iv.next = add nuw nsw i64 %iv, 1
1574  %exitcond = icmp eq i64 %iv.next, 1000
1575  br i1 %exitcond, label %for.end, label %for.body
1576
1577  for.end:
1578  ret void
1579}
1580
1581define void @log1p_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1582;
1583; CHECK-LABEL: define void @log1p_f32
1584; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1585; CHECK:    [[TMP9:%.*]] = call <vscale x 4 x float> @Sleef_log1pfx_u10rvvm2(<vscale x 4 x float> [[WIDE_LOAD:%.*]])
1586; CHECK:    [[CALL:%.*]] = tail call float @log1pf(float [[IN:%.*]]) #[[ATTR61:[0-9]+]]
1587;
1588  entry:
1589  br label %for.body
1590
1591  for.body:
1592  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1593  %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
1594  %in = load float, ptr %in.gep, align 8
1595  %call = tail call float @log1pf(float %in)
1596  %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
1597  store float %call, ptr %out.gep, align 4
1598  %iv.next = add nuw nsw i64 %iv, 1
1599  %exitcond = icmp eq i64 %iv.next, 1000
1600  br i1 %exitcond, label %for.end, label %for.body
1601
1602  for.end:
1603  ret void
1604}
1605
1606declare double @log2(double)
1607declare float @log2f(float)
1608
1609define void @log2_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1610;
1611; CHECK-LABEL: define void @log2_f64
1612; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1613; CHECK:    [[TMP9:%.*]] = call <vscale x 2 x double> @Sleef_log2dx_u10rvvm2(<vscale x 2 x double> [[WIDE_LOAD:%.*]])
1614; CHECK:    [[CALL:%.*]] = tail call double @log2(double [[IN:%.*]]) #[[ATTR62:[0-9]+]]
1615;
1616  entry:
1617  br label %for.body
1618
1619  for.body:
1620  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1621  %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
1622  %in = load double, ptr %in.gep, align 8
1623  %call = tail call double @log2(double %in)
1624  %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
1625  store double %call, ptr %out.gep, align 8
1626  %iv.next = add nuw nsw i64 %iv, 1
1627  %exitcond = icmp eq i64 %iv.next, 1000
1628  br i1 %exitcond, label %for.end, label %for.body
1629
1630  for.end:
1631  ret void
1632}
1633
1634define void @log2_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1635;
1636; CHECK-LABEL: define void @log2_f32
1637; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1638; CHECK:    [[TMP9:%.*]] = call <vscale x 4 x float> @Sleef_log2fx_u10rvvm2(<vscale x 4 x float> [[WIDE_LOAD:%.*]])
1639; CHECK:    [[CALL:%.*]] = tail call float @log2f(float [[IN:%.*]]) #[[ATTR63:[0-9]+]]
1640;
1641  entry:
1642  br label %for.body
1643
1644  for.body:
1645  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1646  %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
1647  %in = load float, ptr %in.gep, align 8
1648  %call = tail call float @log2f(float %in)
1649  %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
1650  store float %call, ptr %out.gep, align 4
1651  %iv.next = add nuw nsw i64 %iv, 1
1652  %exitcond = icmp eq i64 %iv.next, 1000
1653  br i1 %exitcond, label %for.end, label %for.body
1654
1655  for.end:
1656  ret void
1657}
1658
1659declare double @modf(double, ptr)
1660declare float @modff(float, ptr)
1661
1662define void @modf_f64(ptr noalias %a, ptr noalias %b, ptr noalias %c) {
1663;
1664; CHECK-LABEL: define void @modf_f64
1665; CHECK-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
1666; CHECK:    [[DATA:%.*]] = call double @modf(double [[NUM:%.*]], ptr [[GEPB:%.*]]) #[[ATTR64:[0-9]+]]
1667;
1668entry:
1669  br label %for.body
1670
1671for.body:
1672  %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]
1673  %gepa = getelementptr double, ptr %a, i64 %indvars.iv
1674  %num = load double, ptr %gepa, align 8
1675  %gepb = getelementptr double, ptr %b, i64 %indvars.iv
1676  %data = call double @modf(double %num, ptr %gepb)
1677  %gepc = getelementptr inbounds double, ptr %c, i64 %indvars.iv
1678  store double %data, ptr %gepc, align 8
1679  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
1680  %exitcond = icmp eq i64 %indvars.iv.next, 1000
1681  br i1 %exitcond, label %for.cond.cleanup, label %for.body
1682
1683for.cond.cleanup:
1684  ret void
1685}
1686
1687define void @modf_f32(ptr noalias %a, ptr noalias %b, ptr noalias %c) {
1688;
1689; CHECK-LABEL: define void @modf_f32
1690; CHECK-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
1691; CHECK:    [[DATA:%.*]] = call float @modff(float [[NUM:%.*]], ptr [[GEPB:%.*]]) #[[ATTR65:[0-9]+]]
1692;
1693entry:
1694  br label %for.body
1695
1696for.body:
1697  %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]
1698  %gepa = getelementptr float, ptr %a, i64 %indvars.iv
1699  %num = load float, ptr %gepa, align 8
1700  %gepb = getelementptr float, ptr %b, i64 %indvars.iv
1701  %data = call float @modff(float %num, ptr %gepb)
1702  %gepc = getelementptr inbounds float, ptr %c, i64 %indvars.iv
1703  store float %data, ptr %gepc, align 8
1704  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
1705  %exitcond = icmp eq i64 %indvars.iv.next, 1000
1706  br i1 %exitcond, label %for.cond.cleanup, label %for.body
1707
1708for.cond.cleanup:
1709  ret void
1710}
1711
1712declare double @nextafter(double, double)
1713declare float @nextafterf(float, float)
1714
1715define void @nextafter_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1716;
1717; CHECK-LABEL: define void @nextafter_f64
1718; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1719; CHECK:    [[TMP9:%.*]] = call <vscale x 2 x double> @Sleef_nextafterdx_rvvm2(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]])
1720; CHECK:    [[CALL:%.*]] = tail call double @nextafter(double [[IN:%.*]], double [[IN]]) #[[ATTR66:[0-9]+]]
1721;
1722  entry:
1723  br label %for.body
1724
1725  for.body:
1726  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1727  %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
1728  %in = load double, ptr %in.gep, align 8
1729  %call = tail call double @nextafter(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
1735
1736  for.end:
1737  ret void
1738}
1739
1740define void @nextafter_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1741;
1742; CHECK-LABEL: define void @nextafter_f32
1743; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1744; CHECK:    [[TMP9:%.*]] = call <vscale x 4 x float> @Sleef_nextafterfx_rvvm2(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]])
1745; CHECK:    [[CALL:%.*]] = tail call float @nextafterf(float [[IN:%.*]], float [[IN]]) #[[ATTR67:[0-9]+]]
1746;
1747  entry:
1748  br label %for.body
1749
1750  for.body:
1751  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1752  %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
1753  %in = load float, ptr %in.gep, align 8
1754  %call = tail call float @nextafterf(float %in, float %in)
1755  %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
1756  store float %call, ptr %out.gep, align 4
1757  %iv.next = add nuw nsw i64 %iv, 1
1758  %exitcond = icmp eq i64 %iv.next, 1000
1759  br i1 %exitcond, label %for.end, label %for.body
1760
1761  for.end:
1762  ret void
1763}
1764
1765declare double @pow(double, double)
1766declare float @powf(float, float)
1767
1768define void @pow_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1769;
1770; CHECK-LABEL: define void @pow_f64
1771; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1772; CHECK:    [[TMP9:%.*]] = call <vscale x 2 x double> @Sleef_powdx_u10rvvm2(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]])
1773; CHECK:    [[CALL:%.*]] = tail call double @pow(double [[IN:%.*]], double [[IN]]) #[[ATTR68:[0-9]+]]
1774;
1775  entry:
1776  br label %for.body
1777
1778  for.body:
1779  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1780  %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
1781  %in = load double, ptr %in.gep, align 8
1782  %call = tail call double @pow(double %in, double %in)
1783  %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
1784  store double %call, ptr %out.gep, align 8
1785  %iv.next = add nuw nsw i64 %iv, 1
1786  %exitcond = icmp eq i64 %iv.next, 1000
1787  br i1 %exitcond, label %for.end, label %for.body
1788
1789  for.end:
1790  ret void
1791}
1792
1793define void @pow_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1794;
1795; CHECK-LABEL: define void @pow_f32
1796; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1797; CHECK:    [[TMP9:%.*]] = call <vscale x 4 x float> @Sleef_powfx_u10rvvm2(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]])
1798; CHECK:    [[CALL:%.*]] = tail call float @powf(float [[IN:%.*]], float [[IN]]) #[[ATTR69:[0-9]+]]
1799;
1800  entry:
1801  br label %for.body
1802
1803  for.body:
1804  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1805  %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
1806  %in = load float, ptr %in.gep, align 8
1807  %call = tail call float @powf(float %in, float %in)
1808  %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
1809  store float %call, ptr %out.gep, align 4
1810  %iv.next = add nuw nsw i64 %iv, 1
1811  %exitcond = icmp eq i64 %iv.next, 1000
1812  br i1 %exitcond, label %for.end, label %for.body
1813
1814  for.end:
1815  ret void
1816}
1817
1818declare double @sin(double)
1819declare float @sinf(float)
1820
1821define void @sin_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1822;
1823; CHECK-LABEL: define void @sin_f64
1824; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1825; CHECK:    [[TMP9:%.*]] = call <vscale x 2 x double> @Sleef_sindx_u10rvvm2(<vscale x 2 x double> [[WIDE_LOAD:%.*]])
1826; CHECK:    [[CALL:%.*]] = tail call double @sin(double [[IN:%.*]]) #[[ATTR70:[0-9]+]]
1827;
1828  entry:
1829  br label %for.body
1830
1831  for.body:
1832  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1833  %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
1834  %in = load double, ptr %in.gep, align 8
1835  %call = tail call double @sin(double %in)
1836  %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
1837  store double %call, ptr %out.gep, align 8
1838  %iv.next = add nuw nsw i64 %iv, 1
1839  %exitcond = icmp eq i64 %iv.next, 1000
1840  br i1 %exitcond, label %for.end, label %for.body
1841
1842  for.end:
1843  ret void
1844}
1845
1846define void @sin_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1847;
1848; CHECK-LABEL: define void @sin_f32
1849; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1850; CHECK:    [[TMP9:%.*]] = call <vscale x 4 x float> @Sleef_sinfx_u10rvvm2(<vscale x 4 x float> [[WIDE_LOAD:%.*]])
1851; CHECK:    [[CALL:%.*]] = tail call float @sinf(float [[IN:%.*]]) #[[ATTR71:[0-9]+]]
1852;
1853  entry:
1854  br label %for.body
1855
1856  for.body:
1857  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1858  %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
1859  %in = load float, ptr %in.gep, align 8
1860  %call = tail call float @sinf(float %in)
1861  %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
1862  store float %call, ptr %out.gep, align 4
1863  %iv.next = add nuw nsw i64 %iv, 1
1864  %exitcond = icmp eq i64 %iv.next, 1000
1865  br i1 %exitcond, label %for.end, label %for.body
1866
1867  for.end:
1868  ret void
1869}
1870
1871declare void @sincos(double, ptr, ptr)
1872declare void @sincosf(float, ptr, ptr)
1873
1874define void @sincos_f64(ptr noalias %a, ptr noalias %b, ptr noalias %c) {
1875;
1876; CHECK-LABEL: define void @sincos_f64
1877; CHECK-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
1878; CHECK:    call void @sincos(double [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]]) #[[ATTR72:[0-9]+]]
1879;
1880entry:
1881  br label %for.body
1882
1883for.body:
1884  %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]
1885  %gepa = getelementptr double, ptr %a, i64 %indvars.iv
1886  %num = load double, ptr %gepa, align 8
1887  %gepb = getelementptr double, ptr %b, i64 %indvars.iv
1888  %gepc = getelementptr double, ptr %c, i64 %indvars.iv
1889  call void @sincos(double %num, ptr %gepb, ptr %gepc)
1890  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
1891  %exitcond = icmp eq i64 %indvars.iv.next, 1000
1892  br i1 %exitcond, label %for.cond.cleanup, label %for.body
1893
1894for.cond.cleanup:
1895  ret void
1896}
1897
1898define void @sincos_f32(ptr noalias %a, ptr noalias %b, ptr noalias %c) {
1899;
1900; CHECK-LABEL: define void @sincos_f32
1901; CHECK-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
1902; CHECK:    call void @sincosf(float [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]]) #[[ATTR73:[0-9]+]]
1903;
1904entry:
1905  br label %for.body
1906
1907for.body:
1908  %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]
1909  %gepa = getelementptr float, ptr %a, i64 %indvars.iv
1910  %num = load float, ptr %gepa, align 8
1911  %gepb = getelementptr float, ptr %b, i64 %indvars.iv
1912  %gepc = getelementptr float, ptr %c, i64 %indvars.iv
1913  call void @sincosf(float %num, ptr %gepb, ptr %gepc)
1914  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
1915  %exitcond = icmp eq i64 %indvars.iv.next, 1000
1916  br i1 %exitcond, label %for.cond.cleanup, label %for.body
1917
1918for.cond.cleanup:
1919  ret void
1920}
1921
1922declare void @sincospi(double, ptr, ptr)
1923declare void @sincospif(float, ptr, ptr)
1924
1925define void @sincospi_f64(ptr noalias %a, ptr noalias %b, ptr noalias %c) {
1926;
1927; CHECK-LABEL: define void @sincospi_f64
1928; CHECK-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
1929; CHECK:    call void @sincospi(double [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]]) #[[ATTR74:[0-9]+]]
1930;
1931entry:
1932  br label %for.body
1933
1934for.body:
1935  %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]
1936  %gepa = getelementptr double, ptr %a, i64 %indvars.iv
1937  %num = load double, ptr %gepa, align 8
1938  %gepb = getelementptr double, ptr %b, i64 %indvars.iv
1939  %gepc = getelementptr double, ptr %c, i64 %indvars.iv
1940  call void @sincospi(double %num, ptr %gepb, ptr %gepc)
1941  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
1942  %exitcond = icmp eq i64 %indvars.iv.next, 1000
1943  br i1 %exitcond, label %for.cond.cleanup, label %for.body
1944
1945for.cond.cleanup:
1946  ret void
1947}
1948
1949define void @sincospi_f32(ptr noalias %a, ptr noalias %b, ptr noalias %c) {
1950; CHECK-LABEL: define void @sincospi_f32
1951; CHECK-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {
1952; CHECK:    call void @sincospif(float [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]]) #[[ATTR75:[0-9]+]]
1953;
1954entry:
1955  br label %for.body
1956
1957for.body:
1958  %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]
1959  %gepa = getelementptr float, ptr %a, i64 %indvars.iv
1960  %num = load float, ptr %gepa, align 8
1961  %gepb = getelementptr float, ptr %b, i64 %indvars.iv
1962  %gepc = getelementptr float, ptr %c, i64 %indvars.iv
1963  call void @sincospif(float %num, ptr %gepb, ptr %gepc)
1964  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
1965  %exitcond = icmp eq i64 %indvars.iv.next, 1000
1966  br i1 %exitcond, label %for.cond.cleanup, label %for.body
1967
1968for.cond.cleanup:
1969  ret void
1970}
1971
1972declare double @sinh(double)
1973declare float @sinhf(float)
1974
1975define void @sinh_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
1976;
1977; CHECK-LABEL: define void @sinh_f64
1978; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
1979; CHECK:    [[TMP9:%.*]] = call <vscale x 2 x double> @Sleef_sinhdx_u10rvvm2(<vscale x 2 x double> [[WIDE_LOAD:%.*]])
1980; CHECK:    [[CALL:%.*]] = tail call double @sinh(double [[IN:%.*]]) #[[ATTR76:[0-9]+]]
1981;
1982  entry:
1983  br label %for.body
1984
1985  for.body:
1986  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1987  %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
1988  %in = load double, ptr %in.gep, align 8
1989  %call = tail call double @sinh(double %in)
1990  %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
1991  store double %call, ptr %out.gep, align 8
1992  %iv.next = add nuw nsw i64 %iv, 1
1993  %exitcond = icmp eq i64 %iv.next, 1000
1994  br i1 %exitcond, label %for.end, label %for.body
1995
1996  for.end:
1997  ret void
1998}
1999
2000define void @sinh_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2001;
2002; CHECK-LABEL: define void @sinh_f32
2003; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2004; CHECK:    [[TMP9:%.*]] = call <vscale x 4 x float> @Sleef_sinhfx_u10rvvm2(<vscale x 4 x float> [[WIDE_LOAD:%.*]])
2005; CHECK:    [[CALL:%.*]] = tail call float @sinhf(float [[IN:%.*]]) #[[ATTR77:[0-9]+]]
2006;
2007  entry:
2008  br label %for.body
2009
2010  for.body:
2011  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2012  %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
2013  %in = load float, ptr %in.gep, align 8
2014  %call = tail call float @sinhf(float %in)
2015  %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
2016  store float %call, ptr %out.gep, align 4
2017  %iv.next = add nuw nsw i64 %iv, 1
2018  %exitcond = icmp eq i64 %iv.next, 1000
2019  br i1 %exitcond, label %for.end, label %for.body
2020
2021  for.end:
2022  ret void
2023}
2024
2025declare double @sinpi(double)
2026declare float @sinpif(float)
2027
2028define void @sinpi_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2029;
2030; CHECK-LABEL: define void @sinpi_f64
2031; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2032; CHECK:    [[TMP9:%.*]] = call <vscale x 2 x double> @Sleef_sinpidx_u05rvvm2(<vscale x 2 x double> [[WIDE_LOAD:%.*]])
2033; CHECK:    [[CALL:%.*]] = tail call double @sinpi(double [[IN:%.*]]) #[[ATTR78:[0-9]+]]
2034;
2035  entry:
2036  br label %for.body
2037
2038  for.body:
2039  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2040  %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
2041  %in = load double, ptr %in.gep, align 8
2042  %call = tail call double @sinpi(double %in)
2043  %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
2044  store double %call, ptr %out.gep, align 8
2045  %iv.next = add nuw nsw i64 %iv, 1
2046  %exitcond = icmp eq i64 %iv.next, 1000
2047  br i1 %exitcond, label %for.end, label %for.body
2048
2049  for.end:
2050  ret void
2051}
2052
2053define void @sinpi_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2054;
2055; CHECK-LABEL: define void @sinpi_f32
2056; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2057; CHECK:    [[TMP9:%.*]] = call <vscale x 4 x float> @Sleef_sinpifx_u05rvvm2(<vscale x 4 x float> [[WIDE_LOAD:%.*]])
2058; CHECK:    [[CALL:%.*]] = tail call float @sinpif(float [[IN:%.*]]) #[[ATTR79:[0-9]+]]
2059;
2060  entry:
2061  br label %for.body
2062
2063  for.body:
2064  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2065  %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
2066  %in = load float, ptr %in.gep, align 8
2067  %call = tail call float @sinpif(float %in)
2068  %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
2069  store float %call, ptr %out.gep, align 4
2070  %iv.next = add nuw nsw i64 %iv, 1
2071  %exitcond = icmp eq i64 %iv.next, 1000
2072  br i1 %exitcond, label %for.end, label %for.body
2073
2074  for.end:
2075  ret void
2076}
2077
2078declare double @sqrt(double)
2079declare float @sqrtf(float)
2080
2081define void @sqrt_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2082;
2083; CHECK-LABEL: define void @sqrt_f64
2084; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2085; CHECK:    [[TMP9:%.*]] = call <vscale x 2 x double> @Sleef_sqrtdx_u05rvvm2(<vscale x 2 x double> [[WIDE_LOAD:%.*]])
2086; CHECK:    [[CALL:%.*]] = tail call double @sqrt(double [[IN:%.*]]) #[[ATTR80:[0-9]+]]
2087;
2088  entry:
2089  br label %for.body
2090
2091  for.body:
2092  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2093  %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
2094  %in = load double, ptr %in.gep, align 8
2095  %call = tail call double @sqrt(double %in)
2096  %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
2097  store double %call, ptr %out.gep, align 8
2098  %iv.next = add nuw nsw i64 %iv, 1
2099  %exitcond = icmp eq i64 %iv.next, 1000
2100  br i1 %exitcond, label %for.end, label %for.body
2101
2102  for.end:
2103  ret void
2104}
2105
2106define void @sqrt_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2107;
2108; CHECK-LABEL: define void @sqrt_f32
2109; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2110; CHECK:    [[TMP9:%.*]] = call <vscale x 4 x float> @Sleef_sqrtfx_u05rvvm2(<vscale x 4 x float> [[WIDE_LOAD:%.*]])
2111; CHECK:    [[CALL:%.*]] = tail call float @sqrtf(float [[IN:%.*]]) #[[ATTR81:[0-9]+]]
2112;
2113  entry:
2114  br label %for.body
2115
2116  for.body:
2117  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2118  %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
2119  %in = load float, ptr %in.gep, align 8
2120  %call = tail call float @sqrtf(float %in)
2121  %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
2122  store float %call, ptr %out.gep, align 4
2123  %iv.next = add nuw nsw i64 %iv, 1
2124  %exitcond = icmp eq i64 %iv.next, 1000
2125  br i1 %exitcond, label %for.end, label %for.body
2126
2127  for.end:
2128  ret void
2129}
2130
2131declare double @tan(double)
2132declare float @tanf(float)
2133
2134define void @tan_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2135;
2136; CHECK-LABEL: define void @tan_f64
2137; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2138; CHECK:    [[TMP9:%.*]] = call <vscale x 2 x double> @Sleef_tandx_u10rvvm2(<vscale x 2 x double> [[WIDE_LOAD:%.*]])
2139; CHECK:    [[CALL:%.*]] = tail call double @tan(double [[IN:%.*]]) #[[ATTR82:[0-9]+]]
2140;
2141  entry:
2142  br label %for.body
2143
2144  for.body:
2145  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2146  %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
2147  %in = load double, ptr %in.gep, align 8
2148  %call = tail call double @tan(double %in)
2149  %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
2150  store double %call, ptr %out.gep, align 8
2151  %iv.next = add nuw nsw i64 %iv, 1
2152  %exitcond = icmp eq i64 %iv.next, 1000
2153  br i1 %exitcond, label %for.end, label %for.body
2154
2155  for.end:
2156  ret void
2157}
2158
2159define void @tan_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2160;
2161; CHECK-LABEL: define void @tan_f32
2162; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2163; CHECK:    [[TMP9:%.*]] = call <vscale x 4 x float> @Sleef_tanfx_u10rvvm2(<vscale x 4 x float> [[WIDE_LOAD:%.*]])
2164; CHECK:    [[CALL:%.*]] = tail call float @tanf(float [[IN:%.*]]) #[[ATTR83:[0-9]+]]
2165;
2166  entry:
2167  br label %for.body
2168
2169  for.body:
2170  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2171  %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
2172  %in = load float, ptr %in.gep, align 8
2173  %call = tail call float @tanf(float %in)
2174  %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
2175  store float %call, ptr %out.gep, align 4
2176  %iv.next = add nuw nsw i64 %iv, 1
2177  %exitcond = icmp eq i64 %iv.next, 1000
2178  br i1 %exitcond, label %for.end, label %for.body
2179
2180  for.end:
2181  ret void
2182}
2183
2184declare double @tanh(double)
2185declare float @tanhf(float)
2186
2187define void @tanh_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2188;
2189; CHECK-LABEL: define void @tanh_f64
2190; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2191; CHECK:    [[TMP9:%.*]] = call <vscale x 2 x double> @Sleef_tanhdx_u10rvvm2(<vscale x 2 x double> [[WIDE_LOAD:%.*]])
2192; CHECK:    [[CALL:%.*]] = tail call double @tanh(double [[IN:%.*]]) #[[ATTR84:[0-9]+]]
2193;
2194  entry:
2195  br label %for.body
2196
2197  for.body:
2198  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2199  %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
2200  %in = load double, ptr %in.gep, align 8
2201  %call = tail call double @tanh(double %in)
2202  %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
2203  store double %call, ptr %out.gep, align 8
2204  %iv.next = add nuw nsw i64 %iv, 1
2205  %exitcond = icmp eq i64 %iv.next, 1000
2206  br i1 %exitcond, label %for.end, label %for.body
2207
2208  for.end:
2209  ret void
2210}
2211
2212define void @tanh_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2213;
2214; CHECK-LABEL: define void @tanh_f32
2215; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2216; CHECK:    [[TMP9:%.*]] = call <vscale x 4 x float> @Sleef_tanhfx_u10rvvm2(<vscale x 4 x float> [[WIDE_LOAD:%.*]])
2217; CHECK:    [[CALL:%.*]] = tail call float @tanhf(float [[IN:%.*]]) #[[ATTR85:[0-9]+]]
2218;
2219  entry:
2220  br label %for.body
2221
2222  for.body:
2223  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2224  %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
2225  %in = load float, ptr %in.gep, align 8
2226  %call = tail call float @tanhf(float %in)
2227  %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
2228  store float %call, ptr %out.gep, align 4
2229  %iv.next = add nuw nsw i64 %iv, 1
2230  %exitcond = icmp eq i64 %iv.next, 1000
2231  br i1 %exitcond, label %for.end, label %for.body
2232
2233  for.end:
2234  ret void
2235}
2236
2237declare double @tgamma(double)
2238declare float @tgammaf(float)
2239
2240define void @tgamma_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2241;
2242; CHECK-LABEL: define void @tgamma_f64
2243; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2244; CHECK:    [[TMP9:%.*]] = call <vscale x 2 x double> @Sleef_tgammadx_u10rvvm2(<vscale x 2 x double> [[WIDE_LOAD:%.*]])
2245; CHECK:    [[CALL:%.*]] = tail call double @tgamma(double [[IN:%.*]]) #[[ATTR86:[0-9]+]]
2246;
2247  entry:
2248  br label %for.body
2249
2250  for.body:
2251  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2252  %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv
2253  %in = load double, ptr %in.gep, align 8
2254  %call = tail call double @tgamma(double %in)
2255  %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv
2256  store double %call, ptr %out.gep, align 8
2257  %iv.next = add nuw nsw i64 %iv, 1
2258  %exitcond = icmp eq i64 %iv.next, 1000
2259  br i1 %exitcond, label %for.end, label %for.body
2260
2261  for.end:
2262  ret void
2263}
2264
2265define void @tgamma_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {
2266;
2267; CHECK-LABEL: define void @tgamma_f32
2268; CHECK-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {
2269; CHECK:    [[TMP9:%.*]] = call <vscale x 4 x float> @Sleef_tgammafx_u10rvvm2(<vscale x 4 x float> [[WIDE_LOAD:%.*]])
2270; CHECK:    [[CALL:%.*]] = tail call float @tgammaf(float [[IN:%.*]]) #[[ATTR87:[0-9]+]]
2271;
2272  entry:
2273  br label %for.body
2274
2275  for.body:
2276  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
2277  %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv
2278  %in = load float, ptr %in.gep, align 8
2279  %call = tail call float @tgammaf(float %in)
2280  %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv
2281  store float %call, ptr %out.gep, align 4
2282  %iv.next = add nuw nsw i64 %iv, 1
2283  %exitcond = icmp eq i64 %iv.next, 1000
2284  br i1 %exitcond, label %for.end, label %for.body
2285
2286  for.end:
2287  ret void
2288}
2289;.
2290; CHECK: attributes #[[ATTR0]] = { "target-features"="+v" }
2291; CHECK: attributes #[[ATTR1:[0-9]+]] = { nocallback nofree nosync nounwind willreturn memory(none) }
2292; CHECK: attributes #[[ATTR2]] = { "vector-function-abi-variant"="_ZGVrNxv_acos(Sleef_acosdx_u10rvvm2)" }
2293; CHECK: attributes #[[ATTR3]] = { "vector-function-abi-variant"="_ZGVrNxv_acosf(Sleef_acosfx_u10rvvm2)" }
2294; CHECK: attributes #[[ATTR4]] = { "vector-function-abi-variant"="_ZGVrNxv_acosh(Sleef_acoshdx_u10rvvm2)" }
2295; CHECK: attributes #[[ATTR5]] = { "vector-function-abi-variant"="_ZGVrNxv_acoshf(Sleef_acoshfx_u10rvvm2)" }
2296; CHECK: attributes #[[ATTR6]] = { "vector-function-abi-variant"="_ZGVrNxv_asin(Sleef_asindx_u10rvvm2)" }
2297; CHECK: attributes #[[ATTR7]] = { "vector-function-abi-variant"="_ZGVrNxv_asinf(Sleef_asinfx_u10rvvm2)" }
2298; CHECK: attributes #[[ATTR8]] = { "vector-function-abi-variant"="_ZGVrNxv_asinh(Sleef_asinhdx_u10rvvm2)" }
2299; CHECK: attributes #[[ATTR9]] = { "vector-function-abi-variant"="_ZGVrNxv_asinhf(Sleef_asinhfx_u10rvvm2)" }
2300; CHECK: attributes #[[ATTR10]] = { "vector-function-abi-variant"="_ZGVrNxv_atan(Sleef_atandx_u10rvvm2)" }
2301; CHECK: attributes #[[ATTR11]] = { "vector-function-abi-variant"="_ZGVrNxv_atanf(Sleef_atanfx_u10rvvm2)" }
2302; CHECK: attributes #[[ATTR12]] = { "vector-function-abi-variant"="_ZGVrNxvv_atan2(Sleef_atan2dx_u10rvvm2)" }
2303; CHECK: attributes #[[ATTR13]] = { "vector-function-abi-variant"="_ZGVrNxvv_atan2f(Sleef_atan2fx_u10rvvm2)" }
2304; CHECK: attributes #[[ATTR14]] = { "vector-function-abi-variant"="_ZGVrNxv_atanh(Sleef_atanhdx_u10rvvm2)" }
2305; CHECK: attributes #[[ATTR15]] = { "vector-function-abi-variant"="_ZGVrNxv_atanhf(Sleef_atanhfx_u10rvvm2)" }
2306; CHECK: attributes #[[ATTR16]] = { "vector-function-abi-variant"="_ZGVrNxv_cbrt(Sleef_cbrtdx_u10rvvm2)" }
2307; CHECK: attributes #[[ATTR17]] = { "vector-function-abi-variant"="_ZGVrNxv_cbrtf(Sleef_cbrtfx_u10rvvm2)" }
2308; CHECK: attributes #[[ATTR18]] = { "vector-function-abi-variant"="_ZGVrNxvv_copysign(Sleef_copysigndx_rvvm2)" }
2309; CHECK: attributes #[[ATTR19]] = { "vector-function-abi-variant"="_ZGVrNxvv_copysignf(Sleef_copysignfx_rvvm2)" }
2310; CHECK: attributes #[[ATTR20]] = { "vector-function-abi-variant"="_ZGVrNxv_cos(Sleef_cosdx_u10rvvm2)" }
2311; CHECK: attributes #[[ATTR21]] = { "vector-function-abi-variant"="_ZGVrNxv_cosf(Sleef_cosfx_u10rvvm2)" }
2312; CHECK: attributes #[[ATTR22]] = { "vector-function-abi-variant"="_ZGVrNxv_cosh(Sleef_coshdx_u10rvvm2)" }
2313; CHECK: attributes #[[ATTR23]] = { "vector-function-abi-variant"="_ZGVrNxv_coshf(Sleef_coshfx_u10rvvm2)" }
2314; CHECK: attributes #[[ATTR24]] = { "vector-function-abi-variant"="_ZGVrNxv_cospi(Sleef_cospidx_u05rvvm2)" }
2315; CHECK: attributes #[[ATTR25]] = { "vector-function-abi-variant"="_ZGVrNxv_cospif(Sleef_cospifx_u05rvvm2)" }
2316; CHECK: attributes #[[ATTR26]] = { "vector-function-abi-variant"="_ZGVrNxv_erf(Sleef_erfdx_u10rvvm2)" }
2317; CHECK: attributes #[[ATTR27]] = { "vector-function-abi-variant"="_ZGVrNxv_erff(Sleef_erffx_u10rvvm2)" }
2318; CHECK: attributes #[[ATTR28]] = { "vector-function-abi-variant"="_ZGVrNxv_erfc(Sleef_erfcdx_u15rvvm2)" }
2319; CHECK: attributes #[[ATTR29]] = { "vector-function-abi-variant"="_ZGVrNxv_erfcf(Sleef_erfcfx_u15rvvm2)" }
2320; CHECK: attributes #[[ATTR30]] = { "vector-function-abi-variant"="_ZGVrNxv_exp(Sleef_expdx_u10rvvm2)" }
2321; CHECK: attributes #[[ATTR31]] = { "vector-function-abi-variant"="_ZGVrNxv_expf(Sleef_expfx_u10rvvm2)" }
2322; CHECK: attributes #[[ATTR32]] = { "vector-function-abi-variant"="_ZGVrNxv_exp10(Sleef_exp10dx_u10rvvm2)" }
2323; CHECK: attributes #[[ATTR33]] = { "vector-function-abi-variant"="_ZGVrNxv_exp10f(Sleef_exp10fx_u10rvvm2)" }
2324; CHECK: attributes #[[ATTR34]] = { "vector-function-abi-variant"="_ZGVrNxv_exp2(Sleef_exp2dx_u10rvvm2)" }
2325; CHECK: attributes #[[ATTR35]] = { "vector-function-abi-variant"="_ZGVrNxv_exp2f(Sleef_exp2fx_u10rvvm2)" }
2326; CHECK: attributes #[[ATTR36]] = { "vector-function-abi-variant"="_ZGVrNxv_expm1(Sleef_expm1dx_u10rvvm2)" }
2327; CHECK: attributes #[[ATTR37]] = { "vector-function-abi-variant"="_ZGVrNxv_expm1f(Sleef_expm1fx_u10rvvm2)" }
2328; CHECK: attributes #[[ATTR38]] = { "vector-function-abi-variant"="_ZGVrNxvv_fdim(Sleef_fdimdx_rvvm2)" }
2329; CHECK: attributes #[[ATTR39]] = { "vector-function-abi-variant"="_ZGVrNxvv_fdimf(Sleef_fdimfx_rvvm2)" }
2330; CHECK: attributes #[[ATTR40]] = { "vector-function-abi-variant"="_ZGVrNxvvv_fma(Sleef_fmadx_rvvm2)" }
2331; CHECK: attributes #[[ATTR41]] = { "vector-function-abi-variant"="_ZGVrNxvvv_fmaf(Sleef_fmafx_rvvm2)" }
2332; CHECK: attributes #[[ATTR42]] = { "vector-function-abi-variant"="_ZGVrNxvv_fmax(Sleef_fmaxdx_rvvm2)" }
2333; CHECK: attributes #[[ATTR43]] = { "vector-function-abi-variant"="_ZGVrNxvv_fmaxf(Sleef_fmaxfx_rvvm2)" }
2334; CHECK: attributes #[[ATTR44]] = { "vector-function-abi-variant"="_ZGVrNxvv_fmin(Sleef_fmindx_u10rvvm2)" }
2335; CHECK: attributes #[[ATTR45]] = { "vector-function-abi-variant"="_ZGVrNxvv_fminf(Sleef_fminfx_u10rvvm2)" }
2336; CHECK: attributes #[[ATTR46]] = { "vector-function-abi-variant"="_ZGVrNxvv_fmod(Sleef_fmoddx_rvvm2)" }
2337; CHECK: attributes #[[ATTR47]] = { "vector-function-abi-variant"="_ZGVrNxvv_fmodf(Sleef_fmodfx_rvvm2)" }
2338; CHECK: attributes #[[ATTR48]] = { "vector-function-abi-variant"="_ZGVrNxvv_hypot(Sleef_hypotdx_u05rvvm2)" }
2339; CHECK: attributes #[[ATTR49]] = { "vector-function-abi-variant"="_ZGVrNxvv_hypotf(Sleef_hypotfx_u05rvvm2)" }
2340; CHECK: attributes #[[ATTR50]] = { "vector-function-abi-variant"="_ZGVrNxv_ilogb(Sleef_ilogbdx_rvvm2)" }
2341; CHECK: attributes #[[ATTR51]] = { "vector-function-abi-variant"="_ZGVrNxv_ilogbf(Sleef_ilogbfx_rvvm2)" }
2342; CHECK: attributes #[[ATTR52]] = { "vector-function-abi-variant"="_ZGVrNxvv_ldexp(Sleef_ldexpdx_rvvm2)" }
2343; CHECK: attributes #[[ATTR53]] = { "vector-function-abi-variant"="_ZGVrNxvv_ldexpf(Sleef_ldexpfx_rvvm2)" }
2344; CHECK: attributes #[[ATTR54]] = { "vector-function-abi-variant"="_ZGVrNxv_lgamma(Sleef_lgammadx_u10rvvm2)" }
2345; CHECK: attributes #[[ATTR55]] = { "vector-function-abi-variant"="_ZGVrNxv_lgammaf(Sleef_lgammafx_u10rvvm2)" }
2346; CHECK: attributes #[[ATTR56]] = { "vector-function-abi-variant"="_ZGVsNxv_log(Sleef_logdx_u10rvvm2)" }
2347; CHECK: attributes #[[ATTR57]] = { "vector-function-abi-variant"="_ZGVrNxv_logf(Sleef_logfx_u10rvvm2)" }
2348; CHECK: attributes #[[ATTR58]] = { "vector-function-abi-variant"="_ZGVrNxv_log10(Sleef_log10dx_u10rvvm2)" }
2349; CHECK: attributes #[[ATTR59]] = { "vector-function-abi-variant"="_ZGVrNxv_log10f(Sleef_log10fx_u10rvvm2)" }
2350; CHECK: attributes #[[ATTR60]] = { "vector-function-abi-variant"="_ZGVrNxv_log1p(Sleef_log1pdx_u10rvvm2)" }
2351; CHECK: attributes #[[ATTR61]] = { "vector-function-abi-variant"="_ZGVrNxv_log1pf(Sleef_log1pfx_u10rvvm2)" }
2352; CHECK: attributes #[[ATTR62]] = { "vector-function-abi-variant"="_ZGVrNxv_log2(Sleef_log2dx_u10rvvm2)" }
2353; CHECK: attributes #[[ATTR63]] = { "vector-function-abi-variant"="_ZGVrNxv_log2f(Sleef_log2fx_u10rvvm2)" }
2354; CHECK: attributes #[[ATTR64]] = { "vector-function-abi-variant"="_ZGVrNxvl8_modf(Sleef_modfdx_rvvm2)" }
2355; CHECK: attributes #[[ATTR65]] = { "vector-function-abi-variant"="_ZGVrNxvl4_modff(Sleef_modffx_rvvm2)" }
2356; CHECK: attributes #[[ATTR66]] = { "vector-function-abi-variant"="_ZGVrNxvv_nextafter(Sleef_nextafterdx_rvvm2)" }
2357; CHECK: attributes #[[ATTR67]] = { "vector-function-abi-variant"="_ZGVrNxvv_nextafterf(Sleef_nextafterfx_rvvm2)" }
2358; CHECK: attributes #[[ATTR68]] = { "vector-function-abi-variant"="_ZGVrNxvv_pow(Sleef_powdx_u10rvvm2)" }
2359; CHECK: attributes #[[ATTR69]] = { "vector-function-abi-variant"="_ZGVrNxvv_powf(Sleef_powfx_u10rvvm2)" }
2360; CHECK: attributes #[[ATTR70]] = { "vector-function-abi-variant"="_ZGVrNxv_sin(Sleef_sindx_u10rvvm2)" }
2361; CHECK: attributes #[[ATTR71]] = { "vector-function-abi-variant"="_ZGVrNxv_sinf(Sleef_sinfx_u10rvvm2)" }
2362; CHECK: attributes #[[ATTR72]] = { "vector-function-abi-variant"="_ZGVrNxvl8l8_sincos(Sleef_sincosdx_u10rvvm2)" }
2363; CHECK: attributes #[[ATTR73]] = { "vector-function-abi-variant"="_ZGVrNxvl4l4_sincosf(Sleef_sincosfx_u10rvvm2)" }
2364; CHECK: attributes #[[ATTR74]] = { "vector-function-abi-variant"="_ZGVrNxvl8l8_sincospi(Sleef_sincospidx_u10rvvm2)" }
2365; CHECK: attributes #[[ATTR75]] = { "vector-function-abi-variant"="_ZGVrNxvl4l4_sincospif(Sleef_sincospifx_u10rvvm2)" }
2366; CHECK: attributes #[[ATTR76]] = { "vector-function-abi-variant"="_ZGVrNxv_sinh(Sleef_sinhdx_u10rvvm2)" }
2367; CHECK: attributes #[[ATTR77]] = { "vector-function-abi-variant"="_ZGVrNxv_sinhf(Sleef_sinhfx_u10rvvm2)" }
2368; CHECK: attributes #[[ATTR78]] = { "vector-function-abi-variant"="_ZGVrNxv_sinpi(Sleef_sinpidx_u05rvvm2)" }
2369; CHECK: attributes #[[ATTR79]] = { "vector-function-abi-variant"="_ZGVrNxv_sinpif(Sleef_sinpifx_u05rvvm2)" }
2370; CHECK: attributes #[[ATTR80]] = { "vector-function-abi-variant"="_ZGVrNxv_sqrt(Sleef_sqrtdx_u05rvvm2)" }
2371; CHECK: attributes #[[ATTR81]] = { "vector-function-abi-variant"="_ZGVrNxv_sqrtf(Sleef_sqrtfx_u05rvvm2)" }
2372; CHECK: attributes #[[ATTR82]] = { "vector-function-abi-variant"="_ZGVrNxv_tan(Sleef_tandx_u10rvvm2)" }
2373; CHECK: attributes #[[ATTR83]] = { "vector-function-abi-variant"="_ZGVrNxv_tanf(Sleef_tanfx_u10rvvm2)" }
2374; CHECK: attributes #[[ATTR84]] = { "vector-function-abi-variant"="_ZGVrNxv_tanh(Sleef_tanhdx_u10rvvm2)" }
2375; CHECK: attributes #[[ATTR85]] = { "vector-function-abi-variant"="_ZGVrNxv_tanhf(Sleef_tanhfx_u10rvvm2)" }
2376; CHECK: attributes #[[ATTR86]] = { "vector-function-abi-variant"="_ZGVrNxv_tgamma(Sleef_tgammadx_u10rvvm2)" }
2377; CHECK: attributes #[[ATTR87]] = { "vector-function-abi-variant"="_ZGVrNxv_tgammaf(Sleef_tgammafx_u10rvvm2)" }
2378;.
2379; CHECK: [[META0:![0-9]+]] = distinct !{[[META0]], [[META1:![0-9]+]], [[META2:![0-9]+]]}
2380; CHECK: [[META1]] = !{!"llvm.loop.isvectorized", i32 1}
2381; CHECK: [[META2]] = !{!"llvm.loop.unroll.runtime.disable"}
2382; CHECK: [[META3:![0-9]+]] = distinct !{[[META3]], [[META2]], [[META1]]}
2383; CHECK: [[META4:![0-9]+]] = distinct !{[[META4]], [[META1]], [[META2]]}
2384; CHECK: [[META5:![0-9]+]] = distinct !{[[META5]], [[META2]], [[META1]]}
2385; CHECK: [[META6:![0-9]+]] = distinct !{[[META6]], [[META1]], [[META2]]}
2386; CHECK: [[META7:![0-9]+]] = distinct !{[[META7]], [[META2]], [[META1]]}
2387; CHECK: [[META8:![0-9]+]] = distinct !{[[META8]], [[META1]], [[META2]]}
2388; CHECK: [[META9:![0-9]+]] = distinct !{[[META9]], [[META2]], [[META1]]}
2389; CHECK: [[META10:![0-9]+]] = distinct !{[[META10]], [[META1]], [[META2]]}
2390; CHECK: [[META11:![0-9]+]] = distinct !{[[META11]], [[META2]], [[META1]]}
2391; CHECK: [[META12:![0-9]+]] = distinct !{[[META12]], [[META1]], [[META2]]}
2392; CHECK: [[META13:![0-9]+]] = distinct !{[[META13]], [[META2]], [[META1]]}
2393; CHECK: [[META14:![0-9]+]] = distinct !{[[META14]], [[META1]], [[META2]]}
2394; CHECK: [[META15:![0-9]+]] = distinct !{[[META15]], [[META2]], [[META1]]}
2395; CHECK: [[META16:![0-9]+]] = distinct !{[[META16]], [[META1]], [[META2]]}
2396; CHECK: [[META17:![0-9]+]] = distinct !{[[META17]], [[META2]], [[META1]]}
2397; CHECK: [[META18:![0-9]+]] = distinct !{[[META18]], [[META1]], [[META2]]}
2398; CHECK: [[META19:![0-9]+]] = distinct !{[[META19]], [[META2]], [[META1]]}
2399; CHECK: [[META20:![0-9]+]] = distinct !{[[META20]], [[META1]], [[META2]]}
2400; CHECK: [[META21:![0-9]+]] = distinct !{[[META21]], [[META2]], [[META1]]}
2401; CHECK: [[META22:![0-9]+]] = distinct !{[[META22]], [[META1]], [[META2]]}
2402; CHECK: [[META23:![0-9]+]] = distinct !{[[META23]], [[META2]], [[META1]]}
2403; CHECK: [[META24:![0-9]+]] = distinct !{[[META24]], [[META1]], [[META2]]}
2404; CHECK: [[META25:![0-9]+]] = distinct !{[[META25]], [[META2]], [[META1]]}
2405; CHECK: [[META26:![0-9]+]] = distinct !{[[META26]], [[META1]], [[META2]]}
2406; CHECK: [[META27:![0-9]+]] = distinct !{[[META27]], [[META2]], [[META1]]}
2407; CHECK: [[META28:![0-9]+]] = distinct !{[[META28]], [[META1]], [[META2]]}
2408; CHECK: [[META29:![0-9]+]] = distinct !{[[META29]], [[META2]], [[META1]]}
2409; CHECK: [[META30:![0-9]+]] = distinct !{[[META30]], [[META1]], [[META2]]}
2410; CHECK: [[META31:![0-9]+]] = distinct !{[[META31]], [[META2]], [[META1]]}
2411; CHECK: [[META32:![0-9]+]] = distinct !{[[META32]], [[META1]], [[META2]]}
2412; CHECK: [[META33:![0-9]+]] = distinct !{[[META33]], [[META2]], [[META1]]}
2413; CHECK: [[META34:![0-9]+]] = distinct !{[[META34]], [[META1]], [[META2]]}
2414; CHECK: [[META35:![0-9]+]] = distinct !{[[META35]], [[META2]], [[META1]]}
2415; CHECK: [[META36:![0-9]+]] = distinct !{[[META36]], [[META1]], [[META2]]}
2416; CHECK: [[META37:![0-9]+]] = distinct !{[[META37]], [[META2]], [[META1]]}
2417; CHECK: [[META38:![0-9]+]] = distinct !{[[META38]], [[META1]], [[META2]]}
2418; CHECK: [[META39:![0-9]+]] = distinct !{[[META39]], [[META2]], [[META1]]}
2419; CHECK: [[META40:![0-9]+]] = distinct !{[[META40]], [[META1]], [[META2]]}
2420; CHECK: [[META41:![0-9]+]] = distinct !{[[META41]], [[META2]], [[META1]]}
2421; CHECK: [[META42:![0-9]+]] = distinct !{[[META42]], [[META1]], [[META2]]}
2422; CHECK: [[META43:![0-9]+]] = distinct !{[[META43]], [[META2]], [[META1]]}
2423; CHECK: [[META44:![0-9]+]] = distinct !{[[META44]], [[META1]], [[META2]]}
2424; CHECK: [[META45:![0-9]+]] = distinct !{[[META45]], [[META2]], [[META1]]}
2425; CHECK: [[META46:![0-9]+]] = distinct !{[[META46]], [[META1]], [[META2]]}
2426; CHECK: [[META47:![0-9]+]] = distinct !{[[META47]], [[META2]], [[META1]]}
2427; CHECK: [[META48:![0-9]+]] = distinct !{[[META48]], [[META1]], [[META2]]}
2428; CHECK: [[META49:![0-9]+]] = distinct !{[[META49]], [[META2]], [[META1]]}
2429; CHECK: [[META50:![0-9]+]] = distinct !{[[META50]], [[META1]], [[META2]]}
2430; CHECK: [[META51:![0-9]+]] = distinct !{[[META51]], [[META2]], [[META1]]}
2431; CHECK: [[META52:![0-9]+]] = distinct !{[[META52]], [[META1]], [[META2]]}
2432; CHECK: [[META53:![0-9]+]] = distinct !{[[META53]], [[META2]], [[META1]]}
2433; CHECK: [[META54:![0-9]+]] = distinct !{[[META54]], [[META1]], [[META2]]}
2434; CHECK: [[META55:![0-9]+]] = distinct !{[[META55]], [[META2]], [[META1]]}
2435; CHECK: [[META56:![0-9]+]] = distinct !{[[META56]], [[META1]], [[META2]]}
2436; CHECK: [[META57:![0-9]+]] = distinct !{[[META57]], [[META2]], [[META1]]}
2437; CHECK: [[META58:![0-9]+]] = distinct !{[[META58]], [[META1]], [[META2]]}
2438; CHECK: [[META59:![0-9]+]] = distinct !{[[META59]], [[META2]], [[META1]]}
2439; CHECK: [[META60:![0-9]+]] = distinct !{[[META60]], [[META1]], [[META2]]}
2440; CHECK: [[META61:![0-9]+]] = distinct !{[[META61]], [[META2]], [[META1]]}
2441; CHECK: [[META62:![0-9]+]] = distinct !{[[META62]], [[META1]], [[META2]]}
2442; CHECK: [[META63:![0-9]+]] = distinct !{[[META63]], [[META2]], [[META1]]}
2443; CHECK: [[META64:![0-9]+]] = distinct !{[[META64]], [[META1]], [[META2]]}
2444; CHECK: [[META65:![0-9]+]] = distinct !{[[META65]], [[META2]], [[META1]]}
2445; CHECK: [[META66:![0-9]+]] = distinct !{[[META66]], [[META1]], [[META2]]}
2446; CHECK: [[META67:![0-9]+]] = distinct !{[[META67]], [[META2]], [[META1]]}
2447; CHECK: [[META68:![0-9]+]] = distinct !{[[META68]], [[META1]], [[META2]]}
2448; CHECK: [[META69:![0-9]+]] = distinct !{[[META69]], [[META2]], [[META1]]}
2449; CHECK: [[META70:![0-9]+]] = distinct !{[[META70]], [[META1]], [[META2]]}
2450; CHECK: [[META71:![0-9]+]] = distinct !{[[META71]], [[META2]], [[META1]]}
2451; CHECK: [[META72:![0-9]+]] = distinct !{[[META72]], [[META1]], [[META2]]}
2452; CHECK: [[META73:![0-9]+]] = distinct !{[[META73]], [[META2]], [[META1]]}
2453; CHECK: [[META74:![0-9]+]] = distinct !{[[META74]], [[META1]], [[META2]]}
2454; CHECK: [[META75:![0-9]+]] = distinct !{[[META75]], [[META2]], [[META1]]}
2455; CHECK: [[META76:![0-9]+]] = distinct !{[[META76]], [[META1]], [[META2]]}
2456; CHECK: [[META77:![0-9]+]] = distinct !{[[META77]], [[META2]], [[META1]]}
2457; CHECK: [[META78:![0-9]+]] = distinct !{[[META78]], [[META1]], [[META2]]}
2458; CHECK: [[META79:![0-9]+]] = distinct !{[[META79]], [[META2]], [[META1]]}
2459; CHECK: [[META80:![0-9]+]] = distinct !{[[META80]], [[META1]], [[META2]]}
2460; CHECK: [[META81:![0-9]+]] = distinct !{[[META81]], [[META2]], [[META1]]}
2461; CHECK: [[META82:![0-9]+]] = distinct !{[[META82]], [[META1]], [[META2]]}
2462; CHECK: [[META83:![0-9]+]] = distinct !{[[META83]], [[META2]], [[META1]]}
2463; CHECK: [[META84:![0-9]+]] = distinct !{[[META84]], [[META1]], [[META2]]}
2464; CHECK: [[META85:![0-9]+]] = distinct !{[[META85]], [[META2]], [[META1]]}
2465; CHECK: [[META86:![0-9]+]] = distinct !{[[META86]], [[META1]], [[META2]]}
2466; CHECK: [[META87:![0-9]+]] = distinct !{[[META87]], [[META2]], [[META1]]}
2467; CHECK: [[META88:![0-9]+]] = distinct !{[[META88]], [[META1]], [[META2]]}
2468; CHECK: [[META89:![0-9]+]] = distinct !{[[META89]], [[META2]], [[META1]]}
2469; CHECK: [[META90:![0-9]+]] = distinct !{[[META90]], [[META1]], [[META2]]}
2470; CHECK: [[META91:![0-9]+]] = distinct !{[[META91]], [[META2]], [[META1]]}
2471; CHECK: [[META92:![0-9]+]] = distinct !{[[META92]], [[META1]], [[META2]]}
2472; CHECK: [[META93:![0-9]+]] = distinct !{[[META93]], [[META2]], [[META1]]}
2473; CHECK: [[META94:![0-9]+]] = distinct !{[[META94]], [[META1]], [[META2]]}
2474; CHECK: [[META95:![0-9]+]] = distinct !{[[META95]], [[META2]], [[META1]]}
2475; CHECK: [[META96:![0-9]+]] = distinct !{[[META96]], [[META1]], [[META2]]}
2476; CHECK: [[META97:![0-9]+]] = distinct !{[[META97]], [[META2]], [[META1]]}
2477; CHECK: [[META98:![0-9]+]] = distinct !{[[META98]], [[META1]], [[META2]]}
2478; CHECK: [[META99:![0-9]+]] = distinct !{[[META99]], [[META2]], [[META1]]}
2479; CHECK: [[META100:![0-9]+]] = distinct !{[[META100]], [[META1]], [[META2]]}
2480; CHECK: [[META101:![0-9]+]] = distinct !{[[META101]], [[META2]], [[META1]]}
2481; CHECK: [[META102:![0-9]+]] = distinct !{[[META102]], [[META1]], [[META2]]}
2482; CHECK: [[META103:![0-9]+]] = distinct !{[[META103]], [[META2]], [[META1]]}
2483; CHECK: [[META104:![0-9]+]] = distinct !{[[META104]], [[META1]], [[META2]]}
2484; CHECK: [[META105:![0-9]+]] = distinct !{[[META105]], [[META2]], [[META1]]}
2485; CHECK: [[META106:![0-9]+]] = distinct !{[[META106]], [[META1]], [[META2]]}
2486; CHECK: [[META107:![0-9]+]] = distinct !{[[META107]], [[META2]], [[META1]]}
2487; CHECK: [[META108:![0-9]+]] = distinct !{[[META108]], [[META1]], [[META2]]}
2488; CHECK: [[META109:![0-9]+]] = distinct !{[[META109]], [[META2]], [[META1]]}
2489; CHECK: [[META110:![0-9]+]] = distinct !{[[META110]], [[META1]], [[META2]]}
2490; CHECK: [[META111:![0-9]+]] = distinct !{[[META111]], [[META2]], [[META1]]}
2491; CHECK: [[META112:![0-9]+]] = distinct !{[[META112]], [[META1]], [[META2]]}
2492; CHECK: [[META113:![0-9]+]] = distinct !{[[META113]], [[META2]], [[META1]]}
2493; CHECK: [[META114:![0-9]+]] = distinct !{[[META114]], [[META1]], [[META2]]}
2494; CHECK: [[META115:![0-9]+]] = distinct !{[[META115]], [[META2]], [[META1]]}
2495; CHECK: [[META116:![0-9]+]] = distinct !{[[META116]], [[META1]], [[META2]]}
2496; CHECK: [[META117:![0-9]+]] = distinct !{[[META117]], [[META2]], [[META1]]}
2497; CHECK: [[META118:![0-9]+]] = distinct !{[[META118]], [[META1]], [[META2]]}
2498; CHECK: [[META119:![0-9]+]] = distinct !{[[META119]], [[META2]], [[META1]]}
2499; CHECK: [[META120:![0-9]+]] = distinct !{[[META120]], [[META1]], [[META2]]}
2500; CHECK: [[META121:![0-9]+]] = distinct !{[[META121]], [[META2]], [[META1]]}
2501; CHECK: [[META122:![0-9]+]] = distinct !{[[META122]], [[META1]], [[META2]]}
2502; CHECK: [[META123:![0-9]+]] = distinct !{[[META123]], [[META2]], [[META1]]}
2503; CHECK: [[META124:![0-9]+]] = distinct !{[[META124]], [[META1]], [[META2]]}
2504; CHECK: [[META125:![0-9]+]] = distinct !{[[META125]], [[META2]], [[META1]]}
2505; CHECK: [[META126:![0-9]+]] = distinct !{[[META126]], [[META1]], [[META2]]}
2506; CHECK: [[META127:![0-9]+]] = distinct !{[[META127]], [[META2]], [[META1]]}
2507; CHECK: [[META128:![0-9]+]] = distinct !{[[META128]], [[META1]], [[META2]]}
2508; CHECK: [[META129:![0-9]+]] = distinct !{[[META129]], [[META2]], [[META1]]}
2509; CHECK: [[META130:![0-9]+]] = distinct !{[[META130]], [[META1]], [[META2]]}
2510; CHECK: [[META131:![0-9]+]] = distinct !{[[META131]], [[META2]], [[META1]]}
2511; CHECK: [[META132:![0-9]+]] = distinct !{[[META132]], [[META1]], [[META2]]}
2512; CHECK: [[META133:![0-9]+]] = distinct !{[[META133]], [[META2]], [[META1]]}
2513; CHECK: [[META134:![0-9]+]] = distinct !{[[META134]], [[META1]], [[META2]]}
2514; CHECK: [[META135:![0-9]+]] = distinct !{[[META135]], [[META2]], [[META1]]}
2515; CHECK: [[META136:![0-9]+]] = distinct !{[[META136]], [[META1]], [[META2]]}
2516; CHECK: [[META137:![0-9]+]] = distinct !{[[META137]], [[META2]], [[META1]]}
2517; CHECK: [[META138:![0-9]+]] = distinct !{[[META138]], [[META1]], [[META2]]}
2518; CHECK: [[META139:![0-9]+]] = distinct !{[[META139]], [[META2]], [[META1]]}
2519; CHECK: [[META140:![0-9]+]] = distinct !{[[META140]], [[META1]], [[META2]]}
2520; CHECK: [[META141:![0-9]+]] = distinct !{[[META141]], [[META2]], [[META1]]}
2521; CHECK: [[META142:![0-9]+]] = distinct !{[[META142]], [[META1]], [[META2]]}
2522; CHECK: [[META143:![0-9]+]] = distinct !{[[META143]], [[META2]], [[META1]]}
2523; CHECK: [[META144:![0-9]+]] = distinct !{[[META144]], [[META1]], [[META2]]}
2524; CHECK: [[META145:![0-9]+]] = distinct !{[[META145]], [[META2]], [[META1]]}
2525; CHECK: [[META146:![0-9]+]] = distinct !{[[META146]], [[META1]], [[META2]]}
2526; CHECK: [[META147:![0-9]+]] = distinct !{[[META147]], [[META2]], [[META1]]}
2527; CHECK: [[META148:![0-9]+]] = distinct !{[[META148]], [[META1]], [[META2]]}
2528; CHECK: [[META149:![0-9]+]] = distinct !{[[META149]], [[META2]], [[META1]]}
2529; CHECK: [[META150:![0-9]+]] = distinct !{[[META150]], [[META1]], [[META2]]}
2530; CHECK: [[META151:![0-9]+]] = distinct !{[[META151]], [[META2]], [[META1]]}
2531; CHECK: [[META152:![0-9]+]] = distinct !{[[META152]], [[META1]], [[META2]]}
2532; CHECK: [[META153:![0-9]+]] = distinct !{[[META153]], [[META2]], [[META1]]}
2533; CHECK: [[META154:![0-9]+]] = distinct !{[[META154]], [[META1]], [[META2]]}
2534; CHECK: [[META155:![0-9]+]] = distinct !{[[META155]], [[META2]], [[META1]]}
2535; CHECK: [[META156:![0-9]+]] = distinct !{[[META156]], [[META1]], [[META2]]}
2536; CHECK: [[META157:![0-9]+]] = distinct !{[[META157]], [[META2]], [[META1]]}
2537; CHECK: [[META158:![0-9]+]] = distinct !{[[META158]], [[META1]], [[META2]]}
2538; CHECK: [[META159:![0-9]+]] = distinct !{[[META159]], [[META2]], [[META1]]}
2539; CHECK: [[META160:![0-9]+]] = distinct !{[[META160]], [[META1]], [[META2]]}
2540; CHECK: [[META161:![0-9]+]] = distinct !{[[META161]], [[META2]], [[META1]]}
2541;.
2542