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