2542 lines · plain
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 22; RUN: opt -mattr=+v -vector-library=sleefgnuabi -passes=inject-tli-mappings,loop-vectorize,simplifycfg -S < %s | FileCheck %s3 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_f6418; 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.body24 25 for.body:26 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]27 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv28 %in = load double, ptr %in.gep, align 829 %call = tail call double @acos(double %in)30 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv31 store double %call, ptr %out.gep, align 832 %iv.next = add nuw nsw i64 %iv, 133 %exitcond = icmp eq i64 %iv.next, 100034 br i1 %exitcond, label %for.end, label %for.body35 36 for.end:37 ret void38}39 40define void @acos_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {41;42; CHECK-LABEL: define void @acos_f3243; 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.body49 50 for.body:51 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]52 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv53 %in = load float, ptr %in.gep, align 854 %call = tail call float @acosf(float %in)55 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv56 store float %call, ptr %out.gep, align 457 %iv.next = add nuw nsw i64 %iv, 158 %exitcond = icmp eq i64 %iv.next, 100059 br i1 %exitcond, label %for.end, label %for.body60 61 for.end:62 ret void63}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_f6471; 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.body77 78 for.body:79 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]80 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv81 %in = load double, ptr %in.gep, align 882 %call = tail call double @acosh(double %in)83 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv84 store double %call, ptr %out.gep, align 885 %iv.next = add nuw nsw i64 %iv, 186 %exitcond = icmp eq i64 %iv.next, 100087 br i1 %exitcond, label %for.end, label %for.body88 89 for.end:90 ret void91}92 93define void @acosh_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {94;95; CHECK-LABEL: define void @acosh_f3296; 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.body102 103 for.body:104 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]105 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv106 %in = load float, ptr %in.gep, align 8107 %call = tail call float @acoshf(float %in)108 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv109 store float %call, ptr %out.gep, align 4110 %iv.next = add nuw nsw i64 %iv, 1111 %exitcond = icmp eq i64 %iv.next, 1000112 br i1 %exitcond, label %for.end, label %for.body113 114 for.end:115 ret void116}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_f64124; 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.body130 131 for.body:132 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]133 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv134 %in = load double, ptr %in.gep, align 8135 %call = tail call double @asin(double %in)136 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv137 store double %call, ptr %out.gep, align 8138 %iv.next = add nuw nsw i64 %iv, 1139 %exitcond = icmp eq i64 %iv.next, 1000140 br i1 %exitcond, label %for.end, label %for.body141 142 for.end:143 ret void144}145 146define void @asin_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {147;148; CHECK-LABEL: define void @asin_f32149; 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.body155 156 for.body:157 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]158 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv159 %in = load float, ptr %in.gep, align 8160 %call = tail call float @asinf(float %in)161 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv162 store float %call, ptr %out.gep, align 4163 %iv.next = add nuw nsw i64 %iv, 1164 %exitcond = icmp eq i64 %iv.next, 1000165 br i1 %exitcond, label %for.end, label %for.body166 167 for.end:168 ret void169}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_f64177; 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.body183 184 for.body:185 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]186 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv187 %in = load double, ptr %in.gep, align 8188 %call = tail call double @asinh(double %in)189 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv190 store double %call, ptr %out.gep, align 8191 %iv.next = add nuw nsw i64 %iv, 1192 %exitcond = icmp eq i64 %iv.next, 1000193 br i1 %exitcond, label %for.end, label %for.body194 195 for.end:196 ret void197}198 199define void @asinh_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {200;201; CHECK-LABEL: define void @asinh_f32202; 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.body208 209 for.body:210 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]211 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv212 %in = load float, ptr %in.gep, align 8213 %call = tail call float @asinhf(float %in)214 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv215 store float %call, ptr %out.gep, align 4216 %iv.next = add nuw nsw i64 %iv, 1217 %exitcond = icmp eq i64 %iv.next, 1000218 br i1 %exitcond, label %for.end, label %for.body219 220 for.end:221 ret void222}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_f64230; 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.body236 237 for.body:238 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]239 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv240 %in = load double, ptr %in.gep, align 8241 %call = tail call double @atan(double %in)242 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv243 store double %call, ptr %out.gep, align 8244 %iv.next = add nuw nsw i64 %iv, 1245 %exitcond = icmp eq i64 %iv.next, 1000246 br i1 %exitcond, label %for.end, label %for.body247 248 for.end:249 ret void250}251 252define void @atan_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {253;254; CHECK-LABEL: define void @atan_f32255; 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.body261 262 for.body:263 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]264 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv265 %in = load float, ptr %in.gep, align 8266 %call = tail call float @atanf(float %in)267 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv268 store float %call, ptr %out.gep, align 4269 %iv.next = add nuw nsw i64 %iv, 1270 %exitcond = icmp eq i64 %iv.next, 1000271 br i1 %exitcond, label %for.end, label %for.body272 273 for.end:274 ret void275}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_f64283; 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.body289 290 for.body:291 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]292 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv293 %in = load double, ptr %in.gep, align 8294 %call = tail call double @atan2(double %in, double %in)295 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv296 store double %call, ptr %out.gep, align 8297 %iv.next = add nuw nsw i64 %iv, 1298 %exitcond = icmp eq i64 %iv.next, 1000299 br i1 %exitcond, label %for.end, label %for.body300 301 for.end:302 ret void303}304 305define void @atan2_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {306;307; CHECK-LABEL: define void @atan2_f32308; 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.body314 315 for.body:316 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]317 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv318 %in = load float, ptr %in.gep, align 8319 %call = tail call float @atan2f(float %in, float %in)320 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv321 store float %call, ptr %out.gep, align 4322 %iv.next = add nuw nsw i64 %iv, 1323 %exitcond = icmp eq i64 %iv.next, 1000324 br i1 %exitcond, label %for.end, label %for.body325 326 for.end:327 ret void328}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_f64336; 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.body342 343 for.body:344 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]345 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv346 %in = load double, ptr %in.gep, align 8347 %call = tail call double @atanh(double %in)348 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv349 store double %call, ptr %out.gep, align 8350 %iv.next = add nuw nsw i64 %iv, 1351 %exitcond = icmp eq i64 %iv.next, 1000352 br i1 %exitcond, label %for.end, label %for.body353 354 for.end:355 ret void356}357 358define void @atanh_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {359;360; CHECK-LABEL: define void @atanh_f32361; 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.body367 368 for.body:369 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]370 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv371 %in = load float, ptr %in.gep, align 8372 %call = tail call float @atanhf(float %in)373 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv374 store float %call, ptr %out.gep, align 4375 %iv.next = add nuw nsw i64 %iv, 1376 %exitcond = icmp eq i64 %iv.next, 1000377 br i1 %exitcond, label %for.end, label %for.body378 379 for.end:380 ret void381}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_f64389; 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.body395 396 for.body:397 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]398 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv399 %in = load double, ptr %in.gep, align 8400 %call = tail call double @cbrt(double %in)401 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv402 store double %call, ptr %out.gep, align 8403 %iv.next = add nuw nsw i64 %iv, 1404 %exitcond = icmp eq i64 %iv.next, 1000405 br i1 %exitcond, label %for.end, label %for.body406 407 for.end:408 ret void409}410 411define void @cbrt_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {412;413; CHECK-LABEL: define void @cbrt_f32414; 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.body420 421 for.body:422 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]423 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv424 %in = load float, ptr %in.gep, align 8425 %call = tail call float @cbrtf(float %in)426 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv427 store float %call, ptr %out.gep, align 4428 %iv.next = add nuw nsw i64 %iv, 1429 %exitcond = icmp eq i64 %iv.next, 1000430 br i1 %exitcond, label %for.end, label %for.body431 432 for.end:433 ret void434}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_f64442; 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.body448 449 for.body:450 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]451 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv452 %in = load double, ptr %in.gep, align 8453 %call = tail call double @copysign(double %in, double %in)454 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv455 store double %call, ptr %out.gep, align 8456 %iv.next = add nuw nsw i64 %iv, 1457 %exitcond = icmp eq i64 %iv.next, 1000458 br i1 %exitcond, label %for.end, label %for.body459 460 for.end:461 ret void462}463 464define void @copysign_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {465;466; CHECK-LABEL: define void @copysign_f32467; 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.body473 474 for.body:475 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]476 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv477 %in = load float, ptr %in.gep, align 8478 %call = tail call float @copysignf(float %in, float %in)479 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv480 store float %call, ptr %out.gep, align 4481 %iv.next = add nuw nsw i64 %iv, 1482 %exitcond = icmp eq i64 %iv.next, 1000483 br i1 %exitcond, label %for.end, label %for.body484 485 for.end:486 ret void487}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_f64495; 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.body501 502 for.body:503 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]504 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv505 %in = load double, ptr %in.gep, align 8506 %call = tail call double @cos(double %in)507 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv508 store double %call, ptr %out.gep, align 8509 %iv.next = add nuw nsw i64 %iv, 1510 %exitcond = icmp eq i64 %iv.next, 1000511 br i1 %exitcond, label %for.end, label %for.body512 513 for.end:514 ret void515}516 517define void @cos_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {518;519; CHECK-LABEL: define void @cos_f32520; 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.body526 527 for.body:528 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]529 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv530 %in = load float, ptr %in.gep, align 8531 %call = tail call float @cosf(float %in)532 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv533 store float %call, ptr %out.gep, align 4534 %iv.next = add nuw nsw i64 %iv, 1535 %exitcond = icmp eq i64 %iv.next, 1000536 br i1 %exitcond, label %for.end, label %for.body537 538 for.end:539 ret void540}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_f64548; 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.body554 555 for.body:556 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]557 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv558 %in = load double, ptr %in.gep, align 8559 %call = tail call double @cosh(double %in)560 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv561 store double %call, ptr %out.gep, align 8562 %iv.next = add nuw nsw i64 %iv, 1563 %exitcond = icmp eq i64 %iv.next, 1000564 br i1 %exitcond, label %for.end, label %for.body565 566 for.end:567 ret void568}569 570define void @cosh_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {571;572; CHECK-LABEL: define void @cosh_f32573; 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.body579 580 for.body:581 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]582 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv583 %in = load float, ptr %in.gep, align 8584 %call = tail call float @coshf(float %in)585 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv586 store float %call, ptr %out.gep, align 4587 %iv.next = add nuw nsw i64 %iv, 1588 %exitcond = icmp eq i64 %iv.next, 1000589 br i1 %exitcond, label %for.end, label %for.body590 591 for.end:592 ret void593}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_f64601; 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.body607 608 for.body:609 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]610 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv611 %in = load double, ptr %in.gep, align 8612 %call = tail call double @cospi(double %in)613 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv614 store double %call, ptr %out.gep, align 8615 %iv.next = add nuw nsw i64 %iv, 1616 %exitcond = icmp eq i64 %iv.next, 1000617 br i1 %exitcond, label %for.end, label %for.body618 619 for.end:620 ret void621}622 623define void @cospi_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {624;625; CHECK-LABEL: define void @cospi_f32626; 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.body632 633 for.body:634 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]635 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv636 %in = load float, ptr %in.gep, align 8637 %call = tail call float @cospif(float %in)638 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv639 store float %call, ptr %out.gep, align 4640 %iv.next = add nuw nsw i64 %iv, 1641 %exitcond = icmp eq i64 %iv.next, 1000642 br i1 %exitcond, label %for.end, label %for.body643 644 for.end:645 ret void646}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_f64654; 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.body660 661 for.body:662 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]663 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv664 %in = load double, ptr %in.gep, align 8665 %call = tail call double @erf(double %in)666 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv667 store double %call, ptr %out.gep, align 8668 %iv.next = add nuw nsw i64 %iv, 1669 %exitcond = icmp eq i64 %iv.next, 1000670 br i1 %exitcond, label %for.end, label %for.body671 672 for.end:673 ret void674}675 676define void @erf_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {677;678; CHECK-LABEL: define void @erf_f32679; 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.body685 686 for.body:687 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]688 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv689 %in = load float, ptr %in.gep, align 8690 %call = tail call float @erff(float %in)691 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv692 store float %call, ptr %out.gep, align 4693 %iv.next = add nuw nsw i64 %iv, 1694 %exitcond = icmp eq i64 %iv.next, 1000695 br i1 %exitcond, label %for.end, label %for.body696 697 for.end:698 ret void699}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_f64707; 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.body713 714 for.body:715 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]716 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv717 %in = load double, ptr %in.gep, align 8718 %call = tail call double @erfc(double %in)719 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv720 store double %call, ptr %out.gep, align 8721 %iv.next = add nuw nsw i64 %iv, 1722 %exitcond = icmp eq i64 %iv.next, 1000723 br i1 %exitcond, label %for.end, label %for.body724 725 for.end:726 ret void727}728 729define void @erfc_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {730;731; CHECK-LABEL: define void @erfc_f32732; 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.body738 739 for.body:740 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]741 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv742 %in = load float, ptr %in.gep, align 8743 %call = tail call float @erfcf(float %in)744 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv745 store float %call, ptr %out.gep, align 4746 %iv.next = add nuw nsw i64 %iv, 1747 %exitcond = icmp eq i64 %iv.next, 1000748 br i1 %exitcond, label %for.end, label %for.body749 750 for.end:751 ret void752}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_f64760; 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.body766 767 for.body:768 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]769 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv770 %in = load double, ptr %in.gep, align 8771 %call = tail call double @exp(double %in)772 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv773 store double %call, ptr %out.gep, align 8774 %iv.next = add nuw nsw i64 %iv, 1775 %exitcond = icmp eq i64 %iv.next, 1000776 br i1 %exitcond, label %for.end, label %for.body777 778 for.end:779 ret void780}781 782define void @exp_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {783;784; CHECK-LABEL: define void @exp_f32785; 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.body791 792 for.body:793 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]794 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv795 %in = load float, ptr %in.gep, align 8796 %call = tail call float @expf(float %in)797 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv798 store float %call, ptr %out.gep, align 4799 %iv.next = add nuw nsw i64 %iv, 1800 %exitcond = icmp eq i64 %iv.next, 1000801 br i1 %exitcond, label %for.end, label %for.body802 803 for.end:804 ret void805}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_f64813; 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.body819 820 for.body:821 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]822 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv823 %in = load double, ptr %in.gep, align 8824 %call = tail call double @exp10(double %in)825 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv826 store double %call, ptr %out.gep, align 8827 %iv.next = add nuw nsw i64 %iv, 1828 %exitcond = icmp eq i64 %iv.next, 1000829 br i1 %exitcond, label %for.end, label %for.body830 831 for.end:832 ret void833}834 835define void @exp10_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {836;837; CHECK-LABEL: define void @exp10_f32838; 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.body844 845 for.body:846 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]847 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv848 %in = load float, ptr %in.gep, align 8849 %call = tail call float @exp10f(float %in)850 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv851 store float %call, ptr %out.gep, align 4852 %iv.next = add nuw nsw i64 %iv, 1853 %exitcond = icmp eq i64 %iv.next, 1000854 br i1 %exitcond, label %for.end, label %for.body855 856 for.end:857 ret void858}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_f64866; 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.body872 873 for.body:874 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]875 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv876 %in = load double, ptr %in.gep, align 8877 %call = tail call double @exp2(double %in)878 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv879 store double %call, ptr %out.gep, align 8880 %iv.next = add nuw nsw i64 %iv, 1881 %exitcond = icmp eq i64 %iv.next, 1000882 br i1 %exitcond, label %for.end, label %for.body883 884 for.end:885 ret void886}887 888define void @exp2_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {889;890; CHECK-LABEL: define void @exp2_f32891; 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.body897 898 for.body:899 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]900 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv901 %in = load float, ptr %in.gep, align 8902 %call = tail call float @exp2f(float %in)903 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv904 store float %call, ptr %out.gep, align 4905 %iv.next = add nuw nsw i64 %iv, 1906 %exitcond = icmp eq i64 %iv.next, 1000907 br i1 %exitcond, label %for.end, label %for.body908 909 for.end:910 ret void911}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_f64919; 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.body925 926 for.body:927 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]928 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv929 %in = load double, ptr %in.gep, align 8930 %call = tail call double @expm1(double %in)931 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv932 store double %call, ptr %out.gep, align 8933 %iv.next = add nuw nsw i64 %iv, 1934 %exitcond = icmp eq i64 %iv.next, 1000935 br i1 %exitcond, label %for.end, label %for.body936 937 for.end:938 ret void939}940 941define void @expm1_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {942;943; CHECK-LABEL: define void @expm1_f32944; 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.body950 951 for.body:952 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]953 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv954 %in = load float, ptr %in.gep, align 8955 %call = tail call float @expm1f(float %in)956 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv957 store float %call, ptr %out.gep, align 4958 %iv.next = add nuw nsw i64 %iv, 1959 %exitcond = icmp eq i64 %iv.next, 1000960 br i1 %exitcond, label %for.end, label %for.body961 962 for.end:963 ret void964}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_f64972; 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.body978 979 for.body:980 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]981 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv982 %in = load double, ptr %in.gep, align 8983 %call = tail call double @fdim(double %in, double %in)984 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv985 store double %call, ptr %out.gep, align 8986 %iv.next = add nuw nsw i64 %iv, 1987 %exitcond = icmp eq i64 %iv.next, 1000988 br i1 %exitcond, label %for.end, label %for.body989 990 for.end:991 ret void992}993 994define void @fdim_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {995;996; CHECK-LABEL: define void @fdim_f32997; 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.body1003 1004 for.body:1005 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1006 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv1007 %in = load float, ptr %in.gep, align 81008 %call = tail call float @fdimf(float %in, float %in)1009 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv1010 store float %call, ptr %out.gep, align 41011 %iv.next = add nuw nsw i64 %iv, 11012 %exitcond = icmp eq i64 %iv.next, 10001013 br i1 %exitcond, label %for.end, label %for.body1014 1015 for.end:1016 ret void1017}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_f641025; 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.body1031 1032 for.body:1033 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1034 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv1035 %in = load double, ptr %in.gep, align 81036 %call = tail call double @fma(double %in, double %in, double %in)1037 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv1038 store double %call, ptr %out.gep, align 81039 %iv.next = add nuw nsw i64 %iv, 11040 %exitcond = icmp eq i64 %iv.next, 10001041 br i1 %exitcond, label %for.end, label %for.body1042 1043 for.end:1044 ret void1045}1046 1047define void @fma_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {1048;1049; CHECK-LABEL: define void @fma_f321050; 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.body1056 1057 for.body:1058 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1059 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv1060 %in = load float, ptr %in.gep, align 81061 %call = tail call float @fmaf(float %in, float %in, float %in)1062 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv1063 store float %call, ptr %out.gep, align 41064 %iv.next = add nuw nsw i64 %iv, 11065 %exitcond = icmp eq i64 %iv.next, 10001066 br i1 %exitcond, label %for.end, label %for.body1067 1068 for.end:1069 ret void1070}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_f641078; 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.body1084 1085 for.body:1086 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1087 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv1088 %in = load double, ptr %in.gep, align 81089 %call = tail call double @fmax(double %in, double %in)1090 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv1091 store double %call, ptr %out.gep, align 81092 %iv.next = add nuw nsw i64 %iv, 11093 %exitcond = icmp eq i64 %iv.next, 10001094 br i1 %exitcond, label %for.end, label %for.body1095 1096 for.end:1097 ret void1098}1099 1100define void @fmax_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {1101;1102; CHECK-LABEL: define void @fmax_f321103; 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.body1109 1110 for.body:1111 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1112 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv1113 %in = load float, ptr %in.gep, align 81114 %call = tail call float @fmaxf(float %in, float %in)1115 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv1116 store float %call, ptr %out.gep, align 41117 %iv.next = add nuw nsw i64 %iv, 11118 %exitcond = icmp eq i64 %iv.next, 10001119 br i1 %exitcond, label %for.end, label %for.body1120 1121 for.end:1122 ret void1123}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_f641131; 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.body1137 1138 for.body:1139 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1140 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv1141 %in = load double, ptr %in.gep, align 81142 %call = tail call double @fmin(double %in, double %in)1143 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv1144 store double %call, ptr %out.gep, align 81145 %iv.next = add nuw nsw i64 %iv, 11146 %exitcond = icmp eq i64 %iv.next, 10001147 br i1 %exitcond, label %for.end, label %for.body1148 1149 for.end:1150 ret void1151}1152 1153define void @fmin_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {1154;1155; CHECK-LABEL: define void @fmin_f321156; 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.body1162 1163 for.body:1164 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1165 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv1166 %in = load float, ptr %in.gep, align 81167 %call = tail call float @fminf(float %in, float %in)1168 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv1169 store float %call, ptr %out.gep, align 41170 %iv.next = add nuw nsw i64 %iv, 11171 %exitcond = icmp eq i64 %iv.next, 10001172 br i1 %exitcond, label %for.end, label %for.body1173 1174 for.end:1175 ret void1176}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_f641184; 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.body1190 1191 for.body:1192 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1193 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv1194 %in = load double, ptr %in.gep, align 81195 %call = tail call double @fmod(double %in, double %in)1196 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv1197 store double %call, ptr %out.gep, align 81198 %iv.next = add nuw nsw i64 %iv, 11199 %exitcond = icmp eq i64 %iv.next, 10001200 br i1 %exitcond, label %for.end, label %for.body1201 1202 for.end:1203 ret void1204}1205 1206define void @fmod_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {1207;1208; CHECK-LABEL: define void @fmod_f321209; 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.body1215 1216 for.body:1217 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1218 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv1219 %in = load float, ptr %in.gep, align 81220 %call = tail call float @fmodf(float %in, float %in)1221 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv1222 store float %call, ptr %out.gep, align 41223 %iv.next = add nuw nsw i64 %iv, 11224 %exitcond = icmp eq i64 %iv.next, 10001225 br i1 %exitcond, label %for.end, label %for.body1226 1227 for.end:1228 ret void1229}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_f641237; 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.body1243 1244 for.body:1245 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1246 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv1247 %in = load double, ptr %in.gep, align 81248 %call = tail call double @hypot(double %in, double %in)1249 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv1250 store double %call, ptr %out.gep, align 81251 %iv.next = add nuw nsw i64 %iv, 11252 %exitcond = icmp eq i64 %iv.next, 10001253 br i1 %exitcond, label %for.end, label %for.body1254 1255 for.end:1256 ret void1257}1258 1259define void @hypot_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {1260;1261; CHECK-LABEL: define void @hypot_f321262; 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.body1268 1269 for.body:1270 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1271 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv1272 %in = load float, ptr %in.gep, align 81273 %call = tail call float @hypotf(float %in, float %in)1274 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv1275 store float %call, ptr %out.gep, align 41276 %iv.next = add nuw nsw i64 %iv, 11277 %exitcond = icmp eq i64 %iv.next, 10001278 br i1 %exitcond, label %for.end, label %for.body1279 1280 for.end:1281 ret void1282}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_f641290; 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.body1296 1297 for.body:1298 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1299 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv1300 %in = load double, ptr %in.gep, align 81301 %call = tail call i32 @ilogb(double %in)1302 %out.gep = getelementptr inbounds i32, ptr %out.ptr, i64 %iv1303 store i32 %call, ptr %out.gep, align 81304 %iv.next = add nuw nsw i64 %iv, 11305 %exitcond = icmp eq i64 %iv.next, 10001306 br i1 %exitcond, label %for.end, label %for.body1307 1308 for.end:1309 ret void1310}1311 1312define void @ilogb_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {1313;1314; CHECK-LABEL: define void @ilogb_f321315; 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.body1321 1322 for.body:1323 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1324 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv1325 %in = load float, ptr %in.gep, align 81326 %call = tail call i32 @ilogbf(float %in)1327 %out.gep = getelementptr inbounds i32, ptr %out.ptr, i64 %iv1328 store i32 %call, ptr %out.gep, align 41329 %iv.next = add nuw nsw i64 %iv, 11330 %exitcond = icmp eq i64 %iv.next, 10001331 br i1 %exitcond, label %for.end, label %for.body1332 1333 for.end:1334 ret void1335}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_f641343; 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.body1349 1350 for.body:1351 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1352 %in1.gep = getelementptr inbounds double, ptr %in1.ptr, i64 %iv1353 %in1 = load double, ptr %in1.gep, align 81354 %in2.gep = getelementptr inbounds i32, ptr %in2.ptr, i64 %iv1355 %in2 = load i32, ptr %in2.gep, align 81356 %call = tail call double @ldexp(double %in1, i32 %in2)1357 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv1358 store double %call, ptr %out.gep, align 81359 %iv.next = add nuw nsw i64 %iv, 11360 %exitcond = icmp eq i64 %iv.next, 10001361 br i1 %exitcond, label %for.end, label %for.body1362 1363 for.end:1364 ret void1365}1366 1367define void @ldexp_f32(ptr noalias %in1.ptr, ptr noalias %in2.ptr, ptr noalias %out.ptr) {1368;1369; CHECK-LABEL: define void @ldexp_f321370; 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.body1376 1377 for.body:1378 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1379 %in1.gep = getelementptr inbounds float, ptr %in1.ptr, i64 %iv1380 %in1 = load float, ptr %in1.gep, align 81381 %in2.gep = getelementptr inbounds i32, ptr %in2.ptr, i64 %iv1382 %in2 = load i32, ptr %in2.gep, align 81383 %call = tail call float @ldexpf(float %in1, i32 %in2)1384 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv1385 store float %call, ptr %out.gep, align 41386 %iv.next = add nuw nsw i64 %iv, 11387 %exitcond = icmp eq i64 %iv.next, 10001388 br i1 %exitcond, label %for.end, label %for.body1389 1390 for.end:1391 ret void1392}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_f641400; 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.body1406 1407 for.body:1408 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1409 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv1410 %in = load double, ptr %in.gep, align 81411 %call = tail call double @lgamma(double %in)1412 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv1413 store double %call, ptr %out.gep, align 81414 %iv.next = add nuw nsw i64 %iv, 11415 %exitcond = icmp eq i64 %iv.next, 10001416 br i1 %exitcond, label %for.end, label %for.body1417 1418 for.end:1419 ret void1420}1421 1422define void @lgamma_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {1423;1424; CHECK-LABEL: define void @lgamma_f321425; 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.body1431 1432 for.body:1433 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1434 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv1435 %in = load float, ptr %in.gep, align 81436 %call = tail call float @lgammaf(float %in)1437 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv1438 store float %call, ptr %out.gep, align 41439 %iv.next = add nuw nsw i64 %iv, 11440 %exitcond = icmp eq i64 %iv.next, 10001441 br i1 %exitcond, label %for.end, label %for.body1442 1443 for.end:1444 ret void1445}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_f641453; 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.body1459 1460 for.body:1461 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1462 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv1463 %in = load double, ptr %in.gep, align 81464 %call = tail call double @log(double %in)1465 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv1466 store double %call, ptr %out.gep, align 81467 %iv.next = add nuw nsw i64 %iv, 11468 %exitcond = icmp eq i64 %iv.next, 10001469 br i1 %exitcond, label %for.end, label %for.body1470 1471 for.end:1472 ret void1473}1474 1475define void @log_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {1476;1477; CHECK-LABEL: define void @log_f321478; 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.body1484 1485 for.body:1486 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1487 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv1488 %in = load float, ptr %in.gep, align 81489 %call = tail call float @logf(float %in)1490 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv1491 store float %call, ptr %out.gep, align 41492 %iv.next = add nuw nsw i64 %iv, 11493 %exitcond = icmp eq i64 %iv.next, 10001494 br i1 %exitcond, label %for.end, label %for.body1495 1496 for.end:1497 ret void1498}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_f641506; 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.body1512 1513 for.body:1514 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1515 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv1516 %in = load double, ptr %in.gep, align 81517 %call = tail call double @log10(double %in)1518 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv1519 store double %call, ptr %out.gep, align 81520 %iv.next = add nuw nsw i64 %iv, 11521 %exitcond = icmp eq i64 %iv.next, 10001522 br i1 %exitcond, label %for.end, label %for.body1523 1524 for.end:1525 ret void1526}1527 1528define void @log10_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {1529;1530; CHECK-LABEL: define void @log10_f321531; 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.body1537 1538 for.body:1539 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1540 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv1541 %in = load float, ptr %in.gep, align 81542 %call = tail call float @log10f(float %in)1543 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv1544 store float %call, ptr %out.gep, align 41545 %iv.next = add nuw nsw i64 %iv, 11546 %exitcond = icmp eq i64 %iv.next, 10001547 br i1 %exitcond, label %for.end, label %for.body1548 1549 for.end:1550 ret void1551}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_f641559; 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.body1565 1566 for.body:1567 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1568 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv1569 %in = load double, ptr %in.gep, align 81570 %call = tail call double @log1p(double %in)1571 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv1572 store double %call, ptr %out.gep, align 81573 %iv.next = add nuw nsw i64 %iv, 11574 %exitcond = icmp eq i64 %iv.next, 10001575 br i1 %exitcond, label %for.end, label %for.body1576 1577 for.end:1578 ret void1579}1580 1581define void @log1p_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {1582;1583; CHECK-LABEL: define void @log1p_f321584; 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.body1590 1591 for.body:1592 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1593 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv1594 %in = load float, ptr %in.gep, align 81595 %call = tail call float @log1pf(float %in)1596 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv1597 store float %call, ptr %out.gep, align 41598 %iv.next = add nuw nsw i64 %iv, 11599 %exitcond = icmp eq i64 %iv.next, 10001600 br i1 %exitcond, label %for.end, label %for.body1601 1602 for.end:1603 ret void1604}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_f641612; 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.body1618 1619 for.body:1620 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1621 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv1622 %in = load double, ptr %in.gep, align 81623 %call = tail call double @log2(double %in)1624 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv1625 store double %call, ptr %out.gep, align 81626 %iv.next = add nuw nsw i64 %iv, 11627 %exitcond = icmp eq i64 %iv.next, 10001628 br i1 %exitcond, label %for.end, label %for.body1629 1630 for.end:1631 ret void1632}1633 1634define void @log2_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {1635;1636; CHECK-LABEL: define void @log2_f321637; 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.body1643 1644 for.body:1645 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1646 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv1647 %in = load float, ptr %in.gep, align 81648 %call = tail call float @log2f(float %in)1649 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv1650 store float %call, ptr %out.gep, align 41651 %iv.next = add nuw nsw i64 %iv, 11652 %exitcond = icmp eq i64 %iv.next, 10001653 br i1 %exitcond, label %for.end, label %for.body1654 1655 for.end:1656 ret void1657}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_f641665; 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.body1670 1671for.body:1672 %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]1673 %gepa = getelementptr double, ptr %a, i64 %indvars.iv1674 %num = load double, ptr %gepa, align 81675 %gepb = getelementptr double, ptr %b, i64 %indvars.iv1676 %data = call double @modf(double %num, ptr %gepb)1677 %gepc = getelementptr inbounds double, ptr %c, i64 %indvars.iv1678 store double %data, ptr %gepc, align 81679 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 11680 %exitcond = icmp eq i64 %indvars.iv.next, 10001681 br i1 %exitcond, label %for.cond.cleanup, label %for.body1682 1683for.cond.cleanup:1684 ret void1685}1686 1687define void @modf_f32(ptr noalias %a, ptr noalias %b, ptr noalias %c) {1688;1689; CHECK-LABEL: define void @modf_f321690; 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.body1695 1696for.body:1697 %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]1698 %gepa = getelementptr float, ptr %a, i64 %indvars.iv1699 %num = load float, ptr %gepa, align 81700 %gepb = getelementptr float, ptr %b, i64 %indvars.iv1701 %data = call float @modff(float %num, ptr %gepb)1702 %gepc = getelementptr inbounds float, ptr %c, i64 %indvars.iv1703 store float %data, ptr %gepc, align 81704 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 11705 %exitcond = icmp eq i64 %indvars.iv.next, 10001706 br i1 %exitcond, label %for.cond.cleanup, label %for.body1707 1708for.cond.cleanup:1709 ret void1710}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_f641718; 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.body1724 1725 for.body:1726 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1727 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv1728 %in = load double, ptr %in.gep, align 81729 %call = tail call double @nextafter(double %in, double %in)1730 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv1731 store double %call, ptr %out.gep, align 81732 %iv.next = add nuw nsw i64 %iv, 11733 %exitcond = icmp eq i64 %iv.next, 10001734 br i1 %exitcond, label %for.end, label %for.body1735 1736 for.end:1737 ret void1738}1739 1740define void @nextafter_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {1741;1742; CHECK-LABEL: define void @nextafter_f321743; 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.body1749 1750 for.body:1751 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1752 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv1753 %in = load float, ptr %in.gep, align 81754 %call = tail call float @nextafterf(float %in, float %in)1755 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv1756 store float %call, ptr %out.gep, align 41757 %iv.next = add nuw nsw i64 %iv, 11758 %exitcond = icmp eq i64 %iv.next, 10001759 br i1 %exitcond, label %for.end, label %for.body1760 1761 for.end:1762 ret void1763}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_f641771; 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.body1777 1778 for.body:1779 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1780 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv1781 %in = load double, ptr %in.gep, align 81782 %call = tail call double @pow(double %in, double %in)1783 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv1784 store double %call, ptr %out.gep, align 81785 %iv.next = add nuw nsw i64 %iv, 11786 %exitcond = icmp eq i64 %iv.next, 10001787 br i1 %exitcond, label %for.end, label %for.body1788 1789 for.end:1790 ret void1791}1792 1793define void @pow_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {1794;1795; CHECK-LABEL: define void @pow_f321796; 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.body1802 1803 for.body:1804 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1805 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv1806 %in = load float, ptr %in.gep, align 81807 %call = tail call float @powf(float %in, float %in)1808 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv1809 store float %call, ptr %out.gep, align 41810 %iv.next = add nuw nsw i64 %iv, 11811 %exitcond = icmp eq i64 %iv.next, 10001812 br i1 %exitcond, label %for.end, label %for.body1813 1814 for.end:1815 ret void1816}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_f641824; 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.body1830 1831 for.body:1832 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1833 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv1834 %in = load double, ptr %in.gep, align 81835 %call = tail call double @sin(double %in)1836 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv1837 store double %call, ptr %out.gep, align 81838 %iv.next = add nuw nsw i64 %iv, 11839 %exitcond = icmp eq i64 %iv.next, 10001840 br i1 %exitcond, label %for.end, label %for.body1841 1842 for.end:1843 ret void1844}1845 1846define void @sin_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {1847;1848; CHECK-LABEL: define void @sin_f321849; 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.body1855 1856 for.body:1857 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1858 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv1859 %in = load float, ptr %in.gep, align 81860 %call = tail call float @sinf(float %in)1861 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv1862 store float %call, ptr %out.gep, align 41863 %iv.next = add nuw nsw i64 %iv, 11864 %exitcond = icmp eq i64 %iv.next, 10001865 br i1 %exitcond, label %for.end, label %for.body1866 1867 for.end:1868 ret void1869}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_f641877; 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.body1882 1883for.body:1884 %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]1885 %gepa = getelementptr double, ptr %a, i64 %indvars.iv1886 %num = load double, ptr %gepa, align 81887 %gepb = getelementptr double, ptr %b, i64 %indvars.iv1888 %gepc = getelementptr double, ptr %c, i64 %indvars.iv1889 call void @sincos(double %num, ptr %gepb, ptr %gepc)1890 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 11891 %exitcond = icmp eq i64 %indvars.iv.next, 10001892 br i1 %exitcond, label %for.cond.cleanup, label %for.body1893 1894for.cond.cleanup:1895 ret void1896}1897 1898define void @sincos_f32(ptr noalias %a, ptr noalias %b, ptr noalias %c) {1899;1900; CHECK-LABEL: define void @sincos_f321901; 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.body1906 1907for.body:1908 %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]1909 %gepa = getelementptr float, ptr %a, i64 %indvars.iv1910 %num = load float, ptr %gepa, align 81911 %gepb = getelementptr float, ptr %b, i64 %indvars.iv1912 %gepc = getelementptr float, ptr %c, i64 %indvars.iv1913 call void @sincosf(float %num, ptr %gepb, ptr %gepc)1914 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 11915 %exitcond = icmp eq i64 %indvars.iv.next, 10001916 br i1 %exitcond, label %for.cond.cleanup, label %for.body1917 1918for.cond.cleanup:1919 ret void1920}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_f641928; 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.body1933 1934for.body:1935 %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]1936 %gepa = getelementptr double, ptr %a, i64 %indvars.iv1937 %num = load double, ptr %gepa, align 81938 %gepb = getelementptr double, ptr %b, i64 %indvars.iv1939 %gepc = getelementptr double, ptr %c, i64 %indvars.iv1940 call void @sincospi(double %num, ptr %gepb, ptr %gepc)1941 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 11942 %exitcond = icmp eq i64 %indvars.iv.next, 10001943 br i1 %exitcond, label %for.cond.cleanup, label %for.body1944 1945for.cond.cleanup:1946 ret void1947}1948 1949define void @sincospi_f32(ptr noalias %a, ptr noalias %b, ptr noalias %c) {1950; CHECK-LABEL: define void @sincospi_f321951; 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.body1956 1957for.body:1958 %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]1959 %gepa = getelementptr float, ptr %a, i64 %indvars.iv1960 %num = load float, ptr %gepa, align 81961 %gepb = getelementptr float, ptr %b, i64 %indvars.iv1962 %gepc = getelementptr float, ptr %c, i64 %indvars.iv1963 call void @sincospif(float %num, ptr %gepb, ptr %gepc)1964 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 11965 %exitcond = icmp eq i64 %indvars.iv.next, 10001966 br i1 %exitcond, label %for.cond.cleanup, label %for.body1967 1968for.cond.cleanup:1969 ret void1970}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_f641978; 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.body1984 1985 for.body:1986 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1987 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv1988 %in = load double, ptr %in.gep, align 81989 %call = tail call double @sinh(double %in)1990 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv1991 store double %call, ptr %out.gep, align 81992 %iv.next = add nuw nsw i64 %iv, 11993 %exitcond = icmp eq i64 %iv.next, 10001994 br i1 %exitcond, label %for.end, label %for.body1995 1996 for.end:1997 ret void1998}1999 2000define void @sinh_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {2001;2002; CHECK-LABEL: define void @sinh_f322003; 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.body2009 2010 for.body:2011 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]2012 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv2013 %in = load float, ptr %in.gep, align 82014 %call = tail call float @sinhf(float %in)2015 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv2016 store float %call, ptr %out.gep, align 42017 %iv.next = add nuw nsw i64 %iv, 12018 %exitcond = icmp eq i64 %iv.next, 10002019 br i1 %exitcond, label %for.end, label %for.body2020 2021 for.end:2022 ret void2023}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_f642031; 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.body2037 2038 for.body:2039 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]2040 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv2041 %in = load double, ptr %in.gep, align 82042 %call = tail call double @sinpi(double %in)2043 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv2044 store double %call, ptr %out.gep, align 82045 %iv.next = add nuw nsw i64 %iv, 12046 %exitcond = icmp eq i64 %iv.next, 10002047 br i1 %exitcond, label %for.end, label %for.body2048 2049 for.end:2050 ret void2051}2052 2053define void @sinpi_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {2054;2055; CHECK-LABEL: define void @sinpi_f322056; 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.body2062 2063 for.body:2064 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]2065 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv2066 %in = load float, ptr %in.gep, align 82067 %call = tail call float @sinpif(float %in)2068 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv2069 store float %call, ptr %out.gep, align 42070 %iv.next = add nuw nsw i64 %iv, 12071 %exitcond = icmp eq i64 %iv.next, 10002072 br i1 %exitcond, label %for.end, label %for.body2073 2074 for.end:2075 ret void2076}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_f642084; 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.body2090 2091 for.body:2092 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]2093 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv2094 %in = load double, ptr %in.gep, align 82095 %call = tail call double @sqrt(double %in)2096 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv2097 store double %call, ptr %out.gep, align 82098 %iv.next = add nuw nsw i64 %iv, 12099 %exitcond = icmp eq i64 %iv.next, 10002100 br i1 %exitcond, label %for.end, label %for.body2101 2102 for.end:2103 ret void2104}2105 2106define void @sqrt_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {2107;2108; CHECK-LABEL: define void @sqrt_f322109; 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.body2115 2116 for.body:2117 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]2118 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv2119 %in = load float, ptr %in.gep, align 82120 %call = tail call float @sqrtf(float %in)2121 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv2122 store float %call, ptr %out.gep, align 42123 %iv.next = add nuw nsw i64 %iv, 12124 %exitcond = icmp eq i64 %iv.next, 10002125 br i1 %exitcond, label %for.end, label %for.body2126 2127 for.end:2128 ret void2129}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_f642137; 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.body2143 2144 for.body:2145 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]2146 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv2147 %in = load double, ptr %in.gep, align 82148 %call = tail call double @tan(double %in)2149 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv2150 store double %call, ptr %out.gep, align 82151 %iv.next = add nuw nsw i64 %iv, 12152 %exitcond = icmp eq i64 %iv.next, 10002153 br i1 %exitcond, label %for.end, label %for.body2154 2155 for.end:2156 ret void2157}2158 2159define void @tan_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {2160;2161; CHECK-LABEL: define void @tan_f322162; 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.body2168 2169 for.body:2170 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]2171 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv2172 %in = load float, ptr %in.gep, align 82173 %call = tail call float @tanf(float %in)2174 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv2175 store float %call, ptr %out.gep, align 42176 %iv.next = add nuw nsw i64 %iv, 12177 %exitcond = icmp eq i64 %iv.next, 10002178 br i1 %exitcond, label %for.end, label %for.body2179 2180 for.end:2181 ret void2182}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_f642190; 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.body2196 2197 for.body:2198 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]2199 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv2200 %in = load double, ptr %in.gep, align 82201 %call = tail call double @tanh(double %in)2202 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv2203 store double %call, ptr %out.gep, align 82204 %iv.next = add nuw nsw i64 %iv, 12205 %exitcond = icmp eq i64 %iv.next, 10002206 br i1 %exitcond, label %for.end, label %for.body2207 2208 for.end:2209 ret void2210}2211 2212define void @tanh_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {2213;2214; CHECK-LABEL: define void @tanh_f322215; 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.body2221 2222 for.body:2223 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]2224 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv2225 %in = load float, ptr %in.gep, align 82226 %call = tail call float @tanhf(float %in)2227 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv2228 store float %call, ptr %out.gep, align 42229 %iv.next = add nuw nsw i64 %iv, 12230 %exitcond = icmp eq i64 %iv.next, 10002231 br i1 %exitcond, label %for.end, label %for.body2232 2233 for.end:2234 ret void2235}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_f642243; 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.body2249 2250 for.body:2251 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]2252 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv2253 %in = load double, ptr %in.gep, align 82254 %call = tail call double @tgamma(double %in)2255 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv2256 store double %call, ptr %out.gep, align 82257 %iv.next = add nuw nsw i64 %iv, 12258 %exitcond = icmp eq i64 %iv.next, 10002259 br i1 %exitcond, label %for.end, label %for.body2260 2261 for.end:2262 ret void2263}2264 2265define void @tgamma_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {2266;2267; CHECK-LABEL: define void @tgamma_f322268; 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.body2274 2275 for.body:2276 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]2277 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv2278 %in = load float, ptr %in.gep, align 82279 %call = tail call float @tgammaf(float %in)2280 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv2281 store float %call, ptr %out.gep, align 42282 %iv.next = add nuw nsw i64 %iv, 12283 %exitcond = icmp eq i64 %iv.next, 10002284 br i1 %exitcond, label %for.end, label %for.body2285 2286 for.end:2287 ret void2288}2289;.2290; CHECK: attributes #[[ATTR0]] = { "target-features"="+v" }2291; CHECK: attributes #[[ATTR1:[0-9]+]] = { nocallback nofree nosync nounwind speculatable 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