1206 lines · plain
1; RUN: opt < %s -vector-library=Darwin_libsystem_m -passes=inject-tli-mappings,loop-vectorize -S | FileCheck %s2 3target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"4target triple = "arm64-apple-darwin"5 6declare float @expf(float) nounwind readnone7define void @expf_v4f32(i64 %n, ptr noalias %y, ptr noalias %x) {8; CHECK-LABEL: @expf_v4f32(9; CHECK: call <4 x float> @_simd_exp_f4(10; CHECK: ret void11 12entry:13 br label %for.body14 15for.body:16 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]17 %gep.y = getelementptr inbounds float, ptr %y, i64 %iv18 %lv = load float, ptr %gep.y, align 419 %call = tail call float @expf(float %lv)20 %gep.x = getelementptr inbounds float, ptr %x, i64 %iv21 store float %call, ptr %gep.x, align 422 %iv.next = add i64 %iv, 123 %exitcond = icmp eq i64 %iv.next, %n24 br i1 %exitcond, label %for.end, label %for.body25 26for.end:27 ret void28}29 30declare double @exp(double) nounwind readnone31define void @exp_v2f64(i64 %n, ptr noalias %y, ptr noalias %x) {32; CHECK-LABEL: @exp_v2f64(33; CHECK: call <2 x double> @_simd_exp_d2(34; CHECK: ret void35 36entry:37 br label %for.body38 39for.body:40 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]41 %gep.y = getelementptr inbounds double, ptr %y, i64 %iv42 %lv = load double, ptr %gep.y, align 443 %call = tail call double @exp(double %lv)44 %gep.x = getelementptr inbounds double, ptr %x, i64 %iv45 store double %call, ptr %gep.x, align 446 %iv.next = add i64 %iv, 147 %exitcond = icmp eq i64 %iv.next, %n48 br i1 %exitcond, label %for.end, label %for.body49 50for.end:51 ret void52}53 54declare float @acosf(float) nounwind readnone55define void @acos_v4f32(i64 %n, ptr noalias %y, ptr noalias %x) {56; CHECK-LABEL: @acos_v4f32(57; CHECK: call <4 x float> @_simd_acos_f4(58; CHECK: ret void59 60entry:61 br label %for.body62 63for.body:64 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]65 %gep.y = getelementptr inbounds float, ptr %y, i64 %iv66 %lv = load float, ptr %gep.y, align 467 %call = tail call float @acosf(float %lv)68 %gep.x = getelementptr inbounds float, ptr %x, i64 %iv69 store float %call, ptr %gep.x, align 470 %iv.next = add i64 %iv, 171 %exitcond = icmp eq i64 %iv.next, %n72 br i1 %exitcond, label %for.end, label %for.body73 74for.end:75 ret void76}77 78declare double @acos(double) nounwind readnone79define void @acos_v2f64(i64 %n, ptr noalias %y, ptr noalias %x) {80; CHECK-LABEL: @acos_v2f64(81; CHECK: call <2 x double> @_simd_acos_d2(82; CHECK: ret void83 84entry:85 br label %for.body86 87for.body:88 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]89 %gep.y = getelementptr inbounds double, ptr %y, i64 %iv90 %lv = load double, ptr %gep.y, align 491 %call = tail call double @acos(double %lv)92 %gep.x = getelementptr inbounds double, ptr %x, i64 %iv93 store double %call, ptr %gep.x, align 494 %iv.next = add i64 %iv, 195 %exitcond = icmp eq i64 %iv.next, %n96 br i1 %exitcond, label %for.end, label %for.body97 98for.end:99 ret void100}101 102declare float @asinf(float) nounwind readnone103define void @asinf_v4f32(i64 %n, ptr noalias %y, ptr noalias %x) {104; CHECK-LABEL: @asinf_v4f32(105; CHECK: call <4 x float> @_simd_asin_f4(106; CHECK: ret void107 108entry:109 br label %for.body110 111for.body:112 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]113 %gep.y = getelementptr inbounds float, ptr %y, i64 %iv114 %lv = load float, ptr %gep.y, align 4115 %call = tail call float @asinf(float %lv)116 %gep.x = getelementptr inbounds float, ptr %x, i64 %iv117 store float %call, ptr %gep.x, align 4118 %iv.next = add i64 %iv, 1119 %exitcond = icmp eq i64 %iv.next, %n120 br i1 %exitcond, label %for.end, label %for.body121 122for.end:123 ret void124}125 126declare double @asin(double) nounwind readnone127define void @asin_v2f64(i64 %n, ptr noalias %y, ptr noalias %x) {128; CHECK-LABEL: @asin_v2f64(129; CHECK: call <2 x double> @_simd_asin_d2(130; CHECK: ret void131 132entry:133 br label %for.body134 135for.body:136 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]137 %gep.y = getelementptr inbounds double, ptr %y, i64 %iv138 %lv = load double, ptr %gep.y, align 4139 %call = tail call double @asin(double %lv)140 %gep.x = getelementptr inbounds double, ptr %x, i64 %iv141 store double %call, ptr %gep.x, align 4142 %iv.next = add i64 %iv, 1143 %exitcond = icmp eq i64 %iv.next, %n144 br i1 %exitcond, label %for.end, label %for.body145 146for.end:147 ret void148}149 150 declare float @atanf(float) nounwind readnone151define void @atanf_v4f32(i64 %n, ptr noalias %y, ptr noalias %x) {152; CHECK-LABEL: @atanf_v4f32(153; CHECK: call <4 x float> @_simd_atan_f4(154; CHECK: ret void155 156entry:157 br label %for.body158 159for.body:160 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]161 %gep.y = getelementptr inbounds float, ptr %y, i64 %iv162 %lv = load float, ptr %gep.y, align 4163 %call = tail call float @atanf(float %lv)164 %gep.x = getelementptr inbounds float, ptr %x, i64 %iv165 store float %call, ptr %gep.x, align 4166 %iv.next = add i64 %iv, 1167 %exitcond = icmp eq i64 %iv.next, %n168 br i1 %exitcond, label %for.end, label %for.body169 170for.end:171 ret void172}173 174declare double @atan(double) nounwind readnone175define void @atan_v2f64(i64 %n, ptr noalias %y, ptr noalias %x) {176; CHECK-LABEL: @atan_v2f64(177; CHECK: call <2 x double> @_simd_atan_d2(178; CHECK: ret void179 180entry:181 br label %for.body182 183for.body:184 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]185 %gep.y = getelementptr inbounds double, ptr %y, i64 %iv186 %lv = load double, ptr %gep.y, align 4187 %call = tail call double @atan(double %lv)188 %gep.x = getelementptr inbounds double, ptr %x, i64 %iv189 store double %call, ptr %gep.x, align 4190 %iv.next = add i64 %iv, 1191 %exitcond = icmp eq i64 %iv.next, %n192 br i1 %exitcond, label %for.end, label %for.body193 194for.end:195 ret void196}197 198declare float @atan2f(float, float) nounwind readnone199define void @atan2f_v4f32(i64 %n, ptr noalias %y, ptr noalias %x) {200; CHECK-LABEL: @atan2f_v4f32(201; CHECK: call <4 x float> @_simd_atan2_f4(202; CHECK: ret void203 204entry:205 br label %for.body206 207for.body:208 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]209 %gep.y = getelementptr inbounds float, ptr %y, i64 %iv210 %lv = load float, ptr %gep.y, align 4211 %call = tail call float @atan2f(float %lv, float %lv)212 %gep.x = getelementptr inbounds float, ptr %x, i64 %iv213 store float %call, ptr %gep.x, align 4214 %iv.next = add i64 %iv, 1215 %exitcond = icmp eq i64 %iv.next, %n216 br i1 %exitcond, label %for.end, label %for.body217 218for.end:219 ret void220}221 222declare double @atan2(double, double) nounwind readnone223define void @atan2_v2f64(i64 %n, ptr noalias %y, ptr noalias %x) {224; CHECK-LABEL: @atan2_v2f64(225; CHECK: call <2 x double> @_simd_atan2_d2(226; CHECK: ret void227 228entry:229 br label %for.body230 231for.body:232 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]233 %gep.y = getelementptr inbounds double, ptr %y, i64 %iv234 %lv = load double, ptr %gep.y, align 4235 %call = tail call double @atan2(double %lv, double %lv)236 %gep.x = getelementptr inbounds double, ptr %x, i64 %iv237 store double %call, ptr %gep.x, align 4238 %iv.next = add i64 %iv, 1239 %exitcond = icmp eq i64 %iv.next, %n240 br i1 %exitcond, label %for.end, label %for.body241 242for.end:243 ret void244}245 246declare float @cosf(float) nounwind readnone247define void @cosf_v4f32(i64 %n, ptr noalias %y, ptr noalias %x) {248; CHECK-LABEL: @cosf_v4f32(249; CHECK: call <4 x float> @_simd_cos_f4(250; CHECK: ret void251 252entry:253 br label %for.body254 255for.body:256 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]257 %gep.y = getelementptr inbounds float, ptr %y, i64 %iv258 %lv = load float, ptr %gep.y, align 4259 %call = tail call float @cosf(float %lv)260 %gep.x = getelementptr inbounds float, ptr %x, i64 %iv261 store float %call, ptr %gep.x, align 4262 %iv.next = add i64 %iv, 1263 %exitcond = icmp eq i64 %iv.next, %n264 br i1 %exitcond, label %for.end, label %for.body265 266for.end:267 ret void268}269 270declare double @cos(double) nounwind readnone271define void @cos_v2f64(i64 %n, ptr noalias %y, ptr noalias %x) {272; CHECK-LABEL: @cos_v2f64(273; CHECK: call <2 x double> @_simd_cos_d2(274; CHECK: ret void275 276entry:277 br label %for.body278 279for.body:280 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]281 %gep.y = getelementptr inbounds double, ptr %y, i64 %iv282 %lv = load double, ptr %gep.y, align 4283 %call = tail call double @cos(double %lv)284 %gep.x = getelementptr inbounds double, ptr %x, i64 %iv285 store double %call, ptr %gep.x, align 4286 %iv.next = add i64 %iv, 1287 %exitcond = icmp eq i64 %iv.next, %n288 br i1 %exitcond, label %for.end, label %for.body289 290for.end:291 ret void292}293 294declare float @sinf(float) nounwind readnone295define void @sinf_v4f32(i64 %n, ptr noalias %y, ptr noalias %x) {296; CHECK-LABEL: @sinf_v4f32(297; CHECK: call <4 x float> @_simd_sin_f4(298; CHECK: ret void299 300entry:301 br label %for.body302 303for.body:304 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]305 %gep.y = getelementptr inbounds float, ptr %y, i64 %iv306 %lv = load float, ptr %gep.y, align 4307 %call = tail call float @sinf(float %lv)308 %gep.x = getelementptr inbounds float, ptr %x, i64 %iv309 store float %call, ptr %gep.x, align 4310 %iv.next = add i64 %iv, 1311 %exitcond = icmp eq i64 %iv.next, %n312 br i1 %exitcond, label %for.end, label %for.body313 314for.end:315 ret void316}317 318declare double @sin(double) nounwind readnone319define void @sin_v2f64(i64 %n, ptr noalias %y, ptr noalias %x) {320; CHECK-LABEL: @sin_v2f64(321; CHECK: call <2 x double> @_simd_sin_d2(322; CHECK: ret void323 324entry:325 br label %for.body326 327for.body:328 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]329 %gep.y = getelementptr inbounds double, ptr %y, i64 %iv330 %lv = load double, ptr %gep.y, align 4331 %call = tail call double @sin(double %lv)332 %gep.x = getelementptr inbounds double, ptr %x, i64 %iv333 store double %call, ptr %gep.x, align 4334 %iv.next = add i64 %iv, 1335 %exitcond = icmp eq i64 %iv.next, %n336 br i1 %exitcond, label %for.end, label %for.body337 338for.end:339 ret void340}341 342declare float @tanf(float) nounwind readnone343define void @tanf_v4f32(i64 %n, ptr noalias %y, ptr noalias %x) {344; CHECK-LABEL: @tanf_v4f32(345; CHECK: call <4 x float> @_simd_tan_f4(346; CHECK: ret void347 348entry:349 br label %for.body350 351for.body:352 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]353 %gep.y = getelementptr inbounds float, ptr %y, i64 %iv354 %lv = load float, ptr %gep.y, align 4355 %call = tail call float @tanf(float %lv)356 %gep.x = getelementptr inbounds float, ptr %x, i64 %iv357 store float %call, ptr %gep.x, align 4358 %iv.next = add i64 %iv, 1359 %exitcond = icmp eq i64 %iv.next, %n360 br i1 %exitcond, label %for.end, label %for.body361 362for.end:363 ret void364}365 366declare double @tan(double) nounwind readnone367define void @tan_v2f64(i64 %n, ptr noalias %y, ptr noalias %x) {368; CHECK-LABEL: @tan_v2f64(369; CHECK: call <2 x double> @_simd_tan_d2(370; CHECK: ret void371 372entry:373 br label %for.body374 375for.body:376 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]377 %gep.y = getelementptr inbounds double, ptr %y, i64 %iv378 %lv = load double, ptr %gep.y, align 4379 %call = tail call double @tan(double %lv)380 %gep.x = getelementptr inbounds double, ptr %x, i64 %iv381 store double %call, ptr %gep.x, align 4382 %iv.next = add i64 %iv, 1383 %exitcond = icmp eq i64 %iv.next, %n384 br i1 %exitcond, label %for.end, label %for.body385 386for.end:387 ret void388}389 390declare float @llvm.tan.f32(float) nounwind readnone391define void @tan_v4f32_intrinsic(i64 %n, ptr noalias %y, ptr noalias %x) {392; CHECK-LABEL: @tan_v4f32_intrinsic(393; CHECK: call <4 x float> @_simd_tan_f4(<4 x float>394; CHECK: ret void395 396entry:397 br label %for.body398 399for.body:400 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]401 %gep.y = getelementptr inbounds float, ptr %y, i64 %iv402 %lv = load float, ptr %gep.y, align 4403 %call = tail call float @llvm.tan.f32(float %lv)404 %gep.x = getelementptr inbounds float, ptr %x, i64 %iv405 store float %call, ptr %gep.x, align 4406 %iv.next = add i64 %iv, 1407 %exitcond = icmp eq i64 %iv.next, %n408 br i1 %exitcond, label %for.end, label %for.body409 410for.end:411 ret void412}413 414declare double @llvm.tan.f64(double) nounwind readnone415define void @tan_v2f64_intrinsic(i64 %n, ptr noalias %y, ptr noalias %x) {416; CHECK-LABEL: @tan_v2f64_intrinsic(417; CHECK: call <2 x double> @_simd_tan_d2(<2 x double>418; CHECK: ret void419 420entry:421 br label %for.body422 423for.body:424 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]425 %gep.y = getelementptr inbounds double, ptr %y, i64 %iv426 %lv = load double, ptr %gep.y, align 4427 %call = tail call double @llvm.tan.f64(double %lv)428 %gep.x = getelementptr inbounds double, ptr %x, i64 %iv429 store double %call, ptr %gep.x, align 4430 %iv.next = add i64 %iv, 1431 %exitcond = icmp eq i64 %iv.next, %n432 br i1 %exitcond, label %for.end, label %for.body433 434for.end:435 ret void436}437 438declare float @llvm.acos.f32(float) nounwind readnone439define void @acos_v4f32_intrinsic(i64 %n, ptr noalias %y, ptr noalias %x) {440; CHECK-LABEL: @acos_v4f32_intrinsic(441; CHECK: call <4 x float> @_simd_acos_f4(<4 x float>442; CHECK: ret void443 444entry:445 br label %for.body446 447for.body:448 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]449 %gep.y = getelementptr inbounds float, ptr %y, i64 %iv450 %lv = load float, ptr %gep.y, align 4451 %call = tail call float @llvm.acos.f32(float %lv)452 %gep.x = getelementptr inbounds float, ptr %x, i64 %iv453 store float %call, ptr %gep.x, align 4454 %iv.next = add i64 %iv, 1455 %exitcond = icmp eq i64 %iv.next, %n456 br i1 %exitcond, label %for.end, label %for.body457 458for.end:459 ret void460}461 462declare double @llvm.acos.f64(double) nounwind readnone463define void @acos_v2f64_intrinsic(i64 %n, ptr noalias %y, ptr noalias %x) {464; CHECK-LABEL: @acos_v2f64_intrinsic(465; CHECK: call <2 x double> @_simd_acos_d2(<2 x double>466; CHECK: ret void467 468entry:469 br label %for.body470 471for.body:472 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]473 %gep.y = getelementptr inbounds double, ptr %y, i64 %iv474 %lv = load double, ptr %gep.y, align 4475 %call = tail call double @llvm.acos.f64(double %lv)476 %gep.x = getelementptr inbounds double, ptr %x, i64 %iv477 store double %call, ptr %gep.x, align 4478 %iv.next = add i64 %iv, 1479 %exitcond = icmp eq i64 %iv.next, %n480 br i1 %exitcond, label %for.end, label %for.body481 482for.end:483 ret void484}485 486declare float @llvm.asin.f32(float) nounwind readnone487define void @asin_v4f32_intrinsic(i64 %n, ptr noalias %y, ptr noalias %x) {488; CHECK-LABEL: @asin_v4f32_intrinsic(489; CHECK: call <4 x float> @_simd_asin_f4(<4 x float>490; CHECK: ret void491 492entry:493 br label %for.body494 495for.body:496 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]497 %gep.y = getelementptr inbounds float, ptr %y, i64 %iv498 %lv = load float, ptr %gep.y, align 4499 %call = tail call float @llvm.asin.f32(float %lv)500 %gep.x = getelementptr inbounds float, ptr %x, i64 %iv501 store float %call, ptr %gep.x, align 4502 %iv.next = add i64 %iv, 1503 %exitcond = icmp eq i64 %iv.next, %n504 br i1 %exitcond, label %for.end, label %for.body505 506for.end:507 ret void508}509 510declare double @llvm.asin.f64(double) nounwind readnone511define void @asin_v2f64_intrinsic(i64 %n, ptr noalias %y, ptr noalias %x) {512; CHECK-LABEL: @asin_v2f64_intrinsic(513; CHECK: call <2 x double> @_simd_asin_d2(<2 x double>514; CHECK: ret void515 516entry:517 br label %for.body518 519for.body:520 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]521 %gep.y = getelementptr inbounds double, ptr %y, i64 %iv522 %lv = load double, ptr %gep.y, align 4523 %call = tail call double @llvm.asin.f64(double %lv)524 %gep.x = getelementptr inbounds double, ptr %x, i64 %iv525 store double %call, ptr %gep.x, align 4526 %iv.next = add i64 %iv, 1527 %exitcond = icmp eq i64 %iv.next, %n528 br i1 %exitcond, label %for.end, label %for.body529 530for.end:531 ret void532}533 534declare float @llvm.atan.f32(float) nounwind readnone535define void @atan_v4f32_intrinsic(i64 %n, ptr noalias %y, ptr noalias %x) {536; CHECK-LABEL: @atan_v4f32_intrinsic(537; CHECK: call <4 x float> @_simd_atan_f4(<4 x float>538; CHECK: ret void539 540entry:541 br label %for.body542 543for.body:544 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]545 %gep.y = getelementptr inbounds float, ptr %y, i64 %iv546 %lv = load float, ptr %gep.y, align 4547 %call = tail call float @llvm.atan.f32(float %lv)548 %gep.x = getelementptr inbounds float, ptr %x, i64 %iv549 store float %call, ptr %gep.x, align 4550 %iv.next = add i64 %iv, 1551 %exitcond = icmp eq i64 %iv.next, %n552 br i1 %exitcond, label %for.end, label %for.body553 554for.end:555 ret void556}557 558declare double @llvm.atan.f64(double) nounwind readnone559define void @atan_v2f64_intrinsic(i64 %n, ptr noalias %y, ptr noalias %x) {560; CHECK-LABEL: @atan_v2f64_intrinsic(561; CHECK: call <2 x double> @_simd_atan_d2(<2 x double>562; CHECK: ret void563 564entry:565 br label %for.body566 567for.body:568 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]569 %gep.y = getelementptr inbounds double, ptr %y, i64 %iv570 %lv = load double, ptr %gep.y, align 4571 %call = tail call double @llvm.atan.f64(double %lv)572 %gep.x = getelementptr inbounds double, ptr %x, i64 %iv573 store double %call, ptr %gep.x, align 4574 %iv.next = add i64 %iv, 1575 %exitcond = icmp eq i64 %iv.next, %n576 br i1 %exitcond, label %for.end, label %for.body577 578for.end:579 ret void580}581 582declare float @llvm.atan2.f32(float, float) nounwind readnone583define void @atan2_v4f32_intrinsic(i64 %n, ptr noalias %y, ptr noalias %x) {584; CHECK-LABEL: @atan2_v4f32_intrinsic(585; CHECK: call <4 x float> @_simd_atan2_f4(<4 x float>586; CHECK: ret void587 588entry:589 br label %for.body590 591for.body:592 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]593 %gep.y = getelementptr inbounds float, ptr %y, i64 %iv594 %lv = load float, ptr %gep.y, align 4595 %call = tail call float @llvm.atan2.f32(float %lv, float %lv)596 %gep.x = getelementptr inbounds float, ptr %x, i64 %iv597 store float %call, ptr %gep.x, align 4598 %iv.next = add i64 %iv, 1599 %exitcond = icmp eq i64 %iv.next, %n600 br i1 %exitcond, label %for.end, label %for.body601 602for.end:603 ret void604}605 606declare double @llvm.atan2.f64(double, double) nounwind readnone607define void @atan2_v2f64_intrinsic(i64 %n, ptr noalias %y, ptr noalias %x) {608; CHECK-LABEL: @atan2_v2f64_intrinsic(609; CHECK: call <2 x double> @_simd_atan2_d2(<2 x double>610; CHECK: ret void611 612entry:613 br label %for.body614 615for.body:616 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]617 %gep.y = getelementptr inbounds double, ptr %y, i64 %iv618 %lv = load double, ptr %gep.y, align 4619 %call = tail call double @llvm.atan2.f64(double %lv, double %lv)620 %gep.x = getelementptr inbounds double, ptr %x, i64 %iv621 store double %call, ptr %gep.x, align 4622 %iv.next = add i64 %iv, 1623 %exitcond = icmp eq i64 %iv.next, %n624 br i1 %exitcond, label %for.end, label %for.body625 626for.end:627 ret void628}629 630declare float @llvm.cosh.f32(float) nounwind readnone631define void @cosh_v4f32_intrinsic(i64 %n, ptr noalias %y, ptr noalias %x) {632; CHECK-LABEL: @cosh_v4f32_intrinsic(633; CHECK: call <4 x float> @_simd_cosh_f4(<4 x float>634; CHECK: ret void635 636entry:637 br label %for.body638 639for.body:640 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]641 %gep.y = getelementptr inbounds float, ptr %y, i64 %iv642 %lv = load float, ptr %gep.y, align 4643 %call = tail call float @llvm.cosh.f32(float %lv)644 %gep.x = getelementptr inbounds float, ptr %x, i64 %iv645 store float %call, ptr %gep.x, align 4646 %iv.next = add i64 %iv, 1647 %exitcond = icmp eq i64 %iv.next, %n648 br i1 %exitcond, label %for.end, label %for.body649 650for.end:651 ret void652}653 654declare double @llvm.cosh.f64(double) nounwind readnone655define void @cosh_v2f64_intrinsic(i64 %n, ptr noalias %y, ptr noalias %x) {656; CHECK-LABEL: @cosh_v2f64_intrinsic(657; CHECK: call <2 x double> @_simd_cosh_d2(<2 x double>658; CHECK: ret void659 660entry:661 br label %for.body662 663for.body:664 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]665 %gep.y = getelementptr inbounds double, ptr %y, i64 %iv666 %lv = load double, ptr %gep.y, align 4667 %call = tail call double @llvm.cosh.f64(double %lv)668 %gep.x = getelementptr inbounds double, ptr %x, i64 %iv669 store double %call, ptr %gep.x, align 4670 %iv.next = add i64 %iv, 1671 %exitcond = icmp eq i64 %iv.next, %n672 br i1 %exitcond, label %for.end, label %for.body673 674for.end:675 ret void676}677 678declare float @llvm.sinh.f32(float) nounwind readnone679define void @sinh_v4f32_intrinsic(i64 %n, ptr noalias %y, ptr noalias %x) {680; CHECK-LABEL: @sinh_v4f32_intrinsic(681; CHECK: call <4 x float> @_simd_sinh_f4(<4 x float>682; CHECK: ret void683 684entry:685 br label %for.body686 687for.body:688 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]689 %gep.y = getelementptr inbounds float, ptr %y, i64 %iv690 %lv = load float, ptr %gep.y, align 4691 %call = tail call float @llvm.sinh.f32(float %lv)692 %gep.x = getelementptr inbounds float, ptr %x, i64 %iv693 store float %call, ptr %gep.x, align 4694 %iv.next = add i64 %iv, 1695 %exitcond = icmp eq i64 %iv.next, %n696 br i1 %exitcond, label %for.end, label %for.body697 698for.end:699 ret void700}701 702declare double @llvm.sinh.f64(double) nounwind readnone703define void @sinh_v2f64_intrinsic(i64 %n, ptr noalias %y, ptr noalias %x) {704; CHECK-LABEL: @sinh_v2f64_intrinsic(705; CHECK: call <2 x double> @_simd_sinh_d2(<2 x double>706; CHECK: ret void707 708entry:709 br label %for.body710 711for.body:712 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]713 %gep.y = getelementptr inbounds double, ptr %y, i64 %iv714 %lv = load double, ptr %gep.y, align 4715 %call = tail call double @llvm.sinh.f64(double %lv)716 %gep.x = getelementptr inbounds double, ptr %x, i64 %iv717 store double %call, ptr %gep.x, align 4718 %iv.next = add i64 %iv, 1719 %exitcond = icmp eq i64 %iv.next, %n720 br i1 %exitcond, label %for.end, label %for.body721 722for.end:723 ret void724}725 726declare float @llvm.tanh.f32(float) nounwind readnone727define void @tanh_v4f32_intrinsic(i64 %n, ptr noalias %y, ptr noalias %x) {728; CHECK-LABEL: @tanh_v4f32_intrinsic(729; CHECK: call <4 x float> @_simd_tanh_f4(<4 x float>730; CHECK: ret void731 732entry:733 br label %for.body734 735for.body:736 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]737 %gep.y = getelementptr inbounds float, ptr %y, i64 %iv738 %lv = load float, ptr %gep.y, align 4739 %call = tail call float @llvm.tanh.f32(float %lv)740 %gep.x = getelementptr inbounds float, ptr %x, i64 %iv741 store float %call, ptr %gep.x, align 4742 %iv.next = add i64 %iv, 1743 %exitcond = icmp eq i64 %iv.next, %n744 br i1 %exitcond, label %for.end, label %for.body745 746for.end:747 ret void748}749 750declare double @llvm.tanh.f64(double) nounwind readnone751define void @tanh_v2f64_intrinsic(i64 %n, ptr noalias %y, ptr noalias %x) {752; CHECK-LABEL: @tanh_v2f64_intrinsic(753; CHECK: call <2 x double> @_simd_tanh_d2(<2 x double>754; CHECK: ret void755 756entry:757 br label %for.body758 759for.body:760 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]761 %gep.y = getelementptr inbounds double, ptr %y, i64 %iv762 %lv = load double, ptr %gep.y, align 4763 %call = tail call double @llvm.tanh.f64(double %lv)764 %gep.x = getelementptr inbounds double, ptr %x, i64 %iv765 store double %call, ptr %gep.x, align 4766 %iv.next = add i64 %iv, 1767 %exitcond = icmp eq i64 %iv.next, %n768 br i1 %exitcond, label %for.end, label %for.body769 770for.end:771 ret void772}773 774 775declare float @cbrtf(float) nounwind readnone776define void @cbrtf_v4f32(i64 %n, ptr noalias %y, ptr noalias %x) {777; CHECK-LABEL: @cbrtf_v4f32(778; CHECK: call <4 x float> @_simd_cbrt_f4(779; CHECK: ret void780 781entry:782 br label %for.body783 784for.body:785 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]786 %gep.y = getelementptr inbounds float, ptr %y, i64 %iv787 %lv = load float, ptr %gep.y, align 4788 %call = tail call float @cbrtf(float %lv)789 %gep.x = getelementptr inbounds float, ptr %x, i64 %iv790 store float %call, ptr %gep.x, align 4791 %iv.next = add i64 %iv, 1792 %exitcond = icmp eq i64 %iv.next, %n793 br i1 %exitcond, label %for.end, label %for.body794 795for.end:796 ret void797}798 799declare double @cbrt(double) nounwind readnone800define void @cbrt_v2f64(i64 %n, ptr noalias %y, ptr noalias %x) {801; CHECK-LABEL: @cbrt_v2f64(802; CHECK: call <2 x double> @_simd_cbrt_d2(803; CHECK: ret void804 805entry:806 br label %for.body807 808for.body:809 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]810 %gep.y = getelementptr inbounds double, ptr %y, i64 %iv811 %lv = load double, ptr %gep.y, align 4812 %call = tail call double @cbrt(double %lv)813 %gep.x = getelementptr inbounds double, ptr %x, i64 %iv814 store double %call, ptr %gep.x, align 4815 %iv.next = add i64 %iv, 1816 %exitcond = icmp eq i64 %iv.next, %n817 br i1 %exitcond, label %for.end, label %for.body818 819for.end:820 ret void821}822 823declare float @erff(float) nounwind readnone824define void @erff_v4f32(i64 %n, ptr noalias %y, ptr noalias %x) {825; CHECK-LABEL: @erff_v4f32(826; CHECK: call <4 x float> @_simd_erf_f4(827; CHECK: ret void828 829entry:830 br label %for.body831 832for.body:833 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]834 %gep.y = getelementptr inbounds float, ptr %y, i64 %iv835 %lv = load float, ptr %gep.y, align 4836 %call = tail call float @erff(float %lv)837 %gep.x = getelementptr inbounds float, ptr %x, i64 %iv838 store float %call, ptr %gep.x, align 4839 %iv.next = add i64 %iv, 1840 %exitcond = icmp eq i64 %iv.next, %n841 br i1 %exitcond, label %for.end, label %for.body842 843for.end:844 ret void845}846 847declare double @erf(double) nounwind readnone848define void @erf_v2f64(i64 %n, ptr noalias %y, ptr noalias %x) {849; CHECK-LABEL: @erf_v2f64(850; CHECK: call <2 x double> @_simd_erf_d2(851; CHECK: ret void852 853entry:854 br label %for.body855 856for.body:857 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]858 %gep.y = getelementptr inbounds double, ptr %y, i64 %iv859 %lv = load double, ptr %gep.y, align 4860 %call = tail call double @erf(double %lv)861 %gep.x = getelementptr inbounds double, ptr %x, i64 %iv862 store double %call, ptr %gep.x, align 4863 %iv.next = add i64 %iv, 1864 %exitcond = icmp eq i64 %iv.next, %n865 br i1 %exitcond, label %for.end, label %for.body866 867for.end:868 ret void869}870 871declare float @powf(float, float) nounwind readnone872define void @powf_v4f32(i64 %n, ptr noalias %y, ptr noalias %x) {873; CHECK-LABEL: @powf_v4f32(874; CHECK: call <4 x float> @_simd_pow_f4(875; CHECK: ret void876 877entry:878 br label %for.body879 880for.body:881 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]882 %gep.y = getelementptr inbounds float, ptr %y, i64 %iv883 %lv = load float, ptr %gep.y, align 4884 %call = tail call float @powf(float %lv, float %lv)885 %gep.x = getelementptr inbounds float, ptr %x, i64 %iv886 store float %call, ptr %gep.x, align 4887 %iv.next = add i64 %iv, 1888 %exitcond = icmp eq i64 %iv.next, %n889 br i1 %exitcond, label %for.end, label %for.body890 891for.end:892 ret void893}894 895declare double @pow(double, double) nounwind readnone896define void @pow_v2f64(i64 %n, ptr noalias %y, ptr noalias %x) {897; CHECK-LABEL: @pow_v2f64(898; CHECK: call <2 x double> @_simd_pow_d2(899; CHECK: ret void900 901entry:902 br label %for.body903 904for.body:905 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]906 %gep.y = getelementptr inbounds double, ptr %y, i64 %iv907 %lv = load double, ptr %gep.y, align 4908 %call = tail call double @pow(double %lv, double %lv)909 %gep.x = getelementptr inbounds double, ptr %x, i64 %iv910 store double %call, ptr %gep.x, align 4911 %iv.next = add i64 %iv, 1912 %exitcond = icmp eq i64 %iv.next, %n913 br i1 %exitcond, label %for.end, label %for.body914 915for.end:916 ret void917}918 919declare float @sinhf(float) nounwind readnone920define void @sinhf_v4f32(i64 %n, ptr noalias %y, ptr noalias %x) {921; CHECK-LABEL: @sinhf_v4f32(922; CHECK: call <4 x float> @_simd_sinh_f4(923; CHECK: ret void924 925entry:926 br label %for.body927 928for.body:929 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]930 %gep.y = getelementptr inbounds float, ptr %y, i64 %iv931 %lv = load float, ptr %gep.y, align 4932 %call = tail call float @sinhf(float %lv)933 %gep.x = getelementptr inbounds float, ptr %x, i64 %iv934 store float %call, ptr %gep.x, align 4935 %iv.next = add i64 %iv, 1936 %exitcond = icmp eq i64 %iv.next, %n937 br i1 %exitcond, label %for.end, label %for.body938 939for.end:940 ret void941}942 943declare double @sinh(double) nounwind readnone944define void @sinh_v2f64(i64 %n, ptr noalias %y, ptr noalias %x) {945; CHECK-LABEL: @sinh_v2f64(946; CHECK: call <2 x double> @_simd_sinh_d2(947; CHECK: ret void948 949entry:950 br label %for.body951 952for.body:953 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]954 %gep.y = getelementptr inbounds double, ptr %y, i64 %iv955 %lv = load double, ptr %gep.y, align 4956 %call = tail call double @sinh(double %lv)957 %gep.x = getelementptr inbounds double, ptr %x, i64 %iv958 store double %call, ptr %gep.x, align 4959 %iv.next = add i64 %iv, 1960 %exitcond = icmp eq i64 %iv.next, %n961 br i1 %exitcond, label %for.end, label %for.body962 963for.end:964 ret void965}966 967declare float @coshf(float) nounwind readnone968define void @coshf_v4f32(i64 %n, ptr noalias %y, ptr noalias %x) {969; CHECK-LABEL: @coshf_v4f32(970; CHECK: call <4 x float> @_simd_cosh_f4(971; CHECK: ret void972 973entry:974 br label %for.body975 976for.body:977 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]978 %gep.y = getelementptr inbounds float, ptr %y, i64 %iv979 %lv = load float, ptr %gep.y, align 4980 %call = tail call float @coshf(float %lv)981 %gep.x = getelementptr inbounds float, ptr %x, i64 %iv982 store float %call, ptr %gep.x, align 4983 %iv.next = add i64 %iv, 1984 %exitcond = icmp eq i64 %iv.next, %n985 br i1 %exitcond, label %for.end, label %for.body986 987for.end:988 ret void989}990 991declare double @cosh(double) nounwind readnone992define void @cosh_v2f64(i64 %n, ptr noalias %y, ptr noalias %x) {993; CHECK-LABEL: @cosh_v2f64(994; CHECK: call <2 x double> @_simd_cosh_d2(995; CHECK: ret void996 997entry:998 br label %for.body999 1000for.body:1001 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]1002 %gep.y = getelementptr inbounds double, ptr %y, i64 %iv1003 %lv = load double, ptr %gep.y, align 41004 %call = tail call double @cosh(double %lv)1005 %gep.x = getelementptr inbounds double, ptr %x, i64 %iv1006 store double %call, ptr %gep.x, align 41007 %iv.next = add i64 %iv, 11008 %exitcond = icmp eq i64 %iv.next, %n1009 br i1 %exitcond, label %for.end, label %for.body1010 1011for.end:1012 ret void1013}1014 1015declare float @tanhf(float) nounwind readnone1016define void @tanhf_v4f32(i64 %n, ptr noalias %y, ptr noalias %x) {1017; CHECK-LABEL: @tanhf_v4f32(1018; CHECK: call <4 x float> @_simd_tanh_f4(1019; CHECK: ret void1020 1021entry:1022 br label %for.body1023 1024for.body:1025 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]1026 %gep.y = getelementptr inbounds float, ptr %y, i64 %iv1027 %lv = load float, ptr %gep.y, align 41028 %call = tail call float @tanhf(float %lv)1029 %gep.x = getelementptr inbounds float, ptr %x, i64 %iv1030 store float %call, ptr %gep.x, align 41031 %iv.next = add i64 %iv, 11032 %exitcond = icmp eq i64 %iv.next, %n1033 br i1 %exitcond, label %for.end, label %for.body1034 1035for.end:1036 ret void1037}1038 1039declare double @tanh(double) nounwind readnone1040define void @tanh_v2f64(i64 %n, ptr noalias %y, ptr noalias %x) {1041; CHECK-LABEL: @tanh_v2f64(1042; CHECK: call <2 x double> @_simd_tanh_d2(1043; CHECK: ret void1044 1045entry:1046 br label %for.body1047 1048for.body:1049 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]1050 %gep.y = getelementptr inbounds double, ptr %y, i64 %iv1051 %lv = load double, ptr %gep.y, align 41052 %call = tail call double @tanh(double %lv)1053 %gep.x = getelementptr inbounds double, ptr %x, i64 %iv1054 store double %call, ptr %gep.x, align 41055 %iv.next = add i64 %iv, 11056 %exitcond = icmp eq i64 %iv.next, %n1057 br i1 %exitcond, label %for.end, label %for.body1058 1059for.end:1060 ret void1061}1062 1063declare float @asinhf(float) nounwind readnone1064define void @asinhf_v4f32(i64 %n, ptr noalias %y, ptr noalias %x) {1065; CHECK-LABEL: @asinhf_v4f32(1066; CHECK: call <4 x float> @_simd_asinh_f4(1067; CHECK: ret void1068 1069entry:1070 br label %for.body1071 1072for.body:1073 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]1074 %gep.y = getelementptr inbounds float, ptr %y, i64 %iv1075 %lv = load float, ptr %gep.y, align 41076 %call = tail call float @asinhf(float %lv)1077 %gep.x = getelementptr inbounds float, ptr %x, i64 %iv1078 store float %call, ptr %gep.x, align 41079 %iv.next = add i64 %iv, 11080 %exitcond = icmp eq i64 %iv.next, %n1081 br i1 %exitcond, label %for.end, label %for.body1082 1083for.end:1084 ret void1085}1086 1087declare double @asinh(double) nounwind readnone1088define void @asinh_v2f64(i64 %n, ptr noalias %y, ptr noalias %x) {1089; CHECK-LABEL: @asinh_v2f64(1090; CHECK: call <2 x double> @_simd_asinh_d2(1091; CHECK: ret void1092 1093entry:1094 br label %for.body1095 1096for.body:1097 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]1098 %gep.y = getelementptr inbounds double, ptr %y, i64 %iv1099 %lv = load double, ptr %gep.y, align 41100 %call = tail call double @asinh(double %lv)1101 %gep.x = getelementptr inbounds double, ptr %x, i64 %iv1102 store double %call, ptr %gep.x, align 41103 %iv.next = add i64 %iv, 11104 %exitcond = icmp eq i64 %iv.next, %n1105 br i1 %exitcond, label %for.end, label %for.body1106 1107for.end:1108 ret void1109}1110 1111declare float @acoshf(float) nounwind readnone1112define void @acoshf_v4f32(i64 %n, ptr noalias %y, ptr noalias %x) {1113; CHECK-LABEL: @acoshf_v4f32(1114; CHECK: call <4 x float> @_simd_acosh_f4(1115; CHECK: ret void1116 1117entry:1118 br label %for.body1119 1120for.body:1121 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]1122 %gep.y = getelementptr inbounds float, ptr %y, i64 %iv1123 %lv = load float, ptr %gep.y, align 41124 %call = tail call float @acoshf(float %lv)1125 %gep.x = getelementptr inbounds float, ptr %x, i64 %iv1126 store float %call, ptr %gep.x, align 41127 %iv.next = add i64 %iv, 11128 %exitcond = icmp eq i64 %iv.next, %n1129 br i1 %exitcond, label %for.end, label %for.body1130 1131for.end:1132 ret void1133}1134 1135declare double @acosh(double) nounwind readnone1136define void @acosh_v2f64(i64 %n, ptr noalias %y, ptr noalias %x) {1137; CHECK-LABEL: @acosh_v2f64(1138; CHECK: call <2 x double> @_simd_acosh_d2(1139; CHECK: ret void1140 1141entry:1142 br label %for.body1143 1144for.body:1145 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]1146 %gep.y = getelementptr inbounds double, ptr %y, i64 %iv1147 %lv = load double, ptr %gep.y, align 41148 %call = tail call double @acosh(double %lv)1149 %gep.x = getelementptr inbounds double, ptr %x, i64 %iv1150 store double %call, ptr %gep.x, align 41151 %iv.next = add i64 %iv, 11152 %exitcond = icmp eq i64 %iv.next, %n1153 br i1 %exitcond, label %for.end, label %for.body1154 1155for.end:1156 ret void1157}1158 1159declare float @atanhf(float) nounwind readnone1160define void @atanhf_v4f32(i64 %n, ptr noalias %y, ptr noalias %x) {1161; CHECK-LABEL: @atanhf_v4f32(1162; CHECK: call <4 x float> @_simd_atanh_f4(1163; CHECK: ret void1164 1165entry:1166 br label %for.body1167 1168for.body:1169 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]1170 %gep.y = getelementptr inbounds float, ptr %y, i64 %iv1171 %lv = load float, ptr %gep.y, align 41172 %call = tail call float @atanhf(float %lv)1173 %gep.x = getelementptr inbounds float, ptr %x, i64 %iv1174 store float %call, ptr %gep.x, align 41175 %iv.next = add i64 %iv, 11176 %exitcond = icmp eq i64 %iv.next, %n1177 br i1 %exitcond, label %for.end, label %for.body1178 1179for.end:1180 ret void1181}1182 1183declare double @atanh(double) nounwind readnone1184define void @atanh_v2f64(i64 %n, ptr noalias %y, ptr noalias %x) {1185; CHECK-LABEL: @atanh_v2f64(1186; CHECK: call <2 x double> @_simd_atanh_d2(1187; CHECK: ret void1188 1189entry:1190 br label %for.body1191 1192for.body:1193 %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]1194 %gep.y = getelementptr inbounds double, ptr %y, i64 %iv1195 %lv = load double, ptr %gep.y, align 41196 %call = tail call double @atanh(double %lv)1197 %gep.x = getelementptr inbounds double, ptr %x, i64 %iv1198 store double %call, ptr %gep.x, align 41199 %iv.next = add i64 %iv, 11200 %exitcond = icmp eq i64 %iv.next, %n1201 br i1 %exitcond, label %for.end, label %for.body1202 1203for.end:1204 ret void1205}1206