5054 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --scrub-attributes --filter "call.*(cos|sin|tan|cbrt|erf|exp[^e]|gamma|log|sqrt|copysign|dim|min|mod|hypot|nextafter|pow|fma)" --version 22; RUN: opt -mattr=+neon -vector-library=LIBMVEC -passes=inject-tli-mappings,loop-vectorize,simplifycfg -force-vector-interleave=1 -S < %s | FileCheck %s -check-prefix=LIBMVEC-NEON3; RUN: opt -mattr=+neon -vector-library=LIBMVEC -passes=inject-tli-mappings,loop-vectorize,simplifycfg -force-vector-interleave=1 -force-vector-width=2 -S < %s | FileCheck %s -check-prefix=LIBMVEC-NEON-WIDTH-24; RUN: opt -mattr=+sve -vector-library=LIBMVEC -passes=inject-tli-mappings,loop-vectorize,simplifycfg -mcpu=neoverse-v1 -force-vector-interleave=1 -prefer-predicate-over-epilogue=predicate-dont-vectorize -S < %s | FileCheck %s -check-prefix=LIBMVEC-SVE5; RUN: opt -mattr=+neon -vector-library=sleefgnuabi -passes=inject-tli-mappings,loop-vectorize,simplifycfg -force-vector-interleave=1 -S < %s | FileCheck %s -check-prefix=SLEEF-NEON6; RUN: opt -mattr=+sve -vector-library=sleefgnuabi -passes=inject-tli-mappings,loop-vectorize,simplifycfg -mcpu=neoverse-v1 -force-vector-interleave=1 -prefer-predicate-over-epilogue=predicate-dont-vectorize -S < %s | FileCheck %s -check-prefix=SLEEF-SVE7; RUN: opt -mattr=+sve -vector-library=sleefgnuabi -passes=inject-tli-mappings,loop-vectorize,simplifycfg -mcpu=neoverse-v1 -force-vector-interleave=1 -S < %s | FileCheck %s -check-prefixes=SLEEF-SVE-NOPRED8; RUN: opt -mattr=+neon -vector-library=ArmPL -passes=inject-tli-mappings,loop-vectorize,simplifycfg -force-vector-interleave=1 -S < %s | FileCheck %s -check-prefix=ARMPL-NEON9; RUN: opt -mattr=+sve -vector-library=ArmPL -passes=inject-tli-mappings,loop-vectorize,simplifycfg -mcpu=neoverse-v1 -force-vector-interleave=1 -prefer-predicate-over-epilogue=predicate-dont-vectorize -S < %s | FileCheck %s -check-prefix=ARMPL-SVE10; RUN: opt -mattr=+sve -vector-library=ArmPL -passes=inject-tli-mappings,loop-vectorize,simplifycfg -mcpu=neoverse-v1 -force-vector-interleave=1 -S < %s | FileCheck %s -check-prefixes=ARMPL-SVE-NOPRED11 12 13 14target triple = "aarch64-unknown-linux-gnu"15 16; We are checking whether loops containing function calls can be vectorized,17; when the compiler provides TLI mappings to their vector variants. The tests18; are checking fixed width vectorization with NEON and scalable vectorization19; with SVE.20 21declare double @acos(double)22declare float @acosf(float)23 24define void @acos_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {25; LIBMVEC-NEON-LABEL: define void @acos_f6426; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0:[0-9]+]] {27; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2v_acos(<2 x double> [[WIDE_LOAD:%.*]])28;29; LIBMVEC-NEON-WIDTH-2-LABEL: define void @acos_f6430; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0:[0-9]+]] {31; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2v_acos(<2 x double> [[WIDE_LOAD:%.*]])32;33; LIBMVEC-SVE-LABEL: define void @acos_f6434; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0:[0-9]+]] {35; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_acos(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])36;37; SLEEF-NEON-LABEL: define void @acos_f6438; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0:[0-9]+]] {39; SLEEF-NEON: [[TMP2:%.*]] = call <2 x double> @_ZGVnN2v_acos(<2 x double> [[WIDE_LOAD:%.*]])40;41; SLEEF-SVE-LABEL: define void @acos_f6442; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0:[0-9]+]] {43; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_acos(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])44;45; SLEEF-SVE-NOPRED-LABEL: define void @acos_f6446; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0:[0-9]+]] {47; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_acos(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))48; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call double @acos(double [[IN:%.*]])49;50; ARMPL-NEON-LABEL: define void @acos_f6451; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0:[0-9]+]] {52; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @armpl_vacosq_f64(<2 x double> [[WIDE_LOAD:%.*]])53;54; ARMPL-SVE-LABEL: define void @acos_f6455; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0:[0-9]+]] {56; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @armpl_svacos_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])57;58; ARMPL-SVE-NOPRED-LABEL: define void @acos_f6459; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0:[0-9]+]] {60; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @armpl_svacos_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))61; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call double @acos(double [[IN:%.*]])62;63 entry:64 br label %for.body65 66 for.body:67 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]68 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv69 %in = load double, ptr %in.gep, align 870 %call = tail call double @acos(double %in)71 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv72 store double %call, ptr %out.gep, align 873 %iv.next = add nuw nsw i64 %iv, 174 %exitcond = icmp eq i64 %iv.next, 100075 br i1 %exitcond, label %for.end, label %for.body76 77 for.end:78 ret void79}80 81define void @acos_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {82; LIBMVEC-NEON-LABEL: define void @acos_f3283; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {84; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @_ZGVnN4v_acosf(<4 x float> [[WIDE_LOAD:%.*]])85;86; LIBMVEC-NEON-WIDTH-2-LABEL: define void @acos_f3287; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {88; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x float> @_ZGVnN2v_acosf(<2 x float> [[WIDE_LOAD:%.*]])89;90; LIBMVEC-SVE-LABEL: define void @acos_f3291; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {92; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_acosf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])93;94; SLEEF-NEON-LABEL: define void @acos_f3295; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {96; SLEEF-NEON: [[TMP2:%.*]] = call <4 x float> @_ZGVnN4v_acosf(<4 x float> [[WIDE_LOAD:%.*]])97;98; SLEEF-SVE-LABEL: define void @acos_f3299; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {100; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_acosf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])101;102; SLEEF-SVE-NOPRED-LABEL: define void @acos_f32103; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {104; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_acosf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))105; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call float @acosf(float [[IN:%.*]])106;107; ARMPL-NEON-LABEL: define void @acos_f32108; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {109; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @armpl_vacosq_f32(<4 x float> [[WIDE_LOAD:%.*]])110;111; ARMPL-SVE-LABEL: define void @acos_f32112; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {113; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @armpl_svacos_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])114;115; ARMPL-SVE-NOPRED-LABEL: define void @acos_f32116; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {117; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @armpl_svacos_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))118; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call float @acosf(float [[IN:%.*]])119;120 entry:121 br label %for.body122 123 for.body:124 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]125 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv126 %in = load float, ptr %in.gep, align 8127 %call = tail call float @acosf(float %in)128 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv129 store float %call, ptr %out.gep, align 4130 %iv.next = add nuw nsw i64 %iv, 1131 %exitcond = icmp eq i64 %iv.next, 1000132 br i1 %exitcond, label %for.end, label %for.body133 134 for.end:135 ret void136}137 138declare double @acosh(double)139declare float @acoshf(float)140 141define void @acosh_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {142; LIBMVEC-NEON-LABEL: define void @acosh_f64143; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {144; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2v_acosh(<2 x double> [[WIDE_LOAD:%.*]])145;146; LIBMVEC-NEON-WIDTH-2-LABEL: define void @acosh_f64147; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {148; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2v_acosh(<2 x double> [[WIDE_LOAD:%.*]])149;150; LIBMVEC-SVE-LABEL: define void @acosh_f64151; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {152; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_acosh(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])153;154; SLEEF-NEON-LABEL: define void @acosh_f64155; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {156; SLEEF-NEON: [[TMP2:%.*]] = call <2 x double> @_ZGVnN2v_acosh(<2 x double> [[WIDE_LOAD:%.*]])157;158; SLEEF-SVE-LABEL: define void @acosh_f64159; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {160; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_acosh(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])161;162; SLEEF-SVE-NOPRED-LABEL: define void @acosh_f64163; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {164; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_acosh(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))165; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call double @acosh(double [[IN:%.*]])166;167; ARMPL-NEON-LABEL: define void @acosh_f64168; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {169; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @armpl_vacoshq_f64(<2 x double> [[WIDE_LOAD:%.*]])170;171; ARMPL-SVE-LABEL: define void @acosh_f64172; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {173; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @armpl_svacosh_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])174;175; ARMPL-SVE-NOPRED-LABEL: define void @acosh_f64176; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {177; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @armpl_svacosh_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))178; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call double @acosh(double [[IN:%.*]])179;180 entry:181 br label %for.body182 183 for.body:184 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]185 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv186 %in = load double, ptr %in.gep, align 8187 %call = tail call double @acosh(double %in)188 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv189 store double %call, ptr %out.gep, align 8190 %iv.next = add nuw nsw i64 %iv, 1191 %exitcond = icmp eq i64 %iv.next, 1000192 br i1 %exitcond, label %for.end, label %for.body193 194 for.end:195 ret void196}197 198define void @acosh_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {199; LIBMVEC-NEON-LABEL: define void @acosh_f32200; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {201; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @_ZGVnN4v_acoshf(<4 x float> [[WIDE_LOAD:%.*]])202;203; LIBMVEC-NEON-WIDTH-2-LABEL: define void @acosh_f32204; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {205; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x float> @_ZGVnN2v_acoshf(<2 x float> [[WIDE_LOAD:%.*]])206;207; LIBMVEC-SVE-LABEL: define void @acosh_f32208; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {209; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_acoshf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])210;211; SLEEF-NEON-LABEL: define void @acosh_f32212; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {213; SLEEF-NEON: [[TMP2:%.*]] = call <4 x float> @_ZGVnN4v_acoshf(<4 x float> [[WIDE_LOAD:%.*]])214;215; SLEEF-SVE-LABEL: define void @acosh_f32216; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {217; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_acoshf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])218;219; SLEEF-SVE-NOPRED-LABEL: define void @acosh_f32220; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {221; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_acoshf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))222; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call float @acoshf(float [[IN:%.*]])223;224; ARMPL-NEON-LABEL: define void @acosh_f32225; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {226; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @armpl_vacoshq_f32(<4 x float> [[WIDE_LOAD:%.*]])227;228; ARMPL-SVE-LABEL: define void @acosh_f32229; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {230; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @armpl_svacosh_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])231;232; ARMPL-SVE-NOPRED-LABEL: define void @acosh_f32233; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {234; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @armpl_svacosh_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))235; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call float @acoshf(float [[IN:%.*]])236;237 entry:238 br label %for.body239 240 for.body:241 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]242 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv243 %in = load float, ptr %in.gep, align 8244 %call = tail call float @acoshf(float %in)245 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv246 store float %call, ptr %out.gep, align 4247 %iv.next = add nuw nsw i64 %iv, 1248 %exitcond = icmp eq i64 %iv.next, 1000249 br i1 %exitcond, label %for.end, label %for.body250 251 for.end:252 ret void253}254 255declare double @asin(double)256declare float @asinf(float)257 258define void @asin_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {259; LIBMVEC-NEON-LABEL: define void @asin_f64260; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {261; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2v_asin(<2 x double> [[WIDE_LOAD:%.*]])262;263; LIBMVEC-NEON-WIDTH-2-LABEL: define void @asin_f64264; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {265; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2v_asin(<2 x double> [[WIDE_LOAD:%.*]])266;267; LIBMVEC-SVE-LABEL: define void @asin_f64268; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {269; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_asin(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])270;271; SLEEF-NEON-LABEL: define void @asin_f64272; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {273; SLEEF-NEON: [[TMP2:%.*]] = call <2 x double> @_ZGVnN2v_asin(<2 x double> [[WIDE_LOAD:%.*]])274;275; SLEEF-SVE-LABEL: define void @asin_f64276; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {277; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_asin(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])278;279; SLEEF-SVE-NOPRED-LABEL: define void @asin_f64280; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {281; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_asin(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))282; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call double @asin(double [[IN:%.*]])283;284; ARMPL-NEON-LABEL: define void @asin_f64285; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {286; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @armpl_vasinq_f64(<2 x double> [[WIDE_LOAD:%.*]])287;288; ARMPL-SVE-LABEL: define void @asin_f64289; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {290; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @armpl_svasin_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])291;292; ARMPL-SVE-NOPRED-LABEL: define void @asin_f64293; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {294; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @armpl_svasin_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))295; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call double @asin(double [[IN:%.*]])296;297 entry:298 br label %for.body299 300 for.body:301 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]302 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv303 %in = load double, ptr %in.gep, align 8304 %call = tail call double @asin(double %in)305 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv306 store double %call, ptr %out.gep, align 8307 %iv.next = add nuw nsw i64 %iv, 1308 %exitcond = icmp eq i64 %iv.next, 1000309 br i1 %exitcond, label %for.end, label %for.body310 311 for.end:312 ret void313}314 315define void @asin_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {316; LIBMVEC-NEON-LABEL: define void @asin_f32317; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {318; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @_ZGVnN4v_asinf(<4 x float> [[WIDE_LOAD:%.*]])319;320; LIBMVEC-NEON-WIDTH-2-LABEL: define void @asin_f32321; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {322; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x float> @_ZGVnN2v_asinf(<2 x float> [[WIDE_LOAD:%.*]])323;324; LIBMVEC-SVE-LABEL: define void @asin_f32325; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {326; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_asinf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])327;328; SLEEF-NEON-LABEL: define void @asin_f32329; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {330; SLEEF-NEON: [[TMP2:%.*]] = call <4 x float> @_ZGVnN4v_asinf(<4 x float> [[WIDE_LOAD:%.*]])331;332; SLEEF-SVE-LABEL: define void @asin_f32333; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {334; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_asinf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])335;336; SLEEF-SVE-NOPRED-LABEL: define void @asin_f32337; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {338; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_asinf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))339; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call float @asinf(float [[IN:%.*]])340;341; ARMPL-NEON-LABEL: define void @asin_f32342; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {343; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @armpl_vasinq_f32(<4 x float> [[WIDE_LOAD:%.*]])344;345; ARMPL-SVE-LABEL: define void @asin_f32346; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {347; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @armpl_svasin_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])348;349; ARMPL-SVE-NOPRED-LABEL: define void @asin_f32350; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {351; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @armpl_svasin_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))352; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call float @asinf(float [[IN:%.*]])353;354 entry:355 br label %for.body356 357 for.body:358 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]359 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv360 %in = load float, ptr %in.gep, align 8361 %call = tail call float @asinf(float %in)362 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv363 store float %call, ptr %out.gep, align 4364 %iv.next = add nuw nsw i64 %iv, 1365 %exitcond = icmp eq i64 %iv.next, 1000366 br i1 %exitcond, label %for.end, label %for.body367 368 for.end:369 ret void370}371 372declare double @asinh(double)373declare float @asinhf(float)374 375define void @asinh_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {376; LIBMVEC-NEON-LABEL: define void @asinh_f64377; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {378; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2v_asinh(<2 x double> [[WIDE_LOAD:%.*]])379;380; LIBMVEC-NEON-WIDTH-2-LABEL: define void @asinh_f64381; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {382; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2v_asinh(<2 x double> [[WIDE_LOAD:%.*]])383;384; LIBMVEC-SVE-LABEL: define void @asinh_f64385; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {386; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_asinh(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])387;388; SLEEF-NEON-LABEL: define void @asinh_f64389; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {390; SLEEF-NEON: [[TMP2:%.*]] = call <2 x double> @_ZGVnN2v_asinh(<2 x double> [[WIDE_LOAD:%.*]])391;392; SLEEF-SVE-LABEL: define void @asinh_f64393; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {394; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_asinh(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])395;396; SLEEF-SVE-NOPRED-LABEL: define void @asinh_f64397; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {398; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_asinh(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))399; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call double @asinh(double [[IN:%.*]])400;401; ARMPL-NEON-LABEL: define void @asinh_f64402; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {403; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @armpl_vasinhq_f64(<2 x double> [[WIDE_LOAD:%.*]])404;405; ARMPL-SVE-LABEL: define void @asinh_f64406; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {407; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @armpl_svasinh_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])408;409; ARMPL-SVE-NOPRED-LABEL: define void @asinh_f64410; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {411; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @armpl_svasinh_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))412; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call double @asinh(double [[IN:%.*]])413;414 entry:415 br label %for.body416 417 for.body:418 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]419 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv420 %in = load double, ptr %in.gep, align 8421 %call = tail call double @asinh(double %in)422 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv423 store double %call, ptr %out.gep, align 8424 %iv.next = add nuw nsw i64 %iv, 1425 %exitcond = icmp eq i64 %iv.next, 1000426 br i1 %exitcond, label %for.end, label %for.body427 428 for.end:429 ret void430}431 432define void @asinh_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {433; LIBMVEC-NEON-LABEL: define void @asinh_f32434; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {435; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @_ZGVnN4v_asinhf(<4 x float> [[WIDE_LOAD:%.*]])436;437; LIBMVEC-NEON-WIDTH-2-LABEL: define void @asinh_f32438; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {439; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x float> @_ZGVnN2v_asinhf(<2 x float> [[WIDE_LOAD:%.*]])440;441; LIBMVEC-SVE-LABEL: define void @asinh_f32442; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {443; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_asinhf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])444;445; SLEEF-NEON-LABEL: define void @asinh_f32446; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {447; SLEEF-NEON: [[TMP2:%.*]] = call <4 x float> @_ZGVnN4v_asinhf(<4 x float> [[WIDE_LOAD:%.*]])448;449; SLEEF-SVE-LABEL: define void @asinh_f32450; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {451; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_asinhf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])452;453; SLEEF-SVE-NOPRED-LABEL: define void @asinh_f32454; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {455; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_asinhf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))456; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call float @asinhf(float [[IN:%.*]])457;458; ARMPL-NEON-LABEL: define void @asinh_f32459; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {460; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @armpl_vasinhq_f32(<4 x float> [[WIDE_LOAD:%.*]])461;462; ARMPL-SVE-LABEL: define void @asinh_f32463; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {464; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @armpl_svasinh_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])465;466; ARMPL-SVE-NOPRED-LABEL: define void @asinh_f32467; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {468; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @armpl_svasinh_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))469; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call float @asinhf(float [[IN:%.*]])470;471 entry:472 br label %for.body473 474 for.body:475 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]476 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv477 %in = load float, ptr %in.gep, align 8478 %call = tail call float @asinhf(float %in)479 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv480 store float %call, ptr %out.gep, align 4481 %iv.next = add nuw nsw i64 %iv, 1482 %exitcond = icmp eq i64 %iv.next, 1000483 br i1 %exitcond, label %for.end, label %for.body484 485 for.end:486 ret void487}488 489declare double @atan(double)490declare float @atanf(float)491 492define void @atan_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {493; LIBMVEC-NEON-LABEL: define void @atan_f64494; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {495; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2v_atan(<2 x double> [[WIDE_LOAD:%.*]])496;497; LIBMVEC-NEON-WIDTH-2-LABEL: define void @atan_f64498; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {499; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2v_atan(<2 x double> [[WIDE_LOAD:%.*]])500;501; LIBMVEC-SVE-LABEL: define void @atan_f64502; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {503; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_atan(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])504;505; SLEEF-NEON-LABEL: define void @atan_f64506; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {507; SLEEF-NEON: [[TMP2:%.*]] = call <2 x double> @_ZGVnN2v_atan(<2 x double> [[WIDE_LOAD:%.*]])508;509; SLEEF-SVE-LABEL: define void @atan_f64510; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {511; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_atan(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])512;513; SLEEF-SVE-NOPRED-LABEL: define void @atan_f64514; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {515; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_atan(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))516; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call double @atan(double [[IN:%.*]])517;518; ARMPL-NEON-LABEL: define void @atan_f64519; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {520; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @armpl_vatanq_f64(<2 x double> [[WIDE_LOAD:%.*]])521;522; ARMPL-SVE-LABEL: define void @atan_f64523; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {524; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @armpl_svatan_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])525;526; ARMPL-SVE-NOPRED-LABEL: define void @atan_f64527; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {528; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @armpl_svatan_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))529; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call double @atan(double [[IN:%.*]])530;531 entry:532 br label %for.body533 534 for.body:535 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]536 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv537 %in = load double, ptr %in.gep, align 8538 %call = tail call double @atan(double %in)539 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv540 store double %call, ptr %out.gep, align 8541 %iv.next = add nuw nsw i64 %iv, 1542 %exitcond = icmp eq i64 %iv.next, 1000543 br i1 %exitcond, label %for.end, label %for.body544 545 for.end:546 ret void547}548 549define void @atan_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {550; LIBMVEC-NEON-LABEL: define void @atan_f32551; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {552; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @_ZGVnN4v_atanf(<4 x float> [[WIDE_LOAD:%.*]])553;554; LIBMVEC-NEON-WIDTH-2-LABEL: define void @atan_f32555; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {556; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x float> @_ZGVnN2v_atanf(<2 x float> [[WIDE_LOAD:%.*]])557;558; LIBMVEC-SVE-LABEL: define void @atan_f32559; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {560; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_atanf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])561;562; SLEEF-NEON-LABEL: define void @atan_f32563; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {564; SLEEF-NEON: [[TMP2:%.*]] = call <4 x float> @_ZGVnN4v_atanf(<4 x float> [[WIDE_LOAD:%.*]])565;566; SLEEF-SVE-LABEL: define void @atan_f32567; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {568; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_atanf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])569;570; SLEEF-SVE-NOPRED-LABEL: define void @atan_f32571; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {572; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_atanf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))573; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call float @atanf(float [[IN:%.*]])574;575; ARMPL-NEON-LABEL: define void @atan_f32576; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {577; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @armpl_vatanq_f32(<4 x float> [[WIDE_LOAD:%.*]])578;579; ARMPL-SVE-LABEL: define void @atan_f32580; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {581; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @armpl_svatan_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])582;583; ARMPL-SVE-NOPRED-LABEL: define void @atan_f32584; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {585; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @armpl_svatan_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))586; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call float @atanf(float [[IN:%.*]])587;588 entry:589 br label %for.body590 591 for.body:592 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]593 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv594 %in = load float, ptr %in.gep, align 8595 %call = tail call float @atanf(float %in)596 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv597 store float %call, ptr %out.gep, align 4598 %iv.next = add nuw nsw i64 %iv, 1599 %exitcond = icmp eq i64 %iv.next, 1000600 br i1 %exitcond, label %for.end, label %for.body601 602 for.end:603 ret void604}605 606declare double @atan2(double, double)607declare float @atan2f(float, float)608 609define void @atan2_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {610; LIBMVEC-NEON-LABEL: define void @atan2_f64611; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {612; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2vv_atan2(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])613;614; LIBMVEC-NEON-WIDTH-2-LABEL: define void @atan2_f64615; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {616; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2vv_atan2(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])617;618; LIBMVEC-SVE-LABEL: define void @atan2_f64619; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {620; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxvv_atan2(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x double> [[WIDE_MASKED_LOAD]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])621;622; SLEEF-NEON-LABEL: define void @atan2_f64623; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {624; SLEEF-NEON: [[TMP2:%.*]] = call <2 x double> @_ZGVnN2vv_atan2(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])625;626; SLEEF-SVE-LABEL: define void @atan2_f64627; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {628; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxvv_atan2(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x double> [[WIDE_MASKED_LOAD]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])629;630; SLEEF-SVE-NOPRED-LABEL: define void @atan2_f64631; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {632; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @_ZGVsMxvv_atan2(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]], <vscale x 2 x i1> splat (i1 true))633; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call double @atan2(double [[IN:%.*]], double [[IN]])634;635; ARMPL-NEON-LABEL: define void @atan2_f64636; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {637; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @armpl_vatan2q_f64(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])638;639; ARMPL-SVE-LABEL: define void @atan2_f64640; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {641; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @armpl_svatan2_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x double> [[WIDE_MASKED_LOAD]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])642;643; ARMPL-SVE-NOPRED-LABEL: define void @atan2_f64644; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {645; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @armpl_svatan2_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]], <vscale x 2 x i1> splat (i1 true))646; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call double @atan2(double [[IN:%.*]], double [[IN]])647;648 entry:649 br label %for.body650 651 for.body:652 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]653 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv654 %in = load double, ptr %in.gep, align 8655 %call = tail call double @atan2(double %in, double %in)656 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv657 store double %call, ptr %out.gep, align 8658 %iv.next = add nuw nsw i64 %iv, 1659 %exitcond = icmp eq i64 %iv.next, 1000660 br i1 %exitcond, label %for.end, label %for.body661 662 for.end:663 ret void664}665 666define void @atan2_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {667; LIBMVEC-NEON-LABEL: define void @atan2_f32668; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {669; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @_ZGVnN4vv_atan2f(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])670;671; LIBMVEC-NEON-WIDTH-2-LABEL: define void @atan2_f32672; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {673; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x float> @_ZGVnN2vv_atan2f(<2 x float> [[WIDE_LOAD:%.*]], <2 x float> [[WIDE_LOAD]])674;675; LIBMVEC-SVE-LABEL: define void @atan2_f32676; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {677; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxvv_atan2f(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x float> [[WIDE_MASKED_LOAD]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])678;679; SLEEF-NEON-LABEL: define void @atan2_f32680; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {681; SLEEF-NEON: [[TMP2:%.*]] = call <4 x float> @_ZGVnN4vv_atan2f(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])682;683; SLEEF-SVE-LABEL: define void @atan2_f32684; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {685; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxvv_atan2f(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x float> [[WIDE_MASKED_LOAD]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])686;687; SLEEF-SVE-NOPRED-LABEL: define void @atan2_f32688; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {689; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @_ZGVsMxvv_atan2f(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]], <vscale x 4 x i1> splat (i1 true))690; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call float @atan2f(float [[IN:%.*]], float [[IN]])691;692; ARMPL-NEON-LABEL: define void @atan2_f32693; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {694; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @armpl_vatan2q_f32(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])695;696; ARMPL-SVE-LABEL: define void @atan2_f32697; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {698; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @armpl_svatan2_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x float> [[WIDE_MASKED_LOAD]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])699;700; ARMPL-SVE-NOPRED-LABEL: define void @atan2_f32701; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {702; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @armpl_svatan2_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]], <vscale x 4 x i1> splat (i1 true))703; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call float @atan2f(float [[IN:%.*]], float [[IN]])704;705 entry:706 br label %for.body707 708 for.body:709 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]710 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv711 %in = load float, ptr %in.gep, align 8712 %call = tail call float @atan2f(float %in, float %in)713 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv714 store float %call, ptr %out.gep, align 4715 %iv.next = add nuw nsw i64 %iv, 1716 %exitcond = icmp eq i64 %iv.next, 1000717 br i1 %exitcond, label %for.end, label %for.body718 719 for.end:720 ret void721}722 723declare double @atanh(double)724declare float @atanhf(float)725 726define void @atanh_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {727; LIBMVEC-NEON-LABEL: define void @atanh_f64728; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {729; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2v_atanh(<2 x double> [[WIDE_LOAD:%.*]])730;731; LIBMVEC-NEON-WIDTH-2-LABEL: define void @atanh_f64732; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {733; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2v_atanh(<2 x double> [[WIDE_LOAD:%.*]])734;735; LIBMVEC-SVE-LABEL: define void @atanh_f64736; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {737; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_atanh(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])738;739; SLEEF-NEON-LABEL: define void @atanh_f64740; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {741; SLEEF-NEON: [[TMP2:%.*]] = call <2 x double> @_ZGVnN2v_atanh(<2 x double> [[WIDE_LOAD:%.*]])742;743; SLEEF-SVE-LABEL: define void @atanh_f64744; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {745; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_atanh(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])746;747; SLEEF-SVE-NOPRED-LABEL: define void @atanh_f64748; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {749; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_atanh(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))750; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call double @atanh(double [[IN:%.*]])751;752; ARMPL-NEON-LABEL: define void @atanh_f64753; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {754; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @armpl_vatanhq_f64(<2 x double> [[WIDE_LOAD:%.*]])755;756; ARMPL-SVE-LABEL: define void @atanh_f64757; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {758; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @armpl_svatanh_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])759;760; ARMPL-SVE-NOPRED-LABEL: define void @atanh_f64761; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {762; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @armpl_svatanh_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))763; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call double @atanh(double [[IN:%.*]])764;765 entry:766 br label %for.body767 768 for.body:769 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]770 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv771 %in = load double, ptr %in.gep, align 8772 %call = tail call double @atanh(double %in)773 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv774 store double %call, ptr %out.gep, align 8775 %iv.next = add nuw nsw i64 %iv, 1776 %exitcond = icmp eq i64 %iv.next, 1000777 br i1 %exitcond, label %for.end, label %for.body778 779 for.end:780 ret void781}782 783define void @atanh_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {784; LIBMVEC-NEON-LABEL: define void @atanh_f32785; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {786; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @_ZGVnN4v_atanhf(<4 x float> [[WIDE_LOAD:%.*]])787;788; LIBMVEC-NEON-WIDTH-2-LABEL: define void @atanh_f32789; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {790; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x float> @_ZGVnN2v_atanhf(<2 x float> [[WIDE_LOAD:%.*]])791;792; LIBMVEC-SVE-LABEL: define void @atanh_f32793; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {794; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_atanhf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])795;796; SLEEF-NEON-LABEL: define void @atanh_f32797; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {798; SLEEF-NEON: [[TMP2:%.*]] = call <4 x float> @_ZGVnN4v_atanhf(<4 x float> [[WIDE_LOAD:%.*]])799;800; SLEEF-SVE-LABEL: define void @atanh_f32801; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {802; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_atanhf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])803;804; SLEEF-SVE-NOPRED-LABEL: define void @atanh_f32805; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {806; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_atanhf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))807; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call float @atanhf(float [[IN:%.*]])808;809; ARMPL-NEON-LABEL: define void @atanh_f32810; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {811; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @armpl_vatanhq_f32(<4 x float> [[WIDE_LOAD:%.*]])812;813; ARMPL-SVE-LABEL: define void @atanh_f32814; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {815; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @armpl_svatanh_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])816;817; ARMPL-SVE-NOPRED-LABEL: define void @atanh_f32818; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {819; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @armpl_svatanh_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))820; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call float @atanhf(float [[IN:%.*]])821;822 entry:823 br label %for.body824 825 for.body:826 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]827 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv828 %in = load float, ptr %in.gep, align 8829 %call = tail call float @atanhf(float %in)830 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv831 store float %call, ptr %out.gep, align 4832 %iv.next = add nuw nsw i64 %iv, 1833 %exitcond = icmp eq i64 %iv.next, 1000834 br i1 %exitcond, label %for.end, label %for.body835 836 for.end:837 ret void838}839 840declare double @cbrt(double)841declare float @cbrtf(float)842 843define void @cbrt_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {844; LIBMVEC-NEON-LABEL: define void @cbrt_f64845; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {846; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2v_cbrt(<2 x double> [[WIDE_LOAD:%.*]])847;848; LIBMVEC-NEON-WIDTH-2-LABEL: define void @cbrt_f64849; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {850; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2v_cbrt(<2 x double> [[WIDE_LOAD:%.*]])851;852; LIBMVEC-SVE-LABEL: define void @cbrt_f64853; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {854; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_cbrt(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])855;856; SLEEF-NEON-LABEL: define void @cbrt_f64857; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {858; SLEEF-NEON: [[TMP2:%.*]] = call <2 x double> @_ZGVnN2v_cbrt(<2 x double> [[WIDE_LOAD:%.*]])859;860; SLEEF-SVE-LABEL: define void @cbrt_f64861; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {862; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_cbrt(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])863;864; SLEEF-SVE-NOPRED-LABEL: define void @cbrt_f64865; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {866; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_cbrt(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))867; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call double @cbrt(double [[IN:%.*]])868;869; ARMPL-NEON-LABEL: define void @cbrt_f64870; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {871; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @armpl_vcbrtq_f64(<2 x double> [[WIDE_LOAD:%.*]])872;873; ARMPL-SVE-LABEL: define void @cbrt_f64874; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {875; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @armpl_svcbrt_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])876;877; ARMPL-SVE-NOPRED-LABEL: define void @cbrt_f64878; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {879; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @armpl_svcbrt_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))880; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call double @cbrt(double [[IN:%.*]])881;882 entry:883 br label %for.body884 885 for.body:886 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]887 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv888 %in = load double, ptr %in.gep, align 8889 %call = tail call double @cbrt(double %in)890 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv891 store double %call, ptr %out.gep, align 8892 %iv.next = add nuw nsw i64 %iv, 1893 %exitcond = icmp eq i64 %iv.next, 1000894 br i1 %exitcond, label %for.end, label %for.body895 896 for.end:897 ret void898}899 900define void @cbrt_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {901; LIBMVEC-NEON-LABEL: define void @cbrt_f32902; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {903; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @_ZGVnN4v_cbrtf(<4 x float> [[WIDE_LOAD:%.*]])904;905; LIBMVEC-NEON-WIDTH-2-LABEL: define void @cbrt_f32906; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {907; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x float> @_ZGVnN2v_cbrtf(<2 x float> [[WIDE_LOAD:%.*]])908;909; LIBMVEC-SVE-LABEL: define void @cbrt_f32910; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {911; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_cbrtf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])912;913; SLEEF-NEON-LABEL: define void @cbrt_f32914; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {915; SLEEF-NEON: [[TMP2:%.*]] = call <4 x float> @_ZGVnN4v_cbrtf(<4 x float> [[WIDE_LOAD:%.*]])916;917; SLEEF-SVE-LABEL: define void @cbrt_f32918; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {919; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_cbrtf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])920;921; SLEEF-SVE-NOPRED-LABEL: define void @cbrt_f32922; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {923; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_cbrtf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))924; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call float @cbrtf(float [[IN:%.*]])925;926; ARMPL-NEON-LABEL: define void @cbrt_f32927; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {928; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @armpl_vcbrtq_f32(<4 x float> [[WIDE_LOAD:%.*]])929;930; ARMPL-SVE-LABEL: define void @cbrt_f32931; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {932; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @armpl_svcbrt_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])933;934; ARMPL-SVE-NOPRED-LABEL: define void @cbrt_f32935; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {936; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @armpl_svcbrt_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))937; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call float @cbrtf(float [[IN:%.*]])938;939 entry:940 br label %for.body941 942 for.body:943 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]944 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv945 %in = load float, ptr %in.gep, align 8946 %call = tail call float @cbrtf(float %in)947 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv948 store float %call, ptr %out.gep, align 4949 %iv.next = add nuw nsw i64 %iv, 1950 %exitcond = icmp eq i64 %iv.next, 1000951 br i1 %exitcond, label %for.end, label %for.body952 953 for.end:954 ret void955}956 957declare double @copysign(double, double)958declare float @copysignf(float, float)959 960define void @copysign_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {961; LIBMVEC-NEON-LABEL: define void @copysign_f64962; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {963; LIBMVEC-NEON: [[CALL:%.*]] = tail call double @copysign(double [[IN:%.*]], double [[IN]])964;965; LIBMVEC-NEON-WIDTH-2-LABEL: define void @copysign_f64966; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {967; LIBMVEC-NEON-WIDTH-2: [[CALL:%.*]] = tail call double @copysign(double [[IN:%.*]], double [[IN]])968;969; LIBMVEC-SVE-LABEL: define void @copysign_f64970; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {971; LIBMVEC-SVE: [[CALL:%.*]] = tail call double @copysign(double [[IN:%.*]], double [[IN]])972;973; SLEEF-NEON-LABEL: define void @copysign_f64974; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {975; SLEEF-NEON: [[TMP2:%.*]] = call <2 x double> @_ZGVnN2vv_copysign(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])976;977; SLEEF-SVE-LABEL: define void @copysign_f64978; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {979; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxvv_copysign(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x double> [[WIDE_MASKED_LOAD]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])980;981; SLEEF-SVE-NOPRED-LABEL: define void @copysign_f64982; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {983; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @_ZGVsMxvv_copysign(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]], <vscale x 2 x i1> splat (i1 true))984; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call double @copysign(double [[IN:%.*]], double [[IN]])985;986; ARMPL-NEON-LABEL: define void @copysign_f64987; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {988; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @armpl_vcopysignq_f64(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])989;990; ARMPL-SVE-LABEL: define void @copysign_f64991; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {992; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @armpl_svcopysign_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x double> [[WIDE_MASKED_LOAD]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])993;994; ARMPL-SVE-NOPRED-LABEL: define void @copysign_f64995; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {996; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @armpl_svcopysign_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]], <vscale x 2 x i1> splat (i1 true))997; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call double @copysign(double [[IN:%.*]], double [[IN]])998;999 entry:1000 br label %for.body1001 1002 for.body:1003 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1004 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv1005 %in = load double, ptr %in.gep, align 81006 %call = tail call double @copysign(double %in, double %in)1007 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv1008 store double %call, ptr %out.gep, align 81009 %iv.next = add nuw nsw i64 %iv, 11010 %exitcond = icmp eq i64 %iv.next, 10001011 br i1 %exitcond, label %for.end, label %for.body1012 1013 for.end:1014 ret void1015}1016 1017define void @copysign_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {1018; LIBMVEC-NEON-LABEL: define void @copysign_f321019; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1020; LIBMVEC-NEON: [[CALL:%.*]] = tail call float @copysignf(float [[IN:%.*]], float [[IN]])1021;1022; LIBMVEC-NEON-WIDTH-2-LABEL: define void @copysign_f321023; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1024; LIBMVEC-NEON-WIDTH-2: [[CALL:%.*]] = tail call float @copysignf(float [[IN:%.*]], float [[IN]])1025;1026; LIBMVEC-SVE-LABEL: define void @copysign_f321027; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1028; LIBMVEC-SVE: [[CALL:%.*]] = tail call float @copysignf(float [[IN:%.*]], float [[IN]])1029;1030; SLEEF-NEON-LABEL: define void @copysign_f321031; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1032; SLEEF-NEON: [[TMP2:%.*]] = call <4 x float> @_ZGVnN4vv_copysignf(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])1033;1034; SLEEF-SVE-LABEL: define void @copysign_f321035; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1036; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxvv_copysignf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x float> [[WIDE_MASKED_LOAD]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])1037;1038; SLEEF-SVE-NOPRED-LABEL: define void @copysign_f321039; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1040; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @_ZGVsMxvv_copysignf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]], <vscale x 4 x i1> splat (i1 true))1041; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call float @copysignf(float [[IN:%.*]], float [[IN]])1042;1043; ARMPL-NEON-LABEL: define void @copysign_f321044; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1045; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @armpl_vcopysignq_f32(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])1046;1047; ARMPL-SVE-LABEL: define void @copysign_f321048; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1049; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @armpl_svcopysign_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x float> [[WIDE_MASKED_LOAD]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])1050;1051; ARMPL-SVE-NOPRED-LABEL: define void @copysign_f321052; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1053; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @armpl_svcopysign_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]], <vscale x 4 x i1> splat (i1 true))1054; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call float @copysignf(float [[IN:%.*]], float [[IN]])1055;1056 entry:1057 br label %for.body1058 1059 for.body:1060 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1061 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv1062 %in = load float, ptr %in.gep, align 81063 %call = tail call float @copysignf(float %in, float %in)1064 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv1065 store float %call, ptr %out.gep, align 41066 %iv.next = add nuw nsw i64 %iv, 11067 %exitcond = icmp eq i64 %iv.next, 10001068 br i1 %exitcond, label %for.end, label %for.body1069 1070 for.end:1071 ret void1072}1073 1074declare double @cos(double)1075declare float @cosf(float)1076 1077define void @cos_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {1078; LIBMVEC-NEON-LABEL: define void @cos_f641079; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1080; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2v_cos(<2 x double> [[WIDE_LOAD:%.*]])1081;1082; LIBMVEC-NEON-WIDTH-2-LABEL: define void @cos_f641083; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1084; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2v_cos(<2 x double> [[WIDE_LOAD:%.*]])1085;1086; LIBMVEC-SVE-LABEL: define void @cos_f641087; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1088; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_cos(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])1089;1090; SLEEF-NEON-LABEL: define void @cos_f641091; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1092; SLEEF-NEON: [[TMP2:%.*]] = call <2 x double> @_ZGVnN2v_cos(<2 x double> [[WIDE_LOAD:%.*]])1093;1094; SLEEF-SVE-LABEL: define void @cos_f641095; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1096; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_cos(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])1097;1098; SLEEF-SVE-NOPRED-LABEL: define void @cos_f641099; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1100; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_cos(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))1101; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call double @cos(double [[IN:%.*]])1102;1103; ARMPL-NEON-LABEL: define void @cos_f641104; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1105; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @armpl_vcosq_f64(<2 x double> [[WIDE_LOAD:%.*]])1106;1107; ARMPL-SVE-LABEL: define void @cos_f641108; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1109; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @armpl_svcos_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])1110;1111; ARMPL-SVE-NOPRED-LABEL: define void @cos_f641112; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1113; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @armpl_svcos_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))1114; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call double @cos(double [[IN:%.*]])1115;1116 entry:1117 br label %for.body1118 1119 for.body:1120 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1121 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv1122 %in = load double, ptr %in.gep, align 81123 %call = tail call double @cos(double %in)1124 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv1125 store double %call, ptr %out.gep, align 81126 %iv.next = add nuw nsw i64 %iv, 11127 %exitcond = icmp eq i64 %iv.next, 10001128 br i1 %exitcond, label %for.end, label %for.body1129 1130 for.end:1131 ret void1132}1133 1134define void @cos_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {1135; LIBMVEC-NEON-LABEL: define void @cos_f321136; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1137; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @_ZGVnN4v_cosf(<4 x float> [[WIDE_LOAD:%.*]])1138;1139; LIBMVEC-NEON-WIDTH-2-LABEL: define void @cos_f321140; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1141; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x float> @_ZGVnN2v_cosf(<2 x float> [[WIDE_LOAD:%.*]])1142;1143; LIBMVEC-SVE-LABEL: define void @cos_f321144; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1145; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_cosf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])1146;1147; SLEEF-NEON-LABEL: define void @cos_f321148; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1149; SLEEF-NEON: [[TMP2:%.*]] = call <4 x float> @_ZGVnN4v_cosf(<4 x float> [[WIDE_LOAD:%.*]])1150;1151; SLEEF-SVE-LABEL: define void @cos_f321152; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1153; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_cosf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])1154;1155; SLEEF-SVE-NOPRED-LABEL: define void @cos_f321156; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1157; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_cosf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))1158; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call float @cosf(float [[IN:%.*]])1159;1160; ARMPL-NEON-LABEL: define void @cos_f321161; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1162; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @armpl_vcosq_f32(<4 x float> [[WIDE_LOAD:%.*]])1163;1164; ARMPL-SVE-LABEL: define void @cos_f321165; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1166; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @armpl_svcos_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])1167;1168; ARMPL-SVE-NOPRED-LABEL: define void @cos_f321169; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1170; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @armpl_svcos_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))1171; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call float @cosf(float [[IN:%.*]])1172;1173 entry:1174 br label %for.body1175 1176 for.body:1177 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1178 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv1179 %in = load float, ptr %in.gep, align 81180 %call = tail call float @cosf(float %in)1181 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv1182 store float %call, ptr %out.gep, align 41183 %iv.next = add nuw nsw i64 %iv, 11184 %exitcond = icmp eq i64 %iv.next, 10001185 br i1 %exitcond, label %for.end, label %for.body1186 1187 for.end:1188 ret void1189}1190 1191declare double @cosh(double)1192declare float @coshf(float)1193 1194define void @cosh_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {1195; LIBMVEC-NEON-LABEL: define void @cosh_f641196; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1197; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2v_cosh(<2 x double> [[WIDE_LOAD:%.*]])1198;1199; LIBMVEC-NEON-WIDTH-2-LABEL: define void @cosh_f641200; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1201; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2v_cosh(<2 x double> [[WIDE_LOAD:%.*]])1202;1203; LIBMVEC-SVE-LABEL: define void @cosh_f641204; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1205; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_cosh(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])1206;1207; SLEEF-NEON-LABEL: define void @cosh_f641208; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1209; SLEEF-NEON: [[TMP2:%.*]] = call <2 x double> @_ZGVnN2v_cosh(<2 x double> [[WIDE_LOAD:%.*]])1210;1211; SLEEF-SVE-LABEL: define void @cosh_f641212; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1213; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_cosh(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])1214;1215; SLEEF-SVE-NOPRED-LABEL: define void @cosh_f641216; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1217; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_cosh(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))1218; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call double @cosh(double [[IN:%.*]])1219;1220; ARMPL-NEON-LABEL: define void @cosh_f641221; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1222; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @armpl_vcoshq_f64(<2 x double> [[WIDE_LOAD:%.*]])1223;1224; ARMPL-SVE-LABEL: define void @cosh_f641225; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1226; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @armpl_svcosh_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])1227;1228; ARMPL-SVE-NOPRED-LABEL: define void @cosh_f641229; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1230; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @armpl_svcosh_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))1231; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call double @cosh(double [[IN:%.*]])1232;1233 entry:1234 br label %for.body1235 1236 for.body:1237 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1238 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv1239 %in = load double, ptr %in.gep, align 81240 %call = tail call double @cosh(double %in)1241 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv1242 store double %call, ptr %out.gep, align 81243 %iv.next = add nuw nsw i64 %iv, 11244 %exitcond = icmp eq i64 %iv.next, 10001245 br i1 %exitcond, label %for.end, label %for.body1246 1247 for.end:1248 ret void1249}1250 1251define void @cosh_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {1252; LIBMVEC-NEON-LABEL: define void @cosh_f321253; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1254; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @_ZGVnN4v_coshf(<4 x float> [[WIDE_LOAD:%.*]])1255;1256; LIBMVEC-NEON-WIDTH-2-LABEL: define void @cosh_f321257; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1258; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x float> @_ZGVnN2v_coshf(<2 x float> [[WIDE_LOAD:%.*]])1259;1260; LIBMVEC-SVE-LABEL: define void @cosh_f321261; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1262; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_coshf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])1263;1264; SLEEF-NEON-LABEL: define void @cosh_f321265; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1266; SLEEF-NEON: [[TMP2:%.*]] = call <4 x float> @_ZGVnN4v_coshf(<4 x float> [[WIDE_LOAD:%.*]])1267;1268; SLEEF-SVE-LABEL: define void @cosh_f321269; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1270; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_coshf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])1271;1272; SLEEF-SVE-NOPRED-LABEL: define void @cosh_f321273; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1274; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_coshf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))1275; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call float @coshf(float [[IN:%.*]])1276;1277; ARMPL-NEON-LABEL: define void @cosh_f321278; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1279; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @armpl_vcoshq_f32(<4 x float> [[WIDE_LOAD:%.*]])1280;1281; ARMPL-SVE-LABEL: define void @cosh_f321282; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1283; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @armpl_svcosh_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])1284;1285; ARMPL-SVE-NOPRED-LABEL: define void @cosh_f321286; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1287; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @armpl_svcosh_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))1288; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call float @coshf(float [[IN:%.*]])1289;1290 entry:1291 br label %for.body1292 1293 for.body:1294 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1295 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv1296 %in = load float, ptr %in.gep, align 81297 %call = tail call float @coshf(float %in)1298 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv1299 store float %call, ptr %out.gep, align 41300 %iv.next = add nuw nsw i64 %iv, 11301 %exitcond = icmp eq i64 %iv.next, 10001302 br i1 %exitcond, label %for.end, label %for.body1303 1304 for.end:1305 ret void1306}1307 1308declare double @cospi(double)1309declare float @cospif(float)1310 1311define void @cospi_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {1312; LIBMVEC-NEON-LABEL: define void @cospi_f641313; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1314; LIBMVEC-NEON: [[CALL:%.*]] = tail call double @cospi(double [[IN:%.*]])1315;1316; LIBMVEC-NEON-WIDTH-2-LABEL: define void @cospi_f641317; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1318; LIBMVEC-NEON-WIDTH-2: [[CALL:%.*]] = tail call double @cospi(double [[IN:%.*]])1319;1320; LIBMVEC-SVE-LABEL: define void @cospi_f641321; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1322; LIBMVEC-SVE: [[CALL:%.*]] = tail call double @cospi(double [[IN:%.*]])1323;1324; SLEEF-NEON-LABEL: define void @cospi_f641325; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1326; SLEEF-NEON: [[TMP2:%.*]] = call <2 x double> @_ZGVnN2v_cospi(<2 x double> [[WIDE_LOAD:%.*]])1327;1328; SLEEF-SVE-LABEL: define void @cospi_f641329; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1330; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_cospi(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])1331;1332; SLEEF-SVE-NOPRED-LABEL: define void @cospi_f641333; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1334; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_cospi(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))1335; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call double @cospi(double [[IN:%.*]])1336;1337; ARMPL-NEON-LABEL: define void @cospi_f641338; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1339; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @armpl_vcospiq_f64(<2 x double> [[WIDE_LOAD:%.*]])1340;1341; ARMPL-SVE-LABEL: define void @cospi_f641342; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1343; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @armpl_svcospi_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])1344;1345; ARMPL-SVE-NOPRED-LABEL: define void @cospi_f641346; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1347; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @armpl_svcospi_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))1348; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call double @cospi(double [[IN:%.*]])1349;1350 entry:1351 br label %for.body1352 1353 for.body:1354 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1355 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv1356 %in = load double, ptr %in.gep, align 81357 %call = tail call double @cospi(double %in)1358 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv1359 store double %call, ptr %out.gep, align 81360 %iv.next = add nuw nsw i64 %iv, 11361 %exitcond = icmp eq i64 %iv.next, 10001362 br i1 %exitcond, label %for.end, label %for.body1363 1364 for.end:1365 ret void1366}1367 1368define void @cospi_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {1369; LIBMVEC-NEON-LABEL: define void @cospi_f321370; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1371; LIBMVEC-NEON: [[CALL:%.*]] = tail call float @cospif(float [[IN:%.*]])1372;1373; LIBMVEC-NEON-WIDTH-2-LABEL: define void @cospi_f321374; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1375; LIBMVEC-NEON-WIDTH-2: [[CALL:%.*]] = tail call float @cospif(float [[IN:%.*]])1376;1377; LIBMVEC-SVE-LABEL: define void @cospi_f321378; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1379; LIBMVEC-SVE: [[CALL:%.*]] = tail call float @cospif(float [[IN:%.*]])1380;1381; SLEEF-NEON-LABEL: define void @cospi_f321382; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1383; SLEEF-NEON: [[TMP2:%.*]] = call <4 x float> @_ZGVnN4v_cospif(<4 x float> [[WIDE_LOAD:%.*]])1384;1385; SLEEF-SVE-LABEL: define void @cospi_f321386; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1387; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_cospif(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])1388;1389; SLEEF-SVE-NOPRED-LABEL: define void @cospi_f321390; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1391; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_cospif(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))1392; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call float @cospif(float [[IN:%.*]])1393;1394; ARMPL-NEON-LABEL: define void @cospi_f321395; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1396; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @armpl_vcospiq_f32(<4 x float> [[WIDE_LOAD:%.*]])1397;1398; ARMPL-SVE-LABEL: define void @cospi_f321399; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1400; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @armpl_svcospi_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])1401;1402; ARMPL-SVE-NOPRED-LABEL: define void @cospi_f321403; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1404; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @armpl_svcospi_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))1405; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call float @cospif(float [[IN:%.*]])1406;1407 entry:1408 br label %for.body1409 1410 for.body:1411 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1412 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv1413 %in = load float, ptr %in.gep, align 81414 %call = tail call float @cospif(float %in)1415 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv1416 store float %call, ptr %out.gep, align 41417 %iv.next = add nuw nsw i64 %iv, 11418 %exitcond = icmp eq i64 %iv.next, 10001419 br i1 %exitcond, label %for.end, label %for.body1420 1421 for.end:1422 ret void1423}1424 1425declare double @erf(double)1426declare float @erff(float)1427 1428define void @erf_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {1429; LIBMVEC-NEON-LABEL: define void @erf_f641430; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1431; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2v_erf(<2 x double> [[WIDE_LOAD:%.*]])1432;1433; LIBMVEC-NEON-WIDTH-2-LABEL: define void @erf_f641434; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1435; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2v_erf(<2 x double> [[WIDE_LOAD:%.*]])1436;1437; LIBMVEC-SVE-LABEL: define void @erf_f641438; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1439; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_erf(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])1440;1441; SLEEF-NEON-LABEL: define void @erf_f641442; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1443; SLEEF-NEON: [[TMP2:%.*]] = call <2 x double> @_ZGVnN2v_erf(<2 x double> [[WIDE_LOAD:%.*]])1444;1445; SLEEF-SVE-LABEL: define void @erf_f641446; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1447; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_erf(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])1448;1449; SLEEF-SVE-NOPRED-LABEL: define void @erf_f641450; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1451; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_erf(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))1452; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call double @erf(double [[IN:%.*]])1453;1454; ARMPL-NEON-LABEL: define void @erf_f641455; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1456; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @armpl_verfq_f64(<2 x double> [[WIDE_LOAD:%.*]])1457;1458; ARMPL-SVE-LABEL: define void @erf_f641459; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1460; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @armpl_sverf_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])1461;1462; ARMPL-SVE-NOPRED-LABEL: define void @erf_f641463; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1464; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @armpl_sverf_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))1465; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call double @erf(double [[IN:%.*]])1466;1467 entry:1468 br label %for.body1469 1470 for.body:1471 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1472 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv1473 %in = load double, ptr %in.gep, align 81474 %call = tail call double @erf(double %in)1475 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv1476 store double %call, ptr %out.gep, align 81477 %iv.next = add nuw nsw i64 %iv, 11478 %exitcond = icmp eq i64 %iv.next, 10001479 br i1 %exitcond, label %for.end, label %for.body1480 1481 for.end:1482 ret void1483}1484 1485define void @erf_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {1486; LIBMVEC-NEON-LABEL: define void @erf_f321487; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1488; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @_ZGVnN4v_erff(<4 x float> [[WIDE_LOAD:%.*]])1489;1490; LIBMVEC-NEON-WIDTH-2-LABEL: define void @erf_f321491; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1492; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x float> @_ZGVnN2v_erff(<2 x float> [[WIDE_LOAD:%.*]])1493;1494; LIBMVEC-SVE-LABEL: define void @erf_f321495; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1496; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_erff(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])1497;1498; SLEEF-NEON-LABEL: define void @erf_f321499; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1500; SLEEF-NEON: [[TMP2:%.*]] = call <4 x float> @_ZGVnN4v_erff(<4 x float> [[WIDE_LOAD:%.*]])1501;1502; SLEEF-SVE-LABEL: define void @erf_f321503; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1504; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_erff(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])1505;1506; SLEEF-SVE-NOPRED-LABEL: define void @erf_f321507; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1508; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_erff(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))1509; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call float @erff(float [[IN:%.*]])1510;1511; ARMPL-NEON-LABEL: define void @erf_f321512; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1513; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @armpl_verfq_f32(<4 x float> [[WIDE_LOAD:%.*]])1514;1515; ARMPL-SVE-LABEL: define void @erf_f321516; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1517; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @armpl_sverf_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])1518;1519; ARMPL-SVE-NOPRED-LABEL: define void @erf_f321520; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1521; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @armpl_sverf_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))1522; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call float @erff(float [[IN:%.*]])1523;1524 entry:1525 br label %for.body1526 1527 for.body:1528 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1529 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv1530 %in = load float, ptr %in.gep, align 81531 %call = tail call float @erff(float %in)1532 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv1533 store float %call, ptr %out.gep, align 41534 %iv.next = add nuw nsw i64 %iv, 11535 %exitcond = icmp eq i64 %iv.next, 10001536 br i1 %exitcond, label %for.end, label %for.body1537 1538 for.end:1539 ret void1540}1541 1542declare double @erfc(double)1543declare float @erfcf(float)1544 1545define void @erfc_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {1546; LIBMVEC-NEON-LABEL: define void @erfc_f641547; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1548; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2v_erfc(<2 x double> [[WIDE_LOAD:%.*]])1549;1550; LIBMVEC-NEON-WIDTH-2-LABEL: define void @erfc_f641551; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1552; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2v_erfc(<2 x double> [[WIDE_LOAD:%.*]])1553;1554; LIBMVEC-SVE-LABEL: define void @erfc_f641555; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1556; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_erfc(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])1557;1558; SLEEF-NEON-LABEL: define void @erfc_f641559; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1560; SLEEF-NEON: [[TMP2:%.*]] = call <2 x double> @_ZGVnN2v_erfc(<2 x double> [[WIDE_LOAD:%.*]])1561;1562; SLEEF-SVE-LABEL: define void @erfc_f641563; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1564; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_erfc(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])1565;1566; SLEEF-SVE-NOPRED-LABEL: define void @erfc_f641567; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1568; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_erfc(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))1569; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call double @erfc(double [[IN:%.*]])1570;1571; ARMPL-NEON-LABEL: define void @erfc_f641572; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1573; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @armpl_verfcq_f64(<2 x double> [[WIDE_LOAD:%.*]])1574;1575; ARMPL-SVE-LABEL: define void @erfc_f641576; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1577; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @armpl_sverfc_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])1578;1579; ARMPL-SVE-NOPRED-LABEL: define void @erfc_f641580; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1581; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @armpl_sverfc_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))1582; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call double @erfc(double [[IN:%.*]])1583;1584 entry:1585 br label %for.body1586 1587 for.body:1588 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1589 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv1590 %in = load double, ptr %in.gep, align 81591 %call = tail call double @erfc(double %in)1592 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv1593 store double %call, ptr %out.gep, align 81594 %iv.next = add nuw nsw i64 %iv, 11595 %exitcond = icmp eq i64 %iv.next, 10001596 br i1 %exitcond, label %for.end, label %for.body1597 1598 for.end:1599 ret void1600}1601 1602define void @erfc_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {1603; LIBMVEC-NEON-LABEL: define void @erfc_f321604; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1605; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @_ZGVnN4v_erfcf(<4 x float> [[WIDE_LOAD:%.*]])1606;1607; LIBMVEC-NEON-WIDTH-2-LABEL: define void @erfc_f321608; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1609; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x float> @_ZGVnN2v_erfcf(<2 x float> [[WIDE_LOAD:%.*]])1610;1611; LIBMVEC-SVE-LABEL: define void @erfc_f321612; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1613; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_erfcf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])1614;1615; SLEEF-NEON-LABEL: define void @erfc_f321616; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1617; SLEEF-NEON: [[TMP2:%.*]] = call <4 x float> @_ZGVnN4v_erfcf(<4 x float> [[WIDE_LOAD:%.*]])1618;1619; SLEEF-SVE-LABEL: define void @erfc_f321620; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1621; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_erfcf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])1622;1623; SLEEF-SVE-NOPRED-LABEL: define void @erfc_f321624; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1625; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_erfcf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))1626; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call float @erfcf(float [[IN:%.*]])1627;1628; ARMPL-NEON-LABEL: define void @erfc_f321629; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1630; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @armpl_verfcq_f32(<4 x float> [[WIDE_LOAD:%.*]])1631;1632; ARMPL-SVE-LABEL: define void @erfc_f321633; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1634; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @armpl_sverfc_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])1635;1636; ARMPL-SVE-NOPRED-LABEL: define void @erfc_f321637; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1638; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @armpl_sverfc_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))1639; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call float @erfcf(float [[IN:%.*]])1640;1641 entry:1642 br label %for.body1643 1644 for.body:1645 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1646 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv1647 %in = load float, ptr %in.gep, align 81648 %call = tail call float @erfcf(float %in)1649 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv1650 store float %call, ptr %out.gep, align 41651 %iv.next = add nuw nsw i64 %iv, 11652 %exitcond = icmp eq i64 %iv.next, 10001653 br i1 %exitcond, label %for.end, label %for.body1654 1655 for.end:1656 ret void1657}1658 1659declare double @exp(double)1660declare float @expf(float)1661 1662define void @exp_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {1663; LIBMVEC-NEON-LABEL: define void @exp_f641664; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1665; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2v_exp(<2 x double> [[WIDE_LOAD:%.*]])1666;1667; LIBMVEC-NEON-WIDTH-2-LABEL: define void @exp_f641668; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1669; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2v_exp(<2 x double> [[WIDE_LOAD:%.*]])1670;1671; LIBMVEC-SVE-LABEL: define void @exp_f641672; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1673; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_exp(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])1674;1675; SLEEF-NEON-LABEL: define void @exp_f641676; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1677; SLEEF-NEON: [[TMP2:%.*]] = call <2 x double> @_ZGVnN2v_exp(<2 x double> [[WIDE_LOAD:%.*]])1678;1679; SLEEF-SVE-LABEL: define void @exp_f641680; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1681; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_exp(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])1682;1683; SLEEF-SVE-NOPRED-LABEL: define void @exp_f641684; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1685; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_exp(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))1686; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call double @exp(double [[IN:%.*]])1687;1688; ARMPL-NEON-LABEL: define void @exp_f641689; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1690; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @armpl_vexpq_f64(<2 x double> [[WIDE_LOAD:%.*]])1691;1692; ARMPL-SVE-LABEL: define void @exp_f641693; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1694; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @armpl_svexp_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])1695;1696; ARMPL-SVE-NOPRED-LABEL: define void @exp_f641697; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1698; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @armpl_svexp_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))1699; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call double @exp(double [[IN:%.*]])1700;1701 entry:1702 br label %for.body1703 1704 for.body:1705 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1706 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv1707 %in = load double, ptr %in.gep, align 81708 %call = tail call double @exp(double %in)1709 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv1710 store double %call, ptr %out.gep, align 81711 %iv.next = add nuw nsw i64 %iv, 11712 %exitcond = icmp eq i64 %iv.next, 10001713 br i1 %exitcond, label %for.end, label %for.body1714 1715 for.end:1716 ret void1717}1718 1719define void @exp_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {1720; LIBMVEC-NEON-LABEL: define void @exp_f321721; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1722; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @_ZGVnN4v_expf(<4 x float> [[WIDE_LOAD:%.*]])1723;1724; LIBMVEC-NEON-WIDTH-2-LABEL: define void @exp_f321725; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1726; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x float> @_ZGVnN2v_expf(<2 x float> [[WIDE_LOAD:%.*]])1727;1728; LIBMVEC-SVE-LABEL: define void @exp_f321729; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1730; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_expf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])1731;1732; SLEEF-NEON-LABEL: define void @exp_f321733; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1734; SLEEF-NEON: [[TMP2:%.*]] = call <4 x float> @_ZGVnN4v_expf(<4 x float> [[WIDE_LOAD:%.*]])1735;1736; SLEEF-SVE-LABEL: define void @exp_f321737; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1738; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_expf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])1739;1740; SLEEF-SVE-NOPRED-LABEL: define void @exp_f321741; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1742; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_expf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))1743; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call float @expf(float [[IN:%.*]])1744;1745; ARMPL-NEON-LABEL: define void @exp_f321746; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1747; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @armpl_vexpq_f32(<4 x float> [[WIDE_LOAD:%.*]])1748;1749; ARMPL-SVE-LABEL: define void @exp_f321750; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1751; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @armpl_svexp_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])1752;1753; ARMPL-SVE-NOPRED-LABEL: define void @exp_f321754; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1755; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @armpl_svexp_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))1756; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call float @expf(float [[IN:%.*]])1757;1758 entry:1759 br label %for.body1760 1761 for.body:1762 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1763 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv1764 %in = load float, ptr %in.gep, align 81765 %call = tail call float @expf(float %in)1766 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv1767 store float %call, ptr %out.gep, align 41768 %iv.next = add nuw nsw i64 %iv, 11769 %exitcond = icmp eq i64 %iv.next, 10001770 br i1 %exitcond, label %for.end, label %for.body1771 1772 for.end:1773 ret void1774}1775 1776declare double @exp10(double)1777declare float @exp10f(float)1778 1779define void @exp10_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {1780; LIBMVEC-NEON-LABEL: define void @exp10_f641781; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1782; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2v_exp10(<2 x double> [[WIDE_LOAD:%.*]])1783;1784; LIBMVEC-NEON-WIDTH-2-LABEL: define void @exp10_f641785; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1786; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2v_exp10(<2 x double> [[WIDE_LOAD:%.*]])1787;1788; LIBMVEC-SVE-LABEL: define void @exp10_f641789; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1790; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_exp10(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])1791;1792; SLEEF-NEON-LABEL: define void @exp10_f641793; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1794; SLEEF-NEON: [[TMP2:%.*]] = call <2 x double> @_ZGVnN2v_exp10(<2 x double> [[WIDE_LOAD:%.*]])1795;1796; SLEEF-SVE-LABEL: define void @exp10_f641797; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1798; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_exp10(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])1799;1800; SLEEF-SVE-NOPRED-LABEL: define void @exp10_f641801; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1802; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_exp10(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))1803; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call double @exp10(double [[IN:%.*]])1804;1805; ARMPL-NEON-LABEL: define void @exp10_f641806; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1807; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @armpl_vexp10q_f64(<2 x double> [[WIDE_LOAD:%.*]])1808;1809; ARMPL-SVE-LABEL: define void @exp10_f641810; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1811; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @armpl_svexp10_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])1812;1813; ARMPL-SVE-NOPRED-LABEL: define void @exp10_f641814; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1815; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @armpl_svexp10_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))1816; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call double @exp10(double [[IN:%.*]])1817;1818 entry:1819 br label %for.body1820 1821 for.body:1822 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1823 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv1824 %in = load double, ptr %in.gep, align 81825 %call = tail call double @exp10(double %in)1826 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv1827 store double %call, ptr %out.gep, align 81828 %iv.next = add nuw nsw i64 %iv, 11829 %exitcond = icmp eq i64 %iv.next, 10001830 br i1 %exitcond, label %for.end, label %for.body1831 1832 for.end:1833 ret void1834}1835 1836define void @exp10_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {1837; LIBMVEC-NEON-LABEL: define void @exp10_f321838; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1839; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @_ZGVnN4v_exp10f(<4 x float> [[WIDE_LOAD:%.*]])1840;1841; LIBMVEC-NEON-WIDTH-2-LABEL: define void @exp10_f321842; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1843; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x float> @_ZGVnN2v_exp10f(<2 x float> [[WIDE_LOAD:%.*]])1844;1845; LIBMVEC-SVE-LABEL: define void @exp10_f321846; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1847; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_exp10f(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])1848;1849; SLEEF-NEON-LABEL: define void @exp10_f321850; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1851; SLEEF-NEON: [[TMP2:%.*]] = call <4 x float> @_ZGVnN4v_exp10f(<4 x float> [[WIDE_LOAD:%.*]])1852;1853; SLEEF-SVE-LABEL: define void @exp10_f321854; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1855; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_exp10f(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])1856;1857; SLEEF-SVE-NOPRED-LABEL: define void @exp10_f321858; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1859; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_exp10f(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))1860; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call float @exp10f(float [[IN:%.*]])1861;1862; ARMPL-NEON-LABEL: define void @exp10_f321863; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1864; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @armpl_vexp10q_f32(<4 x float> [[WIDE_LOAD:%.*]])1865;1866; ARMPL-SVE-LABEL: define void @exp10_f321867; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1868; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @armpl_svexp10_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])1869;1870; ARMPL-SVE-NOPRED-LABEL: define void @exp10_f321871; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1872; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @armpl_svexp10_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))1873; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call float @exp10f(float [[IN:%.*]])1874;1875 entry:1876 br label %for.body1877 1878 for.body:1879 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1880 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv1881 %in = load float, ptr %in.gep, align 81882 %call = tail call float @exp10f(float %in)1883 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv1884 store float %call, ptr %out.gep, align 41885 %iv.next = add nuw nsw i64 %iv, 11886 %exitcond = icmp eq i64 %iv.next, 10001887 br i1 %exitcond, label %for.end, label %for.body1888 1889 for.end:1890 ret void1891}1892 1893declare double @exp2(double)1894declare float @exp2f(float)1895 1896define void @exp2_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {1897; LIBMVEC-NEON-LABEL: define void @exp2_f641898; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1899; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2v_exp2(<2 x double> [[WIDE_LOAD:%.*]])1900;1901; LIBMVEC-NEON-WIDTH-2-LABEL: define void @exp2_f641902; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1903; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2v_exp2(<2 x double> [[WIDE_LOAD:%.*]])1904;1905; LIBMVEC-SVE-LABEL: define void @exp2_f641906; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1907; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_exp2(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])1908;1909; SLEEF-NEON-LABEL: define void @exp2_f641910; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1911; SLEEF-NEON: [[TMP2:%.*]] = call <2 x double> @_ZGVnN2v_exp2(<2 x double> [[WIDE_LOAD:%.*]])1912;1913; SLEEF-SVE-LABEL: define void @exp2_f641914; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1915; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_exp2(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])1916;1917; SLEEF-SVE-NOPRED-LABEL: define void @exp2_f641918; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1919; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_exp2(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))1920; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call double @exp2(double [[IN:%.*]])1921;1922; ARMPL-NEON-LABEL: define void @exp2_f641923; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1924; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @armpl_vexp2q_f64(<2 x double> [[WIDE_LOAD:%.*]])1925;1926; ARMPL-SVE-LABEL: define void @exp2_f641927; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1928; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @armpl_svexp2_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])1929;1930; ARMPL-SVE-NOPRED-LABEL: define void @exp2_f641931; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1932; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @armpl_svexp2_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))1933; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call double @exp2(double [[IN:%.*]])1934;1935 entry:1936 br label %for.body1937 1938 for.body:1939 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1940 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv1941 %in = load double, ptr %in.gep, align 81942 %call = tail call double @exp2(double %in)1943 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv1944 store double %call, ptr %out.gep, align 81945 %iv.next = add nuw nsw i64 %iv, 11946 %exitcond = icmp eq i64 %iv.next, 10001947 br i1 %exitcond, label %for.end, label %for.body1948 1949 for.end:1950 ret void1951}1952 1953define void @exp2_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {1954; LIBMVEC-NEON-LABEL: define void @exp2_f321955; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1956; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @_ZGVnN4v_exp2f(<4 x float> [[WIDE_LOAD:%.*]])1957;1958; LIBMVEC-NEON-WIDTH-2-LABEL: define void @exp2_f321959; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1960; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x float> @_ZGVnN2v_exp2f(<2 x float> [[WIDE_LOAD:%.*]])1961;1962; LIBMVEC-SVE-LABEL: define void @exp2_f321963; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1964; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_exp2f(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])1965;1966; SLEEF-NEON-LABEL: define void @exp2_f321967; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1968; SLEEF-NEON: [[TMP2:%.*]] = call <4 x float> @_ZGVnN4v_exp2f(<4 x float> [[WIDE_LOAD:%.*]])1969;1970; SLEEF-SVE-LABEL: define void @exp2_f321971; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1972; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_exp2f(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])1973;1974; SLEEF-SVE-NOPRED-LABEL: define void @exp2_f321975; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1976; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_exp2f(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))1977; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call float @exp2f(float [[IN:%.*]])1978;1979; ARMPL-NEON-LABEL: define void @exp2_f321980; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1981; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @armpl_vexp2q_f32(<4 x float> [[WIDE_LOAD:%.*]])1982;1983; ARMPL-SVE-LABEL: define void @exp2_f321984; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1985; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @armpl_svexp2_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])1986;1987; ARMPL-SVE-NOPRED-LABEL: define void @exp2_f321988; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {1989; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @armpl_svexp2_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))1990; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call float @exp2f(float [[IN:%.*]])1991;1992 entry:1993 br label %for.body1994 1995 for.body:1996 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]1997 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv1998 %in = load float, ptr %in.gep, align 81999 %call = tail call float @exp2f(float %in)2000 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv2001 store float %call, ptr %out.gep, align 42002 %iv.next = add nuw nsw i64 %iv, 12003 %exitcond = icmp eq i64 %iv.next, 10002004 br i1 %exitcond, label %for.end, label %for.body2005 2006 for.end:2007 ret void2008}2009 2010declare double @expm1(double)2011declare float @expm1f(float)2012 2013define void @expm1_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {2014; LIBMVEC-NEON-LABEL: define void @expm1_f642015; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2016; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2v_expm1(<2 x double> [[WIDE_LOAD:%.*]])2017;2018; LIBMVEC-NEON-WIDTH-2-LABEL: define void @expm1_f642019; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2020; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2v_expm1(<2 x double> [[WIDE_LOAD:%.*]])2021;2022; LIBMVEC-SVE-LABEL: define void @expm1_f642023; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2024; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_expm1(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])2025;2026; SLEEF-NEON-LABEL: define void @expm1_f642027; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2028; SLEEF-NEON: [[TMP2:%.*]] = call <2 x double> @_ZGVnN2v_expm1(<2 x double> [[WIDE_LOAD:%.*]])2029;2030; SLEEF-SVE-LABEL: define void @expm1_f642031; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2032; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_expm1(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])2033;2034; SLEEF-SVE-NOPRED-LABEL: define void @expm1_f642035; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2036; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_expm1(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))2037; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call double @expm1(double [[IN:%.*]])2038;2039; ARMPL-NEON-LABEL: define void @expm1_f642040; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2041; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @armpl_vexpm1q_f64(<2 x double> [[WIDE_LOAD:%.*]])2042;2043; ARMPL-SVE-LABEL: define void @expm1_f642044; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2045; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @armpl_svexpm1_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])2046;2047; ARMPL-SVE-NOPRED-LABEL: define void @expm1_f642048; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2049; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @armpl_svexpm1_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))2050; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call double @expm1(double [[IN:%.*]])2051;2052 entry:2053 br label %for.body2054 2055 for.body:2056 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]2057 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv2058 %in = load double, ptr %in.gep, align 82059 %call = tail call double @expm1(double %in)2060 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv2061 store double %call, ptr %out.gep, align 82062 %iv.next = add nuw nsw i64 %iv, 12063 %exitcond = icmp eq i64 %iv.next, 10002064 br i1 %exitcond, label %for.end, label %for.body2065 2066 for.end:2067 ret void2068}2069 2070define void @expm1_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {2071; LIBMVEC-NEON-LABEL: define void @expm1_f322072; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2073; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @_ZGVnN4v_expm1f(<4 x float> [[WIDE_LOAD:%.*]])2074;2075; LIBMVEC-NEON-WIDTH-2-LABEL: define void @expm1_f322076; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2077; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x float> @_ZGVnN2v_expm1f(<2 x float> [[WIDE_LOAD:%.*]])2078;2079; LIBMVEC-SVE-LABEL: define void @expm1_f322080; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2081; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_expm1f(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])2082;2083; SLEEF-NEON-LABEL: define void @expm1_f322084; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2085; SLEEF-NEON: [[TMP2:%.*]] = call <4 x float> @_ZGVnN4v_expm1f(<4 x float> [[WIDE_LOAD:%.*]])2086;2087; SLEEF-SVE-LABEL: define void @expm1_f322088; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2089; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_expm1f(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])2090;2091; SLEEF-SVE-NOPRED-LABEL: define void @expm1_f322092; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2093; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_expm1f(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))2094; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call float @expm1f(float [[IN:%.*]])2095;2096; ARMPL-NEON-LABEL: define void @expm1_f322097; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2098; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @armpl_vexpm1q_f32(<4 x float> [[WIDE_LOAD:%.*]])2099;2100; ARMPL-SVE-LABEL: define void @expm1_f322101; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2102; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @armpl_svexpm1_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])2103;2104; ARMPL-SVE-NOPRED-LABEL: define void @expm1_f322105; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2106; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @armpl_svexpm1_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))2107; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call float @expm1f(float [[IN:%.*]])2108;2109 entry:2110 br label %for.body2111 2112 for.body:2113 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]2114 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv2115 %in = load float, ptr %in.gep, align 82116 %call = tail call float @expm1f(float %in)2117 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv2118 store float %call, ptr %out.gep, align 42119 %iv.next = add nuw nsw i64 %iv, 12120 %exitcond = icmp eq i64 %iv.next, 10002121 br i1 %exitcond, label %for.end, label %for.body2122 2123 for.end:2124 ret void2125}2126 2127declare double @fdim(double, double)2128declare float @fdimf(float, float)2129 2130define void @fdim_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {2131; LIBMVEC-NEON-LABEL: define void @fdim_f642132; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2133; LIBMVEC-NEON: [[CALL:%.*]] = tail call double @fdim(double [[IN:%.*]], double [[IN]])2134;2135; LIBMVEC-NEON-WIDTH-2-LABEL: define void @fdim_f642136; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2137; LIBMVEC-NEON-WIDTH-2: [[CALL:%.*]] = tail call double @fdim(double [[IN:%.*]], double [[IN]])2138;2139; LIBMVEC-SVE-LABEL: define void @fdim_f642140; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2141; LIBMVEC-SVE: [[CALL:%.*]] = tail call double @fdim(double [[IN:%.*]], double [[IN]])2142;2143; SLEEF-NEON-LABEL: define void @fdim_f642144; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2145; SLEEF-NEON: [[TMP2:%.*]] = call <2 x double> @_ZGVnN2vv_fdim(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])2146;2147; SLEEF-SVE-LABEL: define void @fdim_f642148; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2149; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxvv_fdim(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x double> [[WIDE_MASKED_LOAD]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])2150;2151; SLEEF-SVE-NOPRED-LABEL: define void @fdim_f642152; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2153; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @_ZGVsMxvv_fdim(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]], <vscale x 2 x i1> splat (i1 true))2154; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call double @fdim(double [[IN:%.*]], double [[IN]])2155;2156; ARMPL-NEON-LABEL: define void @fdim_f642157; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2158; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @armpl_vfdimq_f64(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])2159;2160; ARMPL-SVE-LABEL: define void @fdim_f642161; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2162; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @armpl_svfdim_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x double> [[WIDE_MASKED_LOAD]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])2163;2164; ARMPL-SVE-NOPRED-LABEL: define void @fdim_f642165; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2166; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @armpl_svfdim_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]], <vscale x 2 x i1> splat (i1 true))2167; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call double @fdim(double [[IN:%.*]], double [[IN]])2168;2169 entry:2170 br label %for.body2171 2172 for.body:2173 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]2174 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv2175 %in = load double, ptr %in.gep, align 82176 %call = tail call double @fdim(double %in, double %in)2177 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv2178 store double %call, ptr %out.gep, align 82179 %iv.next = add nuw nsw i64 %iv, 12180 %exitcond = icmp eq i64 %iv.next, 10002181 br i1 %exitcond, label %for.end, label %for.body2182 2183 for.end:2184 ret void2185}2186 2187define void @fdim_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {2188; LIBMVEC-NEON-LABEL: define void @fdim_f322189; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2190; LIBMVEC-NEON: [[CALL:%.*]] = tail call float @fdimf(float [[IN:%.*]], float [[IN]])2191;2192; LIBMVEC-NEON-WIDTH-2-LABEL: define void @fdim_f322193; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2194; LIBMVEC-NEON-WIDTH-2: [[CALL:%.*]] = tail call float @fdimf(float [[IN:%.*]], float [[IN]])2195;2196; LIBMVEC-SVE-LABEL: define void @fdim_f322197; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2198; LIBMVEC-SVE: [[CALL:%.*]] = tail call float @fdimf(float [[IN:%.*]], float [[IN]])2199;2200; SLEEF-NEON-LABEL: define void @fdim_f322201; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2202; SLEEF-NEON: [[TMP2:%.*]] = call <4 x float> @_ZGVnN4vv_fdimf(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])2203;2204; SLEEF-SVE-LABEL: define void @fdim_f322205; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2206; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxvv_fdimf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x float> [[WIDE_MASKED_LOAD]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])2207;2208; SLEEF-SVE-NOPRED-LABEL: define void @fdim_f322209; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2210; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @_ZGVsMxvv_fdimf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]], <vscale x 4 x i1> splat (i1 true))2211; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call float @fdimf(float [[IN:%.*]], float [[IN]])2212;2213; ARMPL-NEON-LABEL: define void @fdim_f322214; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2215; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @armpl_vfdimq_f32(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])2216;2217; ARMPL-SVE-LABEL: define void @fdim_f322218; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2219; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @armpl_svfdim_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x float> [[WIDE_MASKED_LOAD]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])2220;2221; ARMPL-SVE-NOPRED-LABEL: define void @fdim_f322222; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2223; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @armpl_svfdim_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]], <vscale x 4 x i1> splat (i1 true))2224; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call float @fdimf(float [[IN:%.*]], float [[IN]])2225;2226 entry:2227 br label %for.body2228 2229 for.body:2230 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]2231 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv2232 %in = load float, ptr %in.gep, align 82233 %call = tail call float @fdimf(float %in, float %in)2234 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv2235 store float %call, ptr %out.gep, align 42236 %iv.next = add nuw nsw i64 %iv, 12237 %exitcond = icmp eq i64 %iv.next, 10002238 br i1 %exitcond, label %for.end, label %for.body2239 2240 for.end:2241 ret void2242}2243 2244declare double @fma(double, double, double)2245declare float @fmaf(float, float, float)2246 2247define void @fma_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {2248; LIBMVEC-NEON-LABEL: define void @fma_f642249; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2250; LIBMVEC-NEON: [[CALL:%.*]] = tail call double @fma(double [[IN:%.*]], double [[IN]], double [[IN]])2251;2252; LIBMVEC-NEON-WIDTH-2-LABEL: define void @fma_f642253; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2254; LIBMVEC-NEON-WIDTH-2: [[CALL:%.*]] = tail call double @fma(double [[IN:%.*]], double [[IN]], double [[IN]])2255;2256; LIBMVEC-SVE-LABEL: define void @fma_f642257; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2258; LIBMVEC-SVE: [[CALL:%.*]] = tail call double @fma(double [[IN:%.*]], double [[IN]], double [[IN]])2259;2260; SLEEF-NEON-LABEL: define void @fma_f642261; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2262; SLEEF-NEON: [[TMP2:%.*]] = call <2 x double> @_ZGVnN2vvv_fma(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]], <2 x double> [[WIDE_LOAD]])2263;2264; SLEEF-SVE-LABEL: define void @fma_f642265; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2266; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxvvv_fma(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x double> [[WIDE_MASKED_LOAD]], <vscale x 2 x double> [[WIDE_MASKED_LOAD]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])2267;2268; SLEEF-SVE-NOPRED-LABEL: define void @fma_f642269; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2270; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @_ZGVsMxvvv_fma(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]], <vscale x 2 x double> [[WIDE_LOAD]], <vscale x 2 x i1> splat (i1 true))2271; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call double @fma(double [[IN:%.*]], double [[IN]], double [[IN]])2272;2273; ARMPL-NEON-LABEL: define void @fma_f642274; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2275; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @armpl_vfmaq_f64(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]], <2 x double> [[WIDE_LOAD]])2276;2277; ARMPL-SVE-LABEL: define void @fma_f642278; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2279; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @armpl_svfma_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x double> [[WIDE_MASKED_LOAD]], <vscale x 2 x double> [[WIDE_MASKED_LOAD]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])2280;2281; ARMPL-SVE-NOPRED-LABEL: define void @fma_f642282; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2283; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @armpl_svfma_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]], <vscale x 2 x double> [[WIDE_LOAD]], <vscale x 2 x i1> splat (i1 true))2284; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call double @fma(double [[IN:%.*]], double [[IN]], double [[IN]])2285;2286 entry:2287 br label %for.body2288 2289 for.body:2290 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]2291 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv2292 %in = load double, ptr %in.gep, align 82293 %call = tail call double @fma(double %in, double %in, double %in)2294 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv2295 store double %call, ptr %out.gep, align 82296 %iv.next = add nuw nsw i64 %iv, 12297 %exitcond = icmp eq i64 %iv.next, 10002298 br i1 %exitcond, label %for.end, label %for.body2299 2300 for.end:2301 ret void2302}2303 2304define void @fma_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {2305; LIBMVEC-NEON-LABEL: define void @fma_f322306; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2307; LIBMVEC-NEON: [[CALL:%.*]] = tail call float @fmaf(float [[IN:%.*]], float [[IN]], float [[IN]])2308;2309; LIBMVEC-NEON-WIDTH-2-LABEL: define void @fma_f322310; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2311; LIBMVEC-NEON-WIDTH-2: [[CALL:%.*]] = tail call float @fmaf(float [[IN:%.*]], float [[IN]], float [[IN]])2312;2313; LIBMVEC-SVE-LABEL: define void @fma_f322314; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2315; LIBMVEC-SVE: [[CALL:%.*]] = tail call float @fmaf(float [[IN:%.*]], float [[IN]], float [[IN]])2316;2317; SLEEF-NEON-LABEL: define void @fma_f322318; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2319; SLEEF-NEON: [[TMP2:%.*]] = call <4 x float> @_ZGVnN4vvv_fmaf(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]], <4 x float> [[WIDE_LOAD]])2320;2321; SLEEF-SVE-LABEL: define void @fma_f322322; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2323; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxvvv_fmaf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x float> [[WIDE_MASKED_LOAD]], <vscale x 4 x float> [[WIDE_MASKED_LOAD]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])2324;2325; SLEEF-SVE-NOPRED-LABEL: define void @fma_f322326; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2327; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @_ZGVsMxvvv_fmaf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]], <vscale x 4 x float> [[WIDE_LOAD]], <vscale x 4 x i1> splat (i1 true))2328; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call float @fmaf(float [[IN:%.*]], float [[IN]], float [[IN]])2329;2330; ARMPL-NEON-LABEL: define void @fma_f322331; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2332; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @armpl_vfmaq_f32(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]], <4 x float> [[WIDE_LOAD]])2333;2334; ARMPL-SVE-LABEL: define void @fma_f322335; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2336; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @armpl_svfma_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x float> [[WIDE_MASKED_LOAD]], <vscale x 4 x float> [[WIDE_MASKED_LOAD]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])2337;2338; ARMPL-SVE-NOPRED-LABEL: define void @fma_f322339; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2340; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @armpl_svfma_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]], <vscale x 4 x float> [[WIDE_LOAD]], <vscale x 4 x i1> splat (i1 true))2341; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call float @fmaf(float [[IN:%.*]], float [[IN]], float [[IN]])2342;2343 entry:2344 br label %for.body2345 2346 for.body:2347 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]2348 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv2349 %in = load float, ptr %in.gep, align 82350 %call = tail call float @fmaf(float %in, float %in, float %in)2351 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv2352 store float %call, ptr %out.gep, align 42353 %iv.next = add nuw nsw i64 %iv, 12354 %exitcond = icmp eq i64 %iv.next, 10002355 br i1 %exitcond, label %for.end, label %for.body2356 2357 for.end:2358 ret void2359}2360 2361declare double @fmax(double, double)2362declare float @fmaxf(float, float)2363 2364define void @fmax_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {2365; LIBMVEC-NEON-LABEL: define void @fmax_f642366; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2367; LIBMVEC-NEON: [[CALL:%.*]] = tail call double @fmax(double [[IN:%.*]], double [[IN]])2368;2369; LIBMVEC-NEON-WIDTH-2-LABEL: define void @fmax_f642370; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2371; LIBMVEC-NEON-WIDTH-2: [[CALL:%.*]] = tail call double @fmax(double [[IN:%.*]], double [[IN]])2372;2373; LIBMVEC-SVE-LABEL: define void @fmax_f642374; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2375; LIBMVEC-SVE: [[CALL:%.*]] = tail call double @fmax(double [[IN:%.*]], double [[IN]])2376;2377; SLEEF-NEON-LABEL: define void @fmax_f642378; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2379; SLEEF-NEON: [[TMP2:%.*]] = call <2 x double> @_ZGVnN2vv_fmax(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])2380;2381; SLEEF-SVE-LABEL: define void @fmax_f642382; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2383; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxvv_fmax(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x double> [[WIDE_MASKED_LOAD]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])2384;2385; SLEEF-SVE-NOPRED-LABEL: define void @fmax_f642386; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2387; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @_ZGVsMxvv_fmax(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]], <vscale x 2 x i1> splat (i1 true))2388; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call double @fmax(double [[IN:%.*]], double [[IN]])2389;2390; ARMPL-NEON-LABEL: define void @fmax_f642391; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2392; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @armpl_vfmaxq_f64(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])2393;2394; ARMPL-SVE-LABEL: define void @fmax_f642395; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2396; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @armpl_svfmax_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x double> [[WIDE_MASKED_LOAD]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])2397;2398; ARMPL-SVE-NOPRED-LABEL: define void @fmax_f642399; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2400; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @armpl_svfmax_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]], <vscale x 2 x i1> splat (i1 true))2401; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call double @fmax(double [[IN:%.*]], double [[IN]])2402;2403 entry:2404 br label %for.body2405 2406 for.body:2407 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]2408 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv2409 %in = load double, ptr %in.gep, align 82410 %call = tail call double @fmax(double %in, double %in)2411 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv2412 store double %call, ptr %out.gep, align 82413 %iv.next = add nuw nsw i64 %iv, 12414 %exitcond = icmp eq i64 %iv.next, 10002415 br i1 %exitcond, label %for.end, label %for.body2416 2417 for.end:2418 ret void2419}2420 2421define void @fmax_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {2422; LIBMVEC-NEON-LABEL: define void @fmax_f322423; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2424; LIBMVEC-NEON: [[CALL:%.*]] = tail call float @fmaxf(float [[IN:%.*]], float [[IN]])2425;2426; LIBMVEC-NEON-WIDTH-2-LABEL: define void @fmax_f322427; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2428; LIBMVEC-NEON-WIDTH-2: [[CALL:%.*]] = tail call float @fmaxf(float [[IN:%.*]], float [[IN]])2429;2430; LIBMVEC-SVE-LABEL: define void @fmax_f322431; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2432; LIBMVEC-SVE: [[CALL:%.*]] = tail call float @fmaxf(float [[IN:%.*]], float [[IN]])2433;2434; SLEEF-NEON-LABEL: define void @fmax_f322435; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2436; SLEEF-NEON: [[TMP2:%.*]] = call <4 x float> @_ZGVnN4vv_fmaxf(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])2437;2438; SLEEF-SVE-LABEL: define void @fmax_f322439; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2440; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxvv_fmaxf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x float> [[WIDE_MASKED_LOAD]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])2441;2442; SLEEF-SVE-NOPRED-LABEL: define void @fmax_f322443; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2444; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @_ZGVsMxvv_fmaxf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]], <vscale x 4 x i1> splat (i1 true))2445; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call float @fmaxf(float [[IN:%.*]], float [[IN]])2446;2447; ARMPL-NEON-LABEL: define void @fmax_f322448; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2449; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @armpl_vfmaxq_f32(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])2450;2451; ARMPL-SVE-LABEL: define void @fmax_f322452; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2453; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @armpl_svfmax_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x float> [[WIDE_MASKED_LOAD]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])2454;2455; ARMPL-SVE-NOPRED-LABEL: define void @fmax_f322456; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2457; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @armpl_svfmax_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]], <vscale x 4 x i1> splat (i1 true))2458; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call float @fmaxf(float [[IN:%.*]], float [[IN]])2459;2460 entry:2461 br label %for.body2462 2463 for.body:2464 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]2465 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv2466 %in = load float, ptr %in.gep, align 82467 %call = tail call float @fmaxf(float %in, float %in)2468 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv2469 store float %call, ptr %out.gep, align 42470 %iv.next = add nuw nsw i64 %iv, 12471 %exitcond = icmp eq i64 %iv.next, 10002472 br i1 %exitcond, label %for.end, label %for.body2473 2474 for.end:2475 ret void2476}2477 2478declare double @fmin(double, double)2479declare float @fminf(float, float)2480 2481define void @fmin_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {2482; LIBMVEC-NEON-LABEL: define void @fmin_f642483; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2484; LIBMVEC-NEON: [[CALL:%.*]] = tail call double @fmin(double [[IN:%.*]], double [[IN]])2485;2486; LIBMVEC-NEON-WIDTH-2-LABEL: define void @fmin_f642487; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2488; LIBMVEC-NEON-WIDTH-2: [[CALL:%.*]] = tail call double @fmin(double [[IN:%.*]], double [[IN]])2489;2490; LIBMVEC-SVE-LABEL: define void @fmin_f642491; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2492; LIBMVEC-SVE: [[CALL:%.*]] = tail call double @fmin(double [[IN:%.*]], double [[IN]])2493;2494; SLEEF-NEON-LABEL: define void @fmin_f642495; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2496; SLEEF-NEON: [[TMP2:%.*]] = call <2 x double> @_ZGVnN2vv_fmin(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])2497;2498; SLEEF-SVE-LABEL: define void @fmin_f642499; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2500; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxvv_fmin(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x double> [[WIDE_MASKED_LOAD]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])2501;2502; SLEEF-SVE-NOPRED-LABEL: define void @fmin_f642503; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2504; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @_ZGVsMxvv_fmin(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]], <vscale x 2 x i1> splat (i1 true))2505; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call double @fmin(double [[IN:%.*]], double [[IN]])2506;2507; ARMPL-NEON-LABEL: define void @fmin_f642508; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2509; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @armpl_vfminq_f64(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])2510;2511; ARMPL-SVE-LABEL: define void @fmin_f642512; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2513; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @armpl_svfmin_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x double> [[WIDE_MASKED_LOAD]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])2514;2515; ARMPL-SVE-NOPRED-LABEL: define void @fmin_f642516; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2517; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @armpl_svfmin_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]], <vscale x 2 x i1> splat (i1 true))2518; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call double @fmin(double [[IN:%.*]], double [[IN]])2519;2520 entry:2521 br label %for.body2522 2523 for.body:2524 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]2525 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv2526 %in = load double, ptr %in.gep, align 82527 %call = tail call double @fmin(double %in, double %in)2528 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv2529 store double %call, ptr %out.gep, align 82530 %iv.next = add nuw nsw i64 %iv, 12531 %exitcond = icmp eq i64 %iv.next, 10002532 br i1 %exitcond, label %for.end, label %for.body2533 2534 for.end:2535 ret void2536}2537 2538define void @fmin_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {2539; LIBMVEC-NEON-LABEL: define void @fmin_f322540; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2541; LIBMVEC-NEON: [[CALL:%.*]] = tail call float @fminf(float [[IN:%.*]], float [[IN]])2542;2543; LIBMVEC-NEON-WIDTH-2-LABEL: define void @fmin_f322544; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2545; LIBMVEC-NEON-WIDTH-2: [[CALL:%.*]] = tail call float @fminf(float [[IN:%.*]], float [[IN]])2546;2547; LIBMVEC-SVE-LABEL: define void @fmin_f322548; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2549; LIBMVEC-SVE: [[CALL:%.*]] = tail call float @fminf(float [[IN:%.*]], float [[IN]])2550;2551; SLEEF-NEON-LABEL: define void @fmin_f322552; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2553; SLEEF-NEON: [[TMP2:%.*]] = call <4 x float> @_ZGVnN4vv_fminf(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])2554;2555; SLEEF-SVE-LABEL: define void @fmin_f322556; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2557; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxvv_fminf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x float> [[WIDE_MASKED_LOAD]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])2558;2559; SLEEF-SVE-NOPRED-LABEL: define void @fmin_f322560; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2561; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @_ZGVsMxvv_fminf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]], <vscale x 4 x i1> splat (i1 true))2562; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call float @fminf(float [[IN:%.*]], float [[IN]])2563;2564; ARMPL-NEON-LABEL: define void @fmin_f322565; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2566; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @armpl_vfminq_f32(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])2567;2568; ARMPL-SVE-LABEL: define void @fmin_f322569; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2570; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @armpl_svfmin_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x float> [[WIDE_MASKED_LOAD]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])2571;2572; ARMPL-SVE-NOPRED-LABEL: define void @fmin_f322573; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2574; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @armpl_svfmin_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]], <vscale x 4 x i1> splat (i1 true))2575; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call float @fminf(float [[IN:%.*]], float [[IN]])2576;2577 entry:2578 br label %for.body2579 2580 for.body:2581 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]2582 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv2583 %in = load float, ptr %in.gep, align 82584 %call = tail call float @fminf(float %in, float %in)2585 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv2586 store float %call, ptr %out.gep, align 42587 %iv.next = add nuw nsw i64 %iv, 12588 %exitcond = icmp eq i64 %iv.next, 10002589 br i1 %exitcond, label %for.end, label %for.body2590 2591 for.end:2592 ret void2593}2594 2595declare double @fmod(double, double)2596declare float @fmodf(float, float)2597 2598define void @fmod_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {2599; LIBMVEC-NEON-LABEL: define void @fmod_f642600; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2601; LIBMVEC-NEON: [[CALL:%.*]] = tail call double @fmod(double [[IN:%.*]], double [[IN]])2602;2603; LIBMVEC-NEON-WIDTH-2-LABEL: define void @fmod_f642604; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2605; LIBMVEC-NEON-WIDTH-2: [[CALL:%.*]] = tail call double @fmod(double [[IN:%.*]], double [[IN]])2606;2607; LIBMVEC-SVE-LABEL: define void @fmod_f642608; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2609; LIBMVEC-SVE: [[CALL:%.*]] = tail call double @fmod(double [[IN:%.*]], double [[IN]])2610;2611; SLEEF-NEON-LABEL: define void @fmod_f642612; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2613; SLEEF-NEON: [[TMP2:%.*]] = call <2 x double> @_ZGVnN2vv_fmod(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])2614;2615; SLEEF-SVE-LABEL: define void @fmod_f642616; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2617; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxvv_fmod(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x double> [[WIDE_MASKED_LOAD]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])2618;2619; SLEEF-SVE-NOPRED-LABEL: define void @fmod_f642620; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2621; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @_ZGVsMxvv_fmod(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]], <vscale x 2 x i1> splat (i1 true))2622; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call double @fmod(double [[IN:%.*]], double [[IN]])2623;2624; ARMPL-NEON-LABEL: define void @fmod_f642625; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2626; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @armpl_vfmodq_f64(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])2627;2628; ARMPL-SVE-LABEL: define void @fmod_f642629; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2630; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @armpl_svfmod_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x double> [[WIDE_MASKED_LOAD]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])2631;2632; ARMPL-SVE-NOPRED-LABEL: define void @fmod_f642633; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2634; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @armpl_svfmod_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]], <vscale x 2 x i1> splat (i1 true))2635; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call double @fmod(double [[IN:%.*]], double [[IN]])2636;2637 entry:2638 br label %for.body2639 2640 for.body:2641 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]2642 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv2643 %in = load double, ptr %in.gep, align 82644 %call = tail call double @fmod(double %in, double %in)2645 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv2646 store double %call, ptr %out.gep, align 82647 %iv.next = add nuw nsw i64 %iv, 12648 %exitcond = icmp eq i64 %iv.next, 10002649 br i1 %exitcond, label %for.end, label %for.body2650 2651 for.end:2652 ret void2653}2654 2655define void @fmod_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {2656; LIBMVEC-NEON-LABEL: define void @fmod_f322657; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2658; LIBMVEC-NEON: [[CALL:%.*]] = tail call float @fmodf(float [[IN:%.*]], float [[IN]])2659;2660; LIBMVEC-NEON-WIDTH-2-LABEL: define void @fmod_f322661; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2662; LIBMVEC-NEON-WIDTH-2: [[CALL:%.*]] = tail call float @fmodf(float [[IN:%.*]], float [[IN]])2663;2664; LIBMVEC-SVE-LABEL: define void @fmod_f322665; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2666; LIBMVEC-SVE: [[CALL:%.*]] = tail call float @fmodf(float [[IN:%.*]], float [[IN]])2667;2668; SLEEF-NEON-LABEL: define void @fmod_f322669; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2670; SLEEF-NEON: [[TMP2:%.*]] = call <4 x float> @_ZGVnN4vv_fmodf(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])2671;2672; SLEEF-SVE-LABEL: define void @fmod_f322673; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2674; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxvv_fmodf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x float> [[WIDE_MASKED_LOAD]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])2675;2676; SLEEF-SVE-NOPRED-LABEL: define void @fmod_f322677; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2678; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @_ZGVsMxvv_fmodf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]], <vscale x 4 x i1> splat (i1 true))2679; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call float @fmodf(float [[IN:%.*]], float [[IN]])2680;2681; ARMPL-NEON-LABEL: define void @fmod_f322682; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2683; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @armpl_vfmodq_f32(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])2684;2685; ARMPL-SVE-LABEL: define void @fmod_f322686; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2687; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @armpl_svfmod_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x float> [[WIDE_MASKED_LOAD]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])2688;2689; ARMPL-SVE-NOPRED-LABEL: define void @fmod_f322690; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2691; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @armpl_svfmod_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]], <vscale x 4 x i1> splat (i1 true))2692; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call float @fmodf(float [[IN:%.*]], float [[IN]])2693;2694 entry:2695 br label %for.body2696 2697 for.body:2698 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]2699 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv2700 %in = load float, ptr %in.gep, align 82701 %call = tail call float @fmodf(float %in, float %in)2702 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv2703 store float %call, ptr %out.gep, align 42704 %iv.next = add nuw nsw i64 %iv, 12705 %exitcond = icmp eq i64 %iv.next, 10002706 br i1 %exitcond, label %for.end, label %for.body2707 2708 for.end:2709 ret void2710}2711 2712declare double @hypot(double, double)2713declare float @hypotf(float, float)2714 2715define void @hypot_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {2716; LIBMVEC-NEON-LABEL: define void @hypot_f642717; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2718; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2vv_hypot(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])2719;2720; LIBMVEC-NEON-WIDTH-2-LABEL: define void @hypot_f642721; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2722; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2vv_hypot(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])2723;2724; LIBMVEC-SVE-LABEL: define void @hypot_f642725; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2726; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxvv_hypot(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x double> [[WIDE_MASKED_LOAD]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])2727;2728; SLEEF-NEON-LABEL: define void @hypot_f642729; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2730; SLEEF-NEON: [[TMP2:%.*]] = call <2 x double> @_ZGVnN2vv_hypot(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])2731;2732; SLEEF-SVE-LABEL: define void @hypot_f642733; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2734; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxvv_hypot(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x double> [[WIDE_MASKED_LOAD]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])2735;2736; SLEEF-SVE-NOPRED-LABEL: define void @hypot_f642737; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2738; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @_ZGVsMxvv_hypot(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]], <vscale x 2 x i1> splat (i1 true))2739; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call double @hypot(double [[IN:%.*]], double [[IN]])2740;2741; ARMPL-NEON-LABEL: define void @hypot_f642742; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2743; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @armpl_vhypotq_f64(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])2744;2745; ARMPL-SVE-LABEL: define void @hypot_f642746; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2747; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @armpl_svhypot_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x double> [[WIDE_MASKED_LOAD]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])2748;2749; ARMPL-SVE-NOPRED-LABEL: define void @hypot_f642750; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2751; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @armpl_svhypot_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]], <vscale x 2 x i1> splat (i1 true))2752; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call double @hypot(double [[IN:%.*]], double [[IN]])2753;2754 entry:2755 br label %for.body2756 2757 for.body:2758 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]2759 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv2760 %in = load double, ptr %in.gep, align 82761 %call = tail call double @hypot(double %in, double %in)2762 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv2763 store double %call, ptr %out.gep, align 82764 %iv.next = add nuw nsw i64 %iv, 12765 %exitcond = icmp eq i64 %iv.next, 10002766 br i1 %exitcond, label %for.end, label %for.body2767 2768 for.end:2769 ret void2770}2771 2772define void @hypot_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {2773; LIBMVEC-NEON-LABEL: define void @hypot_f322774; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2775; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @_ZGVnN4vv_hypotf(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])2776;2777; LIBMVEC-NEON-WIDTH-2-LABEL: define void @hypot_f322778; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2779; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x float> @_ZGVnN2vv_hypotf(<2 x float> [[WIDE_LOAD:%.*]], <2 x float> [[WIDE_LOAD]])2780;2781; LIBMVEC-SVE-LABEL: define void @hypot_f322782; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2783; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxvv_hypotf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x float> [[WIDE_MASKED_LOAD]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])2784;2785; SLEEF-NEON-LABEL: define void @hypot_f322786; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2787; SLEEF-NEON: [[TMP2:%.*]] = call <4 x float> @_ZGVnN4vv_hypotf(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])2788;2789; SLEEF-SVE-LABEL: define void @hypot_f322790; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2791; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxvv_hypotf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x float> [[WIDE_MASKED_LOAD]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])2792;2793; SLEEF-SVE-NOPRED-LABEL: define void @hypot_f322794; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2795; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @_ZGVsMxvv_hypotf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]], <vscale x 4 x i1> splat (i1 true))2796; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call float @hypotf(float [[IN:%.*]], float [[IN]])2797;2798; ARMPL-NEON-LABEL: define void @hypot_f322799; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2800; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @armpl_vhypotq_f32(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])2801;2802; ARMPL-SVE-LABEL: define void @hypot_f322803; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2804; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @armpl_svhypot_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x float> [[WIDE_MASKED_LOAD]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])2805;2806; ARMPL-SVE-NOPRED-LABEL: define void @hypot_f322807; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2808; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @armpl_svhypot_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]], <vscale x 4 x i1> splat (i1 true))2809; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call float @hypotf(float [[IN:%.*]], float [[IN]])2810;2811 entry:2812 br label %for.body2813 2814 for.body:2815 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]2816 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv2817 %in = load float, ptr %in.gep, align 82818 %call = tail call float @hypotf(float %in, float %in)2819 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv2820 store float %call, ptr %out.gep, align 42821 %iv.next = add nuw nsw i64 %iv, 12822 %exitcond = icmp eq i64 %iv.next, 10002823 br i1 %exitcond, label %for.end, label %for.body2824 2825 for.end:2826 ret void2827}2828 2829declare i32 @ilogb(double)2830declare i32 @ilogbf(float)2831 2832define void @ilogb_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {2833; LIBMVEC-NEON-LABEL: define void @ilogb_f642834; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2835; LIBMVEC-NEON: [[CALL:%.*]] = tail call i32 @ilogb(double [[IN:%.*]])2836;2837; LIBMVEC-NEON-WIDTH-2-LABEL: define void @ilogb_f642838; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2839; LIBMVEC-NEON-WIDTH-2: [[CALL:%.*]] = tail call i32 @ilogb(double [[IN:%.*]])2840;2841; LIBMVEC-SVE-LABEL: define void @ilogb_f642842; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2843; LIBMVEC-SVE: [[CALL:%.*]] = tail call i32 @ilogb(double [[IN:%.*]])2844;2845; SLEEF-NEON-LABEL: define void @ilogb_f642846; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2847; SLEEF-NEON: [[TMP2:%.*]] = call <2 x i32> @_ZGVnN2v_ilogb(<2 x double> [[WIDE_LOAD:%.*]])2848;2849; SLEEF-SVE-LABEL: define void @ilogb_f642850; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2851; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 2 x i32> @_ZGVsMxv_ilogb(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])2852;2853; SLEEF-SVE-NOPRED-LABEL: define void @ilogb_f642854; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2855; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x i32> @_ZGVsMxv_ilogb(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))2856; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call i32 @ilogb(double [[IN:%.*]])2857;2858; ARMPL-NEON-LABEL: define void @ilogb_f642859; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2860; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x i32> @armpl_vilogbq_f64(<2 x double> [[WIDE_LOAD:%.*]])2861;2862; ARMPL-SVE-LABEL: define void @ilogb_f642863; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2864; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 2 x i32> @armpl_svilogb_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])2865;2866; ARMPL-SVE-NOPRED-LABEL: define void @ilogb_f642867; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2868; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x i32> @armpl_svilogb_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))2869; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call i32 @ilogb(double [[IN:%.*]])2870;2871 entry:2872 br label %for.body2873 2874 for.body:2875 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]2876 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv2877 %in = load double, ptr %in.gep, align 82878 %call = tail call i32 @ilogb(double %in)2879 %out.gep = getelementptr inbounds i32, ptr %out.ptr, i64 %iv2880 store i32 %call, ptr %out.gep, align 82881 %iv.next = add nuw nsw i64 %iv, 12882 %exitcond = icmp eq i64 %iv.next, 10002883 br i1 %exitcond, label %for.end, label %for.body2884 2885 for.end:2886 ret void2887}2888 2889define void @ilogb_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {2890; LIBMVEC-NEON-LABEL: define void @ilogb_f322891; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2892; LIBMVEC-NEON: [[CALL:%.*]] = tail call i32 @ilogbf(float [[IN:%.*]])2893;2894; LIBMVEC-NEON-WIDTH-2-LABEL: define void @ilogb_f322895; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2896; LIBMVEC-NEON-WIDTH-2: [[CALL:%.*]] = tail call i32 @ilogbf(float [[IN:%.*]])2897;2898; LIBMVEC-SVE-LABEL: define void @ilogb_f322899; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2900; LIBMVEC-SVE: [[CALL:%.*]] = tail call i32 @ilogbf(float [[IN:%.*]])2901;2902; SLEEF-NEON-LABEL: define void @ilogb_f322903; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2904; SLEEF-NEON: [[TMP2:%.*]] = call <4 x i32> @_ZGVnN4v_ilogbf(<4 x float> [[WIDE_LOAD:%.*]])2905;2906; SLEEF-SVE-LABEL: define void @ilogb_f322907; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2908; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 4 x i32> @_ZGVsMxv_ilogbf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])2909;2910; SLEEF-SVE-NOPRED-LABEL: define void @ilogb_f322911; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2912; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x i32> @_ZGVsMxv_ilogbf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))2913; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call i32 @ilogbf(float [[IN:%.*]])2914;2915; ARMPL-NEON-LABEL: define void @ilogb_f322916; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2917; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x i32> @armpl_vilogbq_f32(<4 x float> [[WIDE_LOAD:%.*]])2918;2919; ARMPL-SVE-LABEL: define void @ilogb_f322920; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2921; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 4 x i32> @armpl_svilogb_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])2922;2923; ARMPL-SVE-NOPRED-LABEL: define void @ilogb_f322924; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2925; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x i32> @armpl_svilogb_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))2926; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call i32 @ilogbf(float [[IN:%.*]])2927;2928 entry:2929 br label %for.body2930 2931 for.body:2932 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]2933 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv2934 %in = load float, ptr %in.gep, align 82935 %call = tail call i32 @ilogbf(float %in)2936 %out.gep = getelementptr inbounds i32, ptr %out.ptr, i64 %iv2937 store i32 %call, ptr %out.gep, align 42938 %iv.next = add nuw nsw i64 %iv, 12939 %exitcond = icmp eq i64 %iv.next, 10002940 br i1 %exitcond, label %for.end, label %for.body2941 2942 for.end:2943 ret void2944}2945 2946declare double @ldexp(double, i32)2947declare float @ldexpf(float, i32)2948 2949define void @ldexp_f64(ptr noalias %in1.ptr, ptr noalias %in2.ptr, ptr noalias %out.ptr) {2950; LIBMVEC-NEON-LABEL: define void @ldexp_f642951; LIBMVEC-NEON-SAME: (ptr noalias [[IN1_PTR:%.*]], ptr noalias [[IN2_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2952; LIBMVEC-NEON: [[CALL:%.*]] = tail call double @ldexp(double [[IN1:%.*]], i32 [[IN2:%.*]])2953;2954; LIBMVEC-NEON-WIDTH-2-LABEL: define void @ldexp_f642955; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN1_PTR:%.*]], ptr noalias [[IN2_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2956; LIBMVEC-NEON-WIDTH-2: [[CALL:%.*]] = tail call double @ldexp(double [[IN1:%.*]], i32 [[IN2:%.*]])2957;2958; LIBMVEC-SVE-LABEL: define void @ldexp_f642959; LIBMVEC-SVE-SAME: (ptr noalias [[IN1_PTR:%.*]], ptr noalias [[IN2_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2960; LIBMVEC-SVE: [[CALL:%.*]] = tail call double @ldexp(double [[IN1:%.*]], i32 [[IN2:%.*]])2961;2962; SLEEF-NEON-LABEL: define void @ldexp_f642963; SLEEF-NEON-SAME: (ptr noalias [[IN1_PTR:%.*]], ptr noalias [[IN2_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2964; SLEEF-NEON: [[TMP4:%.*]] = call <2 x double> @_ZGVnN2vv_ldexp(<2 x double> [[WIDE_LOAD:%.*]], <2 x i32> [[WIDE_LOAD1:%.*]])2965;2966; SLEEF-SVE-LABEL: define void @ldexp_f642967; SLEEF-SVE-SAME: (ptr noalias [[IN1_PTR:%.*]], ptr noalias [[IN2_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2968; SLEEF-SVE: [[TMP14:%.*]] = call <vscale x 2 x double> @_ZGVsMxvv_ldexp(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i32> [[WIDE_MASKED_LOAD1:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])2969;2970; SLEEF-SVE-NOPRED-LABEL: define void @ldexp_f642971; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN1_PTR:%.*]], ptr noalias [[IN2_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2972; SLEEF-SVE-NOPRED: [[TMP10:%.*]] = call <vscale x 2 x double> @_ZGVsMxvv_ldexp(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i32> [[WIDE_LOAD1:%.*]], <vscale x 2 x i1> splat (i1 true))2973; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call double @ldexp(double [[IN1:%.*]], i32 [[IN2:%.*]])2974;2975; ARMPL-NEON-LABEL: define void @ldexp_f642976; ARMPL-NEON-SAME: (ptr noalias [[IN1_PTR:%.*]], ptr noalias [[IN2_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2977; ARMPL-NEON: [[TMP4:%.*]] = call aarch64_vector_pcs <2 x double> @armpl_vldexpq_f64(<2 x double> [[WIDE_LOAD:%.*]], <2 x i32> [[WIDE_LOAD1:%.*]])2978;2979; ARMPL-SVE-LABEL: define void @ldexp_f642980; ARMPL-SVE-SAME: (ptr noalias [[IN1_PTR:%.*]], ptr noalias [[IN2_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2981; ARMPL-SVE: [[TMP14:%.*]] = call <vscale x 2 x double> @armpl_svldexp_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i32> [[WIDE_MASKED_LOAD1:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])2982;2983; ARMPL-SVE-NOPRED-LABEL: define void @ldexp_f642984; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN1_PTR:%.*]], ptr noalias [[IN2_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {2985; ARMPL-SVE-NOPRED: [[TMP10:%.*]] = call <vscale x 2 x double> @armpl_svldexp_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i32> [[WIDE_LOAD1:%.*]], <vscale x 2 x i1> splat (i1 true))2986; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call double @ldexp(double [[IN1:%.*]], i32 [[IN2:%.*]])2987;2988 entry:2989 br label %for.body2990 2991 for.body:2992 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]2993 %in1.gep = getelementptr inbounds double, ptr %in1.ptr, i64 %iv2994 %in1 = load double, ptr %in1.gep, align 82995 %in2.gep = getelementptr inbounds i32, ptr %in2.ptr, i64 %iv2996 %in2 = load i32, ptr %in2.gep, align 82997 %call = tail call double @ldexp(double %in1, i32 %in2)2998 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv2999 store double %call, ptr %out.gep, align 83000 %iv.next = add nuw nsw i64 %iv, 13001 %exitcond = icmp eq i64 %iv.next, 10003002 br i1 %exitcond, label %for.end, label %for.body3003 3004 for.end:3005 ret void3006}3007 3008define void @ldexp_f32(ptr noalias %in1.ptr, ptr noalias %in2.ptr, ptr noalias %out.ptr) {3009; LIBMVEC-NEON-LABEL: define void @ldexp_f323010; LIBMVEC-NEON-SAME: (ptr noalias [[IN1_PTR:%.*]], ptr noalias [[IN2_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3011; LIBMVEC-NEON: [[CALL:%.*]] = tail call float @ldexpf(float [[IN1:%.*]], i32 [[IN2:%.*]])3012;3013; LIBMVEC-NEON-WIDTH-2-LABEL: define void @ldexp_f323014; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN1_PTR:%.*]], ptr noalias [[IN2_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3015; LIBMVEC-NEON-WIDTH-2: [[CALL:%.*]] = tail call float @ldexpf(float [[IN1:%.*]], i32 [[IN2:%.*]])3016;3017; LIBMVEC-SVE-LABEL: define void @ldexp_f323018; LIBMVEC-SVE-SAME: (ptr noalias [[IN1_PTR:%.*]], ptr noalias [[IN2_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3019; LIBMVEC-SVE: [[CALL:%.*]] = tail call float @ldexpf(float [[IN1:%.*]], i32 [[IN2:%.*]])3020;3021; SLEEF-NEON-LABEL: define void @ldexp_f323022; SLEEF-NEON-SAME: (ptr noalias [[IN1_PTR:%.*]], ptr noalias [[IN2_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3023; SLEEF-NEON: [[TMP4:%.*]] = call <4 x float> @_ZGVnN4vv_ldexpf(<4 x float> [[WIDE_LOAD:%.*]], <4 x i32> [[WIDE_LOAD1:%.*]])3024;3025; SLEEF-SVE-LABEL: define void @ldexp_f323026; SLEEF-SVE-SAME: (ptr noalias [[IN1_PTR:%.*]], ptr noalias [[IN2_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3027; SLEEF-SVE: [[TMP14:%.*]] = call <vscale x 4 x float> @_ZGVsMxvv_ldexpf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i32> [[WIDE_MASKED_LOAD1:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])3028;3029; SLEEF-SVE-NOPRED-LABEL: define void @ldexp_f323030; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN1_PTR:%.*]], ptr noalias [[IN2_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3031; SLEEF-SVE-NOPRED: [[TMP10:%.*]] = call <vscale x 4 x float> @_ZGVsMxvv_ldexpf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i32> [[WIDE_LOAD1:%.*]], <vscale x 4 x i1> splat (i1 true))3032; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call float @ldexpf(float [[IN1:%.*]], i32 [[IN2:%.*]])3033;3034; ARMPL-NEON-LABEL: define void @ldexp_f323035; ARMPL-NEON-SAME: (ptr noalias [[IN1_PTR:%.*]], ptr noalias [[IN2_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3036; ARMPL-NEON: [[TMP4:%.*]] = call aarch64_vector_pcs <4 x float> @armpl_vldexpq_f32(<4 x float> [[WIDE_LOAD:%.*]], <4 x i32> [[WIDE_LOAD1:%.*]])3037;3038; ARMPL-SVE-LABEL: define void @ldexp_f323039; ARMPL-SVE-SAME: (ptr noalias [[IN1_PTR:%.*]], ptr noalias [[IN2_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3040; ARMPL-SVE: [[TMP14:%.*]] = call <vscale x 4 x float> @armpl_svldexp_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i32> [[WIDE_MASKED_LOAD1:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])3041;3042; ARMPL-SVE-NOPRED-LABEL: define void @ldexp_f323043; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN1_PTR:%.*]], ptr noalias [[IN2_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3044; ARMPL-SVE-NOPRED: [[TMP10:%.*]] = call <vscale x 4 x float> @armpl_svldexp_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i32> [[WIDE_LOAD1:%.*]], <vscale x 4 x i1> splat (i1 true))3045; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call float @ldexpf(float [[IN1:%.*]], i32 [[IN2:%.*]])3046;3047 entry:3048 br label %for.body3049 3050 for.body:3051 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]3052 %in1.gep = getelementptr inbounds float, ptr %in1.ptr, i64 %iv3053 %in1 = load float, ptr %in1.gep, align 83054 %in2.gep = getelementptr inbounds i32, ptr %in2.ptr, i64 %iv3055 %in2 = load i32, ptr %in2.gep, align 83056 %call = tail call float @ldexpf(float %in1, i32 %in2)3057 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv3058 store float %call, ptr %out.gep, align 43059 %iv.next = add nuw nsw i64 %iv, 13060 %exitcond = icmp eq i64 %iv.next, 10003061 br i1 %exitcond, label %for.end, label %for.body3062 3063 for.end:3064 ret void3065}3066 3067declare double @lgamma(double)3068declare float @lgammaf(float)3069 3070define void @lgamma_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {3071; LIBMVEC-NEON-LABEL: define void @lgamma_f643072; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3073; LIBMVEC-NEON: [[CALL:%.*]] = tail call double @lgamma(double [[IN:%.*]])3074;3075; LIBMVEC-NEON-WIDTH-2-LABEL: define void @lgamma_f643076; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3077; LIBMVEC-NEON-WIDTH-2: [[CALL:%.*]] = tail call double @lgamma(double [[IN:%.*]])3078;3079; LIBMVEC-SVE-LABEL: define void @lgamma_f643080; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3081; LIBMVEC-SVE: [[CALL:%.*]] = tail call double @lgamma(double [[IN:%.*]])3082;3083; SLEEF-NEON-LABEL: define void @lgamma_f643084; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3085; SLEEF-NEON: [[TMP2:%.*]] = call <2 x double> @_ZGVnN2v_lgamma(<2 x double> [[WIDE_LOAD:%.*]])3086;3087; SLEEF-SVE-LABEL: define void @lgamma_f643088; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3089; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_lgamma(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])3090;3091; SLEEF-SVE-NOPRED-LABEL: define void @lgamma_f643092; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3093; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_lgamma(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))3094; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call double @lgamma(double [[IN:%.*]])3095;3096; ARMPL-NEON-LABEL: define void @lgamma_f643097; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3098; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @armpl_vlgammaq_f64(<2 x double> [[WIDE_LOAD:%.*]])3099;3100; ARMPL-SVE-LABEL: define void @lgamma_f643101; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3102; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @armpl_svlgamma_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])3103;3104; ARMPL-SVE-NOPRED-LABEL: define void @lgamma_f643105; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3106; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @armpl_svlgamma_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))3107; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call double @lgamma(double [[IN:%.*]])3108;3109 entry:3110 br label %for.body3111 3112 for.body:3113 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]3114 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv3115 %in = load double, ptr %in.gep, align 83116 %call = tail call double @lgamma(double %in)3117 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv3118 store double %call, ptr %out.gep, align 83119 %iv.next = add nuw nsw i64 %iv, 13120 %exitcond = icmp eq i64 %iv.next, 10003121 br i1 %exitcond, label %for.end, label %for.body3122 3123 for.end:3124 ret void3125}3126 3127define void @lgamma_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {3128; LIBMVEC-NEON-LABEL: define void @lgamma_f323129; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3130; LIBMVEC-NEON: [[CALL:%.*]] = tail call float @lgammaf(float [[IN:%.*]])3131;3132; LIBMVEC-NEON-WIDTH-2-LABEL: define void @lgamma_f323133; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3134; LIBMVEC-NEON-WIDTH-2: [[CALL:%.*]] = tail call float @lgammaf(float [[IN:%.*]])3135;3136; LIBMVEC-SVE-LABEL: define void @lgamma_f323137; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3138; LIBMVEC-SVE: [[CALL:%.*]] = tail call float @lgammaf(float [[IN:%.*]])3139;3140; SLEEF-NEON-LABEL: define void @lgamma_f323141; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3142; SLEEF-NEON: [[TMP2:%.*]] = call <4 x float> @_ZGVnN4v_lgammaf(<4 x float> [[WIDE_LOAD:%.*]])3143;3144; SLEEF-SVE-LABEL: define void @lgamma_f323145; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3146; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_lgammaf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])3147;3148; SLEEF-SVE-NOPRED-LABEL: define void @lgamma_f323149; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3150; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_lgammaf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))3151; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call float @lgammaf(float [[IN:%.*]])3152;3153; ARMPL-NEON-LABEL: define void @lgamma_f323154; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3155; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @armpl_vlgammaq_f32(<4 x float> [[WIDE_LOAD:%.*]])3156;3157; ARMPL-SVE-LABEL: define void @lgamma_f323158; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3159; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @armpl_svlgamma_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])3160;3161; ARMPL-SVE-NOPRED-LABEL: define void @lgamma_f323162; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3163; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @armpl_svlgamma_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))3164; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call float @lgammaf(float [[IN:%.*]])3165;3166 entry:3167 br label %for.body3168 3169 for.body:3170 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]3171 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv3172 %in = load float, ptr %in.gep, align 83173 %call = tail call float @lgammaf(float %in)3174 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv3175 store float %call, ptr %out.gep, align 43176 %iv.next = add nuw nsw i64 %iv, 13177 %exitcond = icmp eq i64 %iv.next, 10003178 br i1 %exitcond, label %for.end, label %for.body3179 3180 for.end:3181 ret void3182}3183 3184declare double @log(double)3185declare float @logf(float)3186 3187define void @log_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {3188; LIBMVEC-NEON-LABEL: define void @log_f643189; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3190; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2v_log(<2 x double> [[WIDE_LOAD:%.*]])3191;3192; LIBMVEC-NEON-WIDTH-2-LABEL: define void @log_f643193; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3194; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2v_log(<2 x double> [[WIDE_LOAD:%.*]])3195;3196; LIBMVEC-SVE-LABEL: define void @log_f643197; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3198; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_log(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])3199;3200; SLEEF-NEON-LABEL: define void @log_f643201; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3202; SLEEF-NEON: [[TMP2:%.*]] = call <2 x double> @_ZGVnN2v_log(<2 x double> [[WIDE_LOAD:%.*]])3203;3204; SLEEF-SVE-LABEL: define void @log_f643205; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3206; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_log(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])3207;3208; SLEEF-SVE-NOPRED-LABEL: define void @log_f643209; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3210; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_log(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))3211; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call double @log(double [[IN:%.*]])3212;3213; ARMPL-NEON-LABEL: define void @log_f643214; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3215; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @armpl_vlogq_f64(<2 x double> [[WIDE_LOAD:%.*]])3216;3217; ARMPL-SVE-LABEL: define void @log_f643218; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3219; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @armpl_svlog_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])3220;3221; ARMPL-SVE-NOPRED-LABEL: define void @log_f643222; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3223; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @armpl_svlog_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))3224; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call double @log(double [[IN:%.*]])3225;3226 entry:3227 br label %for.body3228 3229 for.body:3230 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]3231 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv3232 %in = load double, ptr %in.gep, align 83233 %call = tail call double @log(double %in)3234 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv3235 store double %call, ptr %out.gep, align 83236 %iv.next = add nuw nsw i64 %iv, 13237 %exitcond = icmp eq i64 %iv.next, 10003238 br i1 %exitcond, label %for.end, label %for.body3239 3240 for.end:3241 ret void3242}3243 3244define void @log_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {3245; LIBMVEC-NEON-LABEL: define void @log_f323246; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3247; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @_ZGVnN4v_logf(<4 x float> [[WIDE_LOAD:%.*]])3248;3249; LIBMVEC-NEON-WIDTH-2-LABEL: define void @log_f323250; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3251; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x float> @_ZGVnN2v_logf(<2 x float> [[WIDE_LOAD:%.*]])3252;3253; LIBMVEC-SVE-LABEL: define void @log_f323254; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3255; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_logf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])3256;3257; SLEEF-NEON-LABEL: define void @log_f323258; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3259; SLEEF-NEON: [[TMP2:%.*]] = call <4 x float> @_ZGVnN4v_logf(<4 x float> [[WIDE_LOAD:%.*]])3260;3261; SLEEF-SVE-LABEL: define void @log_f323262; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3263; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_logf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])3264;3265; SLEEF-SVE-NOPRED-LABEL: define void @log_f323266; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3267; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_logf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))3268; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call float @logf(float [[IN:%.*]])3269;3270; ARMPL-NEON-LABEL: define void @log_f323271; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3272; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @armpl_vlogq_f32(<4 x float> [[WIDE_LOAD:%.*]])3273;3274; ARMPL-SVE-LABEL: define void @log_f323275; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3276; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @armpl_svlog_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])3277;3278; ARMPL-SVE-NOPRED-LABEL: define void @log_f323279; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3280; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @armpl_svlog_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))3281; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call float @logf(float [[IN:%.*]])3282;3283 entry:3284 br label %for.body3285 3286 for.body:3287 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]3288 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv3289 %in = load float, ptr %in.gep, align 83290 %call = tail call float @logf(float %in)3291 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv3292 store float %call, ptr %out.gep, align 43293 %iv.next = add nuw nsw i64 %iv, 13294 %exitcond = icmp eq i64 %iv.next, 10003295 br i1 %exitcond, label %for.end, label %for.body3296 3297 for.end:3298 ret void3299}3300 3301declare double @log10(double)3302declare float @log10f(float)3303 3304define void @log10_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {3305; LIBMVEC-NEON-LABEL: define void @log10_f643306; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3307; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2v_log10(<2 x double> [[WIDE_LOAD:%.*]])3308;3309; LIBMVEC-NEON-WIDTH-2-LABEL: define void @log10_f643310; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3311; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2v_log10(<2 x double> [[WIDE_LOAD:%.*]])3312;3313; LIBMVEC-SVE-LABEL: define void @log10_f643314; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3315; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_log10(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])3316;3317; SLEEF-NEON-LABEL: define void @log10_f643318; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3319; SLEEF-NEON: [[TMP2:%.*]] = call <2 x double> @_ZGVnN2v_log10(<2 x double> [[WIDE_LOAD:%.*]])3320;3321; SLEEF-SVE-LABEL: define void @log10_f643322; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3323; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_log10(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])3324;3325; SLEEF-SVE-NOPRED-LABEL: define void @log10_f643326; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3327; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_log10(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))3328; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call double @log10(double [[IN:%.*]])3329;3330; ARMPL-NEON-LABEL: define void @log10_f643331; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3332; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @armpl_vlog10q_f64(<2 x double> [[WIDE_LOAD:%.*]])3333;3334; ARMPL-SVE-LABEL: define void @log10_f643335; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3336; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @armpl_svlog10_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])3337;3338; ARMPL-SVE-NOPRED-LABEL: define void @log10_f643339; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3340; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @armpl_svlog10_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))3341; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call double @log10(double [[IN:%.*]])3342;3343 entry:3344 br label %for.body3345 3346 for.body:3347 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]3348 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv3349 %in = load double, ptr %in.gep, align 83350 %call = tail call double @log10(double %in)3351 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv3352 store double %call, ptr %out.gep, align 83353 %iv.next = add nuw nsw i64 %iv, 13354 %exitcond = icmp eq i64 %iv.next, 10003355 br i1 %exitcond, label %for.end, label %for.body3356 3357 for.end:3358 ret void3359}3360 3361define void @log10_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {3362; LIBMVEC-NEON-LABEL: define void @log10_f323363; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3364; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @_ZGVnN4v_log10f(<4 x float> [[WIDE_LOAD:%.*]])3365;3366; LIBMVEC-NEON-WIDTH-2-LABEL: define void @log10_f323367; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3368; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x float> @_ZGVnN2v_log10f(<2 x float> [[WIDE_LOAD:%.*]])3369;3370; LIBMVEC-SVE-LABEL: define void @log10_f323371; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3372; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_log10f(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])3373;3374; SLEEF-NEON-LABEL: define void @log10_f323375; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3376; SLEEF-NEON: [[TMP2:%.*]] = call <4 x float> @_ZGVnN4v_log10f(<4 x float> [[WIDE_LOAD:%.*]])3377;3378; SLEEF-SVE-LABEL: define void @log10_f323379; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3380; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_log10f(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])3381;3382; SLEEF-SVE-NOPRED-LABEL: define void @log10_f323383; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3384; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_log10f(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))3385; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call float @log10f(float [[IN:%.*]])3386;3387; ARMPL-NEON-LABEL: define void @log10_f323388; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3389; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @armpl_vlog10q_f32(<4 x float> [[WIDE_LOAD:%.*]])3390;3391; ARMPL-SVE-LABEL: define void @log10_f323392; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3393; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @armpl_svlog10_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])3394;3395; ARMPL-SVE-NOPRED-LABEL: define void @log10_f323396; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3397; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @armpl_svlog10_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))3398; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call float @log10f(float [[IN:%.*]])3399;3400 entry:3401 br label %for.body3402 3403 for.body:3404 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]3405 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv3406 %in = load float, ptr %in.gep, align 83407 %call = tail call float @log10f(float %in)3408 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv3409 store float %call, ptr %out.gep, align 43410 %iv.next = add nuw nsw i64 %iv, 13411 %exitcond = icmp eq i64 %iv.next, 10003412 br i1 %exitcond, label %for.end, label %for.body3413 3414 for.end:3415 ret void3416}3417 3418declare double @log1p(double)3419declare float @log1pf(float)3420 3421define void @log1p_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {3422; LIBMVEC-NEON-LABEL: define void @log1p_f643423; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3424; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2v_log1p(<2 x double> [[WIDE_LOAD:%.*]])3425;3426; LIBMVEC-NEON-WIDTH-2-LABEL: define void @log1p_f643427; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3428; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2v_log1p(<2 x double> [[WIDE_LOAD:%.*]])3429;3430; LIBMVEC-SVE-LABEL: define void @log1p_f643431; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3432; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_log1p(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])3433;3434; SLEEF-NEON-LABEL: define void @log1p_f643435; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3436; SLEEF-NEON: [[TMP2:%.*]] = call <2 x double> @_ZGVnN2v_log1p(<2 x double> [[WIDE_LOAD:%.*]])3437;3438; SLEEF-SVE-LABEL: define void @log1p_f643439; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3440; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_log1p(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])3441;3442; SLEEF-SVE-NOPRED-LABEL: define void @log1p_f643443; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3444; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_log1p(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))3445; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call double @log1p(double [[IN:%.*]])3446;3447; ARMPL-NEON-LABEL: define void @log1p_f643448; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3449; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @armpl_vlog1pq_f64(<2 x double> [[WIDE_LOAD:%.*]])3450;3451; ARMPL-SVE-LABEL: define void @log1p_f643452; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3453; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @armpl_svlog1p_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])3454;3455; ARMPL-SVE-NOPRED-LABEL: define void @log1p_f643456; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3457; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @armpl_svlog1p_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))3458; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call double @log1p(double [[IN:%.*]])3459;3460 entry:3461 br label %for.body3462 3463 for.body:3464 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]3465 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv3466 %in = load double, ptr %in.gep, align 83467 %call = tail call double @log1p(double %in)3468 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv3469 store double %call, ptr %out.gep, align 83470 %iv.next = add nuw nsw i64 %iv, 13471 %exitcond = icmp eq i64 %iv.next, 10003472 br i1 %exitcond, label %for.end, label %for.body3473 3474 for.end:3475 ret void3476}3477 3478define void @log1p_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {3479; LIBMVEC-NEON-LABEL: define void @log1p_f323480; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3481; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @_ZGVnN4v_log1pf(<4 x float> [[WIDE_LOAD:%.*]])3482;3483; LIBMVEC-NEON-WIDTH-2-LABEL: define void @log1p_f323484; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3485; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x float> @_ZGVnN2v_log1pf(<2 x float> [[WIDE_LOAD:%.*]])3486;3487; LIBMVEC-SVE-LABEL: define void @log1p_f323488; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3489; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_log1pf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])3490;3491; SLEEF-NEON-LABEL: define void @log1p_f323492; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3493; SLEEF-NEON: [[TMP2:%.*]] = call <4 x float> @_ZGVnN4v_log1pf(<4 x float> [[WIDE_LOAD:%.*]])3494;3495; SLEEF-SVE-LABEL: define void @log1p_f323496; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3497; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_log1pf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])3498;3499; SLEEF-SVE-NOPRED-LABEL: define void @log1p_f323500; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3501; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_log1pf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))3502; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call float @log1pf(float [[IN:%.*]])3503;3504; ARMPL-NEON-LABEL: define void @log1p_f323505; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3506; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @armpl_vlog1pq_f32(<4 x float> [[WIDE_LOAD:%.*]])3507;3508; ARMPL-SVE-LABEL: define void @log1p_f323509; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3510; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @armpl_svlog1p_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])3511;3512; ARMPL-SVE-NOPRED-LABEL: define void @log1p_f323513; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3514; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @armpl_svlog1p_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))3515; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call float @log1pf(float [[IN:%.*]])3516;3517 entry:3518 br label %for.body3519 3520 for.body:3521 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]3522 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv3523 %in = load float, ptr %in.gep, align 83524 %call = tail call float @log1pf(float %in)3525 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv3526 store float %call, ptr %out.gep, align 43527 %iv.next = add nuw nsw i64 %iv, 13528 %exitcond = icmp eq i64 %iv.next, 10003529 br i1 %exitcond, label %for.end, label %for.body3530 3531 for.end:3532 ret void3533}3534 3535declare double @log2(double)3536declare float @log2f(float)3537 3538define void @log2_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {3539; LIBMVEC-NEON-LABEL: define void @log2_f643540; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3541; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2v_log2(<2 x double> [[WIDE_LOAD:%.*]])3542;3543; LIBMVEC-NEON-WIDTH-2-LABEL: define void @log2_f643544; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3545; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2v_log2(<2 x double> [[WIDE_LOAD:%.*]])3546;3547; LIBMVEC-SVE-LABEL: define void @log2_f643548; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3549; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_log2(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])3550;3551; SLEEF-NEON-LABEL: define void @log2_f643552; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3553; SLEEF-NEON: [[TMP2:%.*]] = call <2 x double> @_ZGVnN2v_log2(<2 x double> [[WIDE_LOAD:%.*]])3554;3555; SLEEF-SVE-LABEL: define void @log2_f643556; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3557; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_log2(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])3558;3559; SLEEF-SVE-NOPRED-LABEL: define void @log2_f643560; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3561; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_log2(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))3562; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call double @log2(double [[IN:%.*]])3563;3564; ARMPL-NEON-LABEL: define void @log2_f643565; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3566; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @armpl_vlog2q_f64(<2 x double> [[WIDE_LOAD:%.*]])3567;3568; ARMPL-SVE-LABEL: define void @log2_f643569; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3570; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @armpl_svlog2_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])3571;3572; ARMPL-SVE-NOPRED-LABEL: define void @log2_f643573; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3574; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @armpl_svlog2_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))3575; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call double @log2(double [[IN:%.*]])3576;3577 entry:3578 br label %for.body3579 3580 for.body:3581 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]3582 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv3583 %in = load double, ptr %in.gep, align 83584 %call = tail call double @log2(double %in)3585 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv3586 store double %call, ptr %out.gep, align 83587 %iv.next = add nuw nsw i64 %iv, 13588 %exitcond = icmp eq i64 %iv.next, 10003589 br i1 %exitcond, label %for.end, label %for.body3590 3591 for.end:3592 ret void3593}3594 3595define void @log2_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {3596; LIBMVEC-NEON-LABEL: define void @log2_f323597; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3598; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @_ZGVnN4v_log2f(<4 x float> [[WIDE_LOAD:%.*]])3599;3600; LIBMVEC-NEON-WIDTH-2-LABEL: define void @log2_f323601; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3602; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x float> @_ZGVnN2v_log2f(<2 x float> [[WIDE_LOAD:%.*]])3603;3604; LIBMVEC-SVE-LABEL: define void @log2_f323605; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3606; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_log2f(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])3607;3608; SLEEF-NEON-LABEL: define void @log2_f323609; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3610; SLEEF-NEON: [[TMP2:%.*]] = call <4 x float> @_ZGVnN4v_log2f(<4 x float> [[WIDE_LOAD:%.*]])3611;3612; SLEEF-SVE-LABEL: define void @log2_f323613; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3614; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_log2f(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])3615;3616; SLEEF-SVE-NOPRED-LABEL: define void @log2_f323617; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3618; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_log2f(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))3619; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call float @log2f(float [[IN:%.*]])3620;3621; ARMPL-NEON-LABEL: define void @log2_f323622; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3623; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @armpl_vlog2q_f32(<4 x float> [[WIDE_LOAD:%.*]])3624;3625; ARMPL-SVE-LABEL: define void @log2_f323626; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3627; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @armpl_svlog2_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])3628;3629; ARMPL-SVE-NOPRED-LABEL: define void @log2_f323630; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3631; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @armpl_svlog2_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))3632; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call float @log2f(float [[IN:%.*]])3633;3634 entry:3635 br label %for.body3636 3637 for.body:3638 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]3639 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv3640 %in = load float, ptr %in.gep, align 83641 %call = tail call float @log2f(float %in)3642 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv3643 store float %call, ptr %out.gep, align 43644 %iv.next = add nuw nsw i64 %iv, 13645 %exitcond = icmp eq i64 %iv.next, 10003646 br i1 %exitcond, label %for.end, label %for.body3647 3648 for.end:3649 ret void3650}3651 3652; FIXME: Re-enable modf[f] vectorization once aliasing issues due to output3653; pointers have been resolved.3654 3655declare double @modf(double, ptr)3656declare float @modff(float, ptr)3657 3658define void @modf_f64(ptr noalias %a, ptr noalias %b, ptr noalias %c) {3659; LIBMVEC-NEON-LABEL: define void @modf_f643660; LIBMVEC-NEON-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {3661; LIBMVEC-NEON: [[DATA:%.*]] = call double @modf(double [[NUM:%.*]], ptr [[GEPB:%.*]])3662;3663; LIBMVEC-NEON-WIDTH-2-LABEL: define void @modf_f643664; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {3665; LIBMVEC-NEON-WIDTH-2: [[DATA:%.*]] = call double @modf(double [[NUM:%.*]], ptr [[GEPB:%.*]])3666;3667; LIBMVEC-SVE-LABEL: define void @modf_f643668; LIBMVEC-SVE-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {3669; LIBMVEC-SVE: [[DATA:%.*]] = call double @modf(double [[NUM:%.*]], ptr [[GEPB:%.*]])3670;3671; SLEEF-NEON-LABEL: define void @modf_f643672; SLEEF-NEON-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {3673; SLEEF-NEON: [[DATA:%.*]] = call double @modf(double [[NUM:%.*]], ptr [[GEPB:%.*]])3674;3675; SLEEF-SVE-LABEL: define void @modf_f643676; SLEEF-SVE-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {3677; SLEEF-SVE: [[DATA:%.*]] = call double @modf(double [[NUM:%.*]], ptr [[GEPB:%.*]])3678;3679; SLEEF-SVE-NOPRED-LABEL: define void @modf_f643680; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {3681; SLEEF-SVE-NOPRED: [[DATA:%.*]] = call double @modf(double [[NUM:%.*]], ptr [[GEPB:%.*]])3682;3683; ARMPL-NEON-LABEL: define void @modf_f643684; ARMPL-NEON-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {3685; ARMPL-NEON: [[DATA:%.*]] = call double @modf(double [[NUM:%.*]], ptr [[GEPB:%.*]])3686;3687; ARMPL-SVE-LABEL: define void @modf_f643688; ARMPL-SVE-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {3689; ARMPL-SVE: [[DATA:%.*]] = call double @modf(double [[NUM:%.*]], ptr [[GEPB:%.*]])3690;3691; ARMPL-SVE-NOPRED-LABEL: define void @modf_f643692; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {3693; ARMPL-SVE-NOPRED: [[DATA:%.*]] = call double @modf(double [[NUM:%.*]], ptr [[GEPB:%.*]])3694;3695entry:3696 br label %for.body3697 3698for.body:3699 %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]3700 %gepa = getelementptr double, ptr %a, i64 %indvars.iv3701 %num = load double, ptr %gepa, align 83702 %gepb = getelementptr double, ptr %b, i64 %indvars.iv3703 %data = call double @modf(double %num, ptr %gepb)3704 %gepc = getelementptr inbounds double, ptr %c, i64 %indvars.iv3705 store double %data, ptr %gepc, align 83706 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 13707 %exitcond = icmp eq i64 %indvars.iv.next, 10003708 br i1 %exitcond, label %for.cond.cleanup, label %for.body3709 3710for.cond.cleanup:3711 ret void3712}3713 3714define void @modf_f32(ptr noalias %a, ptr noalias %b, ptr noalias %c) {3715; LIBMVEC-NEON-LABEL: define void @modf_f323716; LIBMVEC-NEON-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {3717; LIBMVEC-NEON: [[DATA:%.*]] = call float @modff(float [[NUM:%.*]], ptr [[GEPB:%.*]])3718;3719; LIBMVEC-NEON-WIDTH-2-LABEL: define void @modf_f323720; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {3721; LIBMVEC-NEON-WIDTH-2: [[DATA:%.*]] = call float @modff(float [[NUM:%.*]], ptr [[GEPB:%.*]])3722;3723; LIBMVEC-SVE-LABEL: define void @modf_f323724; LIBMVEC-SVE-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {3725; LIBMVEC-SVE: [[DATA:%.*]] = call float @modff(float [[NUM:%.*]], ptr [[GEPB:%.*]])3726;3727; SLEEF-NEON-LABEL: define void @modf_f323728; SLEEF-NEON-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {3729; SLEEF-NEON: [[DATA:%.*]] = call float @modff(float [[NUM:%.*]], ptr [[GEPB:%.*]])3730;3731; SLEEF-SVE-LABEL: define void @modf_f323732; SLEEF-SVE-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {3733; SLEEF-SVE: [[DATA:%.*]] = call float @modff(float [[NUM:%.*]], ptr [[GEPB:%.*]])3734;3735; SLEEF-SVE-NOPRED-LABEL: define void @modf_f323736; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {3737; SLEEF-SVE-NOPRED: [[DATA:%.*]] = call float @modff(float [[NUM:%.*]], ptr [[GEPB:%.*]])3738;3739; ARMPL-NEON-LABEL: define void @modf_f323740; ARMPL-NEON-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {3741; ARMPL-NEON: [[DATA:%.*]] = call float @modff(float [[NUM:%.*]], ptr [[GEPB:%.*]])3742;3743; ARMPL-SVE-LABEL: define void @modf_f323744; ARMPL-SVE-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {3745; ARMPL-SVE: [[DATA:%.*]] = call float @modff(float [[NUM:%.*]], ptr [[GEPB:%.*]])3746;3747; ARMPL-SVE-NOPRED-LABEL: define void @modf_f323748; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {3749; ARMPL-SVE-NOPRED: [[DATA:%.*]] = call float @modff(float [[NUM:%.*]], ptr [[GEPB:%.*]])3750;3751entry:3752 br label %for.body3753 3754for.body:3755 %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]3756 %gepa = getelementptr float, ptr %a, i64 %indvars.iv3757 %num = load float, ptr %gepa, align 83758 %gepb = getelementptr float, ptr %b, i64 %indvars.iv3759 %data = call float @modff(float %num, ptr %gepb)3760 %gepc = getelementptr inbounds float, ptr %c, i64 %indvars.iv3761 store float %data, ptr %gepc, align 83762 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 13763 %exitcond = icmp eq i64 %indvars.iv.next, 10003764 br i1 %exitcond, label %for.cond.cleanup, label %for.body3765 3766for.cond.cleanup:3767 ret void3768}3769 3770declare double @nextafter(double, double)3771declare float @nextafterf(float, float)3772 3773define void @nextafter_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {3774; LIBMVEC-NEON-LABEL: define void @nextafter_f643775; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3776; LIBMVEC-NEON: [[CALL:%.*]] = tail call double @nextafter(double [[IN:%.*]], double [[IN]])3777;3778; LIBMVEC-NEON-WIDTH-2-LABEL: define void @nextafter_f643779; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3780; LIBMVEC-NEON-WIDTH-2: [[CALL:%.*]] = tail call double @nextafter(double [[IN:%.*]], double [[IN]])3781;3782; LIBMVEC-SVE-LABEL: define void @nextafter_f643783; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3784; LIBMVEC-SVE: [[CALL:%.*]] = tail call double @nextafter(double [[IN:%.*]], double [[IN]])3785;3786; SLEEF-NEON-LABEL: define void @nextafter_f643787; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3788; SLEEF-NEON: [[TMP2:%.*]] = call <2 x double> @_ZGVnN2vv_nextafter(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])3789;3790; SLEEF-SVE-LABEL: define void @nextafter_f643791; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3792; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxvv_nextafter(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x double> [[WIDE_MASKED_LOAD]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])3793;3794; SLEEF-SVE-NOPRED-LABEL: define void @nextafter_f643795; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3796; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @_ZGVsMxvv_nextafter(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]], <vscale x 2 x i1> splat (i1 true))3797; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call double @nextafter(double [[IN:%.*]], double [[IN]])3798;3799; ARMPL-NEON-LABEL: define void @nextafter_f643800; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3801; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @armpl_vnextafterq_f64(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])3802;3803; ARMPL-SVE-LABEL: define void @nextafter_f643804; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3805; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @armpl_svnextafter_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x double> [[WIDE_MASKED_LOAD]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])3806;3807; ARMPL-SVE-NOPRED-LABEL: define void @nextafter_f643808; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3809; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @armpl_svnextafter_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]], <vscale x 2 x i1> splat (i1 true))3810; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call double @nextafter(double [[IN:%.*]], double [[IN]])3811;3812 entry:3813 br label %for.body3814 3815 for.body:3816 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]3817 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv3818 %in = load double, ptr %in.gep, align 83819 %call = tail call double @nextafter(double %in, double %in)3820 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv3821 store double %call, ptr %out.gep, align 83822 %iv.next = add nuw nsw i64 %iv, 13823 %exitcond = icmp eq i64 %iv.next, 10003824 br i1 %exitcond, label %for.end, label %for.body3825 3826 for.end:3827 ret void3828}3829 3830define void @nextafter_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {3831; LIBMVEC-NEON-LABEL: define void @nextafter_f323832; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3833; LIBMVEC-NEON: [[CALL:%.*]] = tail call float @nextafterf(float [[IN:%.*]], float [[IN]])3834;3835; LIBMVEC-NEON-WIDTH-2-LABEL: define void @nextafter_f323836; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3837; LIBMVEC-NEON-WIDTH-2: [[CALL:%.*]] = tail call float @nextafterf(float [[IN:%.*]], float [[IN]])3838;3839; LIBMVEC-SVE-LABEL: define void @nextafter_f323840; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3841; LIBMVEC-SVE: [[CALL:%.*]] = tail call float @nextafterf(float [[IN:%.*]], float [[IN]])3842;3843; SLEEF-NEON-LABEL: define void @nextafter_f323844; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3845; SLEEF-NEON: [[TMP2:%.*]] = call <4 x float> @_ZGVnN4vv_nextafterf(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])3846;3847; SLEEF-SVE-LABEL: define void @nextafter_f323848; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3849; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxvv_nextafterf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x float> [[WIDE_MASKED_LOAD]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])3850;3851; SLEEF-SVE-NOPRED-LABEL: define void @nextafter_f323852; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3853; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @_ZGVsMxvv_nextafterf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]], <vscale x 4 x i1> splat (i1 true))3854; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call float @nextafterf(float [[IN:%.*]], float [[IN]])3855;3856; ARMPL-NEON-LABEL: define void @nextafter_f323857; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3858; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @armpl_vnextafterq_f32(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])3859;3860; ARMPL-SVE-LABEL: define void @nextafter_f323861; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3862; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @armpl_svnextafter_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x float> [[WIDE_MASKED_LOAD]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])3863;3864; ARMPL-SVE-NOPRED-LABEL: define void @nextafter_f323865; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3866; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @armpl_svnextafter_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]], <vscale x 4 x i1> splat (i1 true))3867; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call float @nextafterf(float [[IN:%.*]], float [[IN]])3868;3869 entry:3870 br label %for.body3871 3872 for.body:3873 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]3874 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv3875 %in = load float, ptr %in.gep, align 83876 %call = tail call float @nextafterf(float %in, float %in)3877 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv3878 store float %call, ptr %out.gep, align 43879 %iv.next = add nuw nsw i64 %iv, 13880 %exitcond = icmp eq i64 %iv.next, 10003881 br i1 %exitcond, label %for.end, label %for.body3882 3883 for.end:3884 ret void3885}3886 3887declare double @pow(double, double)3888declare float @powf(float, float)3889 3890define void @pow_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {3891; LIBMVEC-NEON-LABEL: define void @pow_f643892; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3893; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2vv_pow(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])3894;3895; LIBMVEC-NEON-WIDTH-2-LABEL: define void @pow_f643896; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3897; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2vv_pow(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])3898;3899; LIBMVEC-SVE-LABEL: define void @pow_f643900; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3901; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxvv_pow(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x double> [[WIDE_MASKED_LOAD]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])3902;3903; SLEEF-NEON-LABEL: define void @pow_f643904; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3905; SLEEF-NEON: [[TMP2:%.*]] = call <2 x double> @_ZGVnN2vv_pow(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])3906;3907; SLEEF-SVE-LABEL: define void @pow_f643908; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3909; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxvv_pow(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x double> [[WIDE_MASKED_LOAD]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])3910;3911; SLEEF-SVE-NOPRED-LABEL: define void @pow_f643912; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3913; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @_ZGVsMxvv_pow(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]], <vscale x 2 x i1> splat (i1 true))3914; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call double @pow(double [[IN:%.*]], double [[IN]])3915;3916; ARMPL-NEON-LABEL: define void @pow_f643917; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3918; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @armpl_vpowq_f64(<2 x double> [[WIDE_LOAD:%.*]], <2 x double> [[WIDE_LOAD]])3919;3920; ARMPL-SVE-LABEL: define void @pow_f643921; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3922; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @armpl_svpow_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x double> [[WIDE_MASKED_LOAD]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])3923;3924; ARMPL-SVE-NOPRED-LABEL: define void @pow_f643925; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3926; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @armpl_svpow_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x double> [[WIDE_LOAD]], <vscale x 2 x i1> splat (i1 true))3927; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call double @pow(double [[IN:%.*]], double [[IN]])3928;3929 entry:3930 br label %for.body3931 3932 for.body:3933 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]3934 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv3935 %in = load double, ptr %in.gep, align 83936 %call = tail call double @pow(double %in, double %in)3937 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv3938 store double %call, ptr %out.gep, align 83939 %iv.next = add nuw nsw i64 %iv, 13940 %exitcond = icmp eq i64 %iv.next, 10003941 br i1 %exitcond, label %for.end, label %for.body3942 3943 for.end:3944 ret void3945}3946 3947define void @pow_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {3948; LIBMVEC-NEON-LABEL: define void @pow_f323949; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3950; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @_ZGVnN4vv_powf(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])3951;3952; LIBMVEC-NEON-WIDTH-2-LABEL: define void @pow_f323953; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3954; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x float> @_ZGVnN2vv_powf(<2 x float> [[WIDE_LOAD:%.*]], <2 x float> [[WIDE_LOAD]])3955;3956; LIBMVEC-SVE-LABEL: define void @pow_f323957; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3958; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxvv_powf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x float> [[WIDE_MASKED_LOAD]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])3959;3960; SLEEF-NEON-LABEL: define void @pow_f323961; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3962; SLEEF-NEON: [[TMP2:%.*]] = call <4 x float> @_ZGVnN4vv_powf(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])3963;3964; SLEEF-SVE-LABEL: define void @pow_f323965; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3966; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxvv_powf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x float> [[WIDE_MASKED_LOAD]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])3967;3968; SLEEF-SVE-NOPRED-LABEL: define void @pow_f323969; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3970; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @_ZGVsMxvv_powf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]], <vscale x 4 x i1> splat (i1 true))3971; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call float @powf(float [[IN:%.*]], float [[IN]])3972;3973; ARMPL-NEON-LABEL: define void @pow_f323974; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3975; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @armpl_vpowq_f32(<4 x float> [[WIDE_LOAD:%.*]], <4 x float> [[WIDE_LOAD]])3976;3977; ARMPL-SVE-LABEL: define void @pow_f323978; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3979; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @armpl_svpow_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x float> [[WIDE_MASKED_LOAD]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])3980;3981; ARMPL-SVE-NOPRED-LABEL: define void @pow_f323982; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {3983; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @armpl_svpow_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x float> [[WIDE_LOAD]], <vscale x 4 x i1> splat (i1 true))3984; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call float @powf(float [[IN:%.*]], float [[IN]])3985;3986 entry:3987 br label %for.body3988 3989 for.body:3990 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]3991 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv3992 %in = load float, ptr %in.gep, align 83993 %call = tail call float @powf(float %in, float %in)3994 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv3995 store float %call, ptr %out.gep, align 43996 %iv.next = add nuw nsw i64 %iv, 13997 %exitcond = icmp eq i64 %iv.next, 10003998 br i1 %exitcond, label %for.end, label %for.body3999 4000 for.end:4001 ret void4002}4003 4004declare double @sin(double)4005declare float @sinf(float)4006 4007define void @sin_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {4008; LIBMVEC-NEON-LABEL: define void @sin_f644009; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4010; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2v_sin(<2 x double> [[WIDE_LOAD:%.*]])4011;4012; LIBMVEC-NEON-WIDTH-2-LABEL: define void @sin_f644013; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4014; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2v_sin(<2 x double> [[WIDE_LOAD:%.*]])4015;4016; LIBMVEC-SVE-LABEL: define void @sin_f644017; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4018; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_sin(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])4019;4020; SLEEF-NEON-LABEL: define void @sin_f644021; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4022; SLEEF-NEON: [[TMP2:%.*]] = call <2 x double> @_ZGVnN2v_sin(<2 x double> [[WIDE_LOAD:%.*]])4023;4024; SLEEF-SVE-LABEL: define void @sin_f644025; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4026; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_sin(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])4027;4028; SLEEF-SVE-NOPRED-LABEL: define void @sin_f644029; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4030; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_sin(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))4031; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call double @sin(double [[IN:%.*]])4032;4033; ARMPL-NEON-LABEL: define void @sin_f644034; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4035; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @armpl_vsinq_f64(<2 x double> [[WIDE_LOAD:%.*]])4036;4037; ARMPL-SVE-LABEL: define void @sin_f644038; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4039; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @armpl_svsin_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])4040;4041; ARMPL-SVE-NOPRED-LABEL: define void @sin_f644042; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4043; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @armpl_svsin_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))4044; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call double @sin(double [[IN:%.*]])4045;4046 entry:4047 br label %for.body4048 4049 for.body:4050 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]4051 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv4052 %in = load double, ptr %in.gep, align 84053 %call = tail call double @sin(double %in)4054 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv4055 store double %call, ptr %out.gep, align 84056 %iv.next = add nuw nsw i64 %iv, 14057 %exitcond = icmp eq i64 %iv.next, 10004058 br i1 %exitcond, label %for.end, label %for.body4059 4060 for.end:4061 ret void4062}4063 4064define void @sin_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {4065; LIBMVEC-NEON-LABEL: define void @sin_f324066; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4067; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @_ZGVnN4v_sinf(<4 x float> [[WIDE_LOAD:%.*]])4068;4069; LIBMVEC-NEON-WIDTH-2-LABEL: define void @sin_f324070; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4071; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x float> @_ZGVnN2v_sinf(<2 x float> [[WIDE_LOAD:%.*]])4072;4073; LIBMVEC-SVE-LABEL: define void @sin_f324074; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4075; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_sinf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])4076;4077; SLEEF-NEON-LABEL: define void @sin_f324078; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4079; SLEEF-NEON: [[TMP2:%.*]] = call <4 x float> @_ZGVnN4v_sinf(<4 x float> [[WIDE_LOAD:%.*]])4080;4081; SLEEF-SVE-LABEL: define void @sin_f324082; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4083; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_sinf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])4084;4085; SLEEF-SVE-NOPRED-LABEL: define void @sin_f324086; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4087; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_sinf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))4088; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call float @sinf(float [[IN:%.*]])4089;4090; ARMPL-NEON-LABEL: define void @sin_f324091; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4092; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @armpl_vsinq_f32(<4 x float> [[WIDE_LOAD:%.*]])4093;4094; ARMPL-SVE-LABEL: define void @sin_f324095; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4096; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @armpl_svsin_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])4097;4098; ARMPL-SVE-NOPRED-LABEL: define void @sin_f324099; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4100; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @armpl_svsin_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))4101; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call float @sinf(float [[IN:%.*]])4102;4103 entry:4104 br label %for.body4105 4106 for.body:4107 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]4108 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv4109 %in = load float, ptr %in.gep, align 84110 %call = tail call float @sinf(float %in)4111 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv4112 store float %call, ptr %out.gep, align 44113 %iv.next = add nuw nsw i64 %iv, 14114 %exitcond = icmp eq i64 %iv.next, 10004115 br i1 %exitcond, label %for.end, label %for.body4116 4117 for.end:4118 ret void4119}4120 4121; FIXME: Re-enable sincos[f] vectorization once aliasing issues with output4122; pointers have been resolved.4123 4124declare void @sincos(double, ptr, ptr)4125declare void @sincosf(float, ptr, ptr)4126 4127define void @sincos_f64(ptr noalias %a, ptr noalias %b, ptr noalias %c) {4128; LIBMVEC-NEON-LABEL: define void @sincos_f644129; LIBMVEC-NEON-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {4130; LIBMVEC-NEON: call void @sincos(double [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])4131;4132; LIBMVEC-NEON-WIDTH-2-LABEL: define void @sincos_f644133; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {4134; LIBMVEC-NEON-WIDTH-2: call void @sincos(double [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])4135;4136; LIBMVEC-SVE-LABEL: define void @sincos_f644137; LIBMVEC-SVE-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {4138; LIBMVEC-SVE: call void @sincos(double [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])4139;4140; SLEEF-NEON-LABEL: define void @sincos_f644141; SLEEF-NEON-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {4142; SLEEF-NEON: call void @sincos(double [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])4143;4144; SLEEF-SVE-LABEL: define void @sincos_f644145; SLEEF-SVE-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {4146; SLEEF-SVE: call void @sincos(double [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])4147;4148; SLEEF-SVE-NOPRED-LABEL: define void @sincos_f644149; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {4150; SLEEF-SVE-NOPRED: call void @sincos(double [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])4151;4152; ARMPL-NEON-LABEL: define void @sincos_f644153; ARMPL-NEON-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {4154; ARMPL-NEON: call void @sincos(double [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])4155;4156; ARMPL-SVE-LABEL: define void @sincos_f644157; ARMPL-SVE-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {4158; ARMPL-SVE: call void @sincos(double [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])4159;4160; ARMPL-SVE-NOPRED-LABEL: define void @sincos_f644161; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {4162; ARMPL-SVE-NOPRED: call void @sincos(double [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])4163;4164entry:4165 br label %for.body4166 4167for.body:4168 %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]4169 %gepa = getelementptr double, ptr %a, i64 %indvars.iv4170 %num = load double, ptr %gepa, align 84171 %gepb = getelementptr double, ptr %b, i64 %indvars.iv4172 %gepc = getelementptr double, ptr %c, i64 %indvars.iv4173 call void @sincos(double %num, ptr %gepb, ptr %gepc)4174 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 14175 %exitcond = icmp eq i64 %indvars.iv.next, 10004176 br i1 %exitcond, label %for.cond.cleanup, label %for.body4177 4178for.cond.cleanup:4179 ret void4180}4181 4182define void @sincos_f32(ptr noalias %a, ptr noalias %b, ptr noalias %c) {4183; LIBMVEC-NEON-LABEL: define void @sincos_f324184; LIBMVEC-NEON-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {4185; LIBMVEC-NEON: call void @sincosf(float [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])4186;4187; LIBMVEC-NEON-WIDTH-2-LABEL: define void @sincos_f324188; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {4189; LIBMVEC-NEON-WIDTH-2: call void @sincosf(float [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])4190;4191; LIBMVEC-SVE-LABEL: define void @sincos_f324192; LIBMVEC-SVE-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {4193; LIBMVEC-SVE: call void @sincosf(float [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])4194;4195; SLEEF-NEON-LABEL: define void @sincos_f324196; SLEEF-NEON-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {4197; SLEEF-NEON: call void @sincosf(float [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])4198;4199; SLEEF-SVE-LABEL: define void @sincos_f324200; SLEEF-SVE-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {4201; SLEEF-SVE: call void @sincosf(float [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])4202;4203; SLEEF-SVE-NOPRED-LABEL: define void @sincos_f324204; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {4205; SLEEF-SVE-NOPRED: call void @sincosf(float [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])4206;4207; ARMPL-NEON-LABEL: define void @sincos_f324208; ARMPL-NEON-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {4209; ARMPL-NEON: call void @sincosf(float [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])4210;4211; ARMPL-SVE-LABEL: define void @sincos_f324212; ARMPL-SVE-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {4213; ARMPL-SVE: call void @sincosf(float [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])4214;4215; ARMPL-SVE-NOPRED-LABEL: define void @sincos_f324216; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {4217; ARMPL-SVE-NOPRED: call void @sincosf(float [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])4218;4219entry:4220 br label %for.body4221 4222for.body:4223 %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]4224 %gepa = getelementptr float, ptr %a, i64 %indvars.iv4225 %num = load float, ptr %gepa, align 84226 %gepb = getelementptr float, ptr %b, i64 %indvars.iv4227 %gepc = getelementptr float, ptr %c, i64 %indvars.iv4228 call void @sincosf(float %num, ptr %gepb, ptr %gepc)4229 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 14230 %exitcond = icmp eq i64 %indvars.iv.next, 10004231 br i1 %exitcond, label %for.cond.cleanup, label %for.body4232 4233for.cond.cleanup:4234 ret void4235}4236 4237; FIXME: Re-enable sincospi[f] vectorization once aliasing issues with output4238; pointers have been resolved.4239 4240declare void @sincospi(double, ptr, ptr)4241declare void @sincospif(float, ptr, ptr)4242 4243define void @sincospi_f64(ptr noalias %a, ptr noalias %b, ptr noalias %c) {4244; LIBMVEC-NEON-LABEL: define void @sincospi_f644245; LIBMVEC-NEON-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {4246; LIBMVEC-NEON: call void @sincospi(double [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])4247;4248; LIBMVEC-NEON-WIDTH-2-LABEL: define void @sincospi_f644249; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {4250; LIBMVEC-NEON-WIDTH-2: call void @sincospi(double [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])4251;4252; LIBMVEC-SVE-LABEL: define void @sincospi_f644253; LIBMVEC-SVE-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {4254; LIBMVEC-SVE: call void @sincospi(double [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])4255;4256; SLEEF-NEON-LABEL: define void @sincospi_f644257; SLEEF-NEON-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {4258; SLEEF-NEON: call void @sincospi(double [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])4259;4260; SLEEF-SVE-LABEL: define void @sincospi_f644261; SLEEF-SVE-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {4262; SLEEF-SVE: call void @sincospi(double [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])4263;4264; SLEEF-SVE-NOPRED-LABEL: define void @sincospi_f644265; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {4266; SLEEF-SVE-NOPRED: call void @sincospi(double [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])4267;4268; ARMPL-NEON-LABEL: define void @sincospi_f644269; ARMPL-NEON-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {4270; ARMPL-NEON: call void @sincospi(double [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])4271;4272; ARMPL-SVE-LABEL: define void @sincospi_f644273; ARMPL-SVE-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {4274; ARMPL-SVE: call void @sincospi(double [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])4275;4276; ARMPL-SVE-NOPRED-LABEL: define void @sincospi_f644277; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {4278; ARMPL-SVE-NOPRED: call void @sincospi(double [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])4279;4280entry:4281 br label %for.body4282 4283for.body:4284 %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]4285 %gepa = getelementptr double, ptr %a, i64 %indvars.iv4286 %num = load double, ptr %gepa, align 84287 %gepb = getelementptr double, ptr %b, i64 %indvars.iv4288 %gepc = getelementptr double, ptr %c, i64 %indvars.iv4289 call void @sincospi(double %num, ptr %gepb, ptr %gepc)4290 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 14291 %exitcond = icmp eq i64 %indvars.iv.next, 10004292 br i1 %exitcond, label %for.cond.cleanup, label %for.body4293 4294for.cond.cleanup:4295 ret void4296}4297 4298define void @sincospi_f32(ptr noalias %a, ptr noalias %b, ptr noalias %c) {4299; LIBMVEC-NEON-LABEL: define void @sincospi_f324300; LIBMVEC-NEON-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {4301; LIBMVEC-NEON: call void @sincospif(float [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])4302;4303; LIBMVEC-NEON-WIDTH-2-LABEL: define void @sincospi_f324304; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {4305; LIBMVEC-NEON-WIDTH-2: call void @sincospif(float [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])4306;4307; LIBMVEC-SVE-LABEL: define void @sincospi_f324308; LIBMVEC-SVE-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {4309; LIBMVEC-SVE: call void @sincospif(float [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])4310;4311; SLEEF-NEON-LABEL: define void @sincospi_f324312; SLEEF-NEON-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {4313; SLEEF-NEON: call void @sincospif(float [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])4314;4315; SLEEF-SVE-LABEL: define void @sincospi_f324316; SLEEF-SVE-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {4317; SLEEF-SVE: call void @sincospif(float [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])4318;4319; SLEEF-SVE-NOPRED-LABEL: define void @sincospi_f324320; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {4321; SLEEF-SVE-NOPRED: call void @sincospif(float [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])4322;4323; ARMPL-NEON-LABEL: define void @sincospi_f324324; ARMPL-NEON-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {4325; ARMPL-NEON: call void @sincospif(float [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])4326;4327; ARMPL-SVE-LABEL: define void @sincospi_f324328; ARMPL-SVE-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {4329; ARMPL-SVE: call void @sincospif(float [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])4330;4331; ARMPL-SVE-NOPRED-LABEL: define void @sincospi_f324332; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr noalias [[C:%.*]]) #[[ATTR0]] {4333; ARMPL-SVE-NOPRED: call void @sincospif(float [[NUM:%.*]], ptr [[GEPB:%.*]], ptr [[GEPC:%.*]])4334;4335entry:4336 br label %for.body4337 4338for.body:4339 %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]4340 %gepa = getelementptr float, ptr %a, i64 %indvars.iv4341 %num = load float, ptr %gepa, align 84342 %gepb = getelementptr float, ptr %b, i64 %indvars.iv4343 %gepc = getelementptr float, ptr %c, i64 %indvars.iv4344 call void @sincospif(float %num, ptr %gepb, ptr %gepc)4345 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 14346 %exitcond = icmp eq i64 %indvars.iv.next, 10004347 br i1 %exitcond, label %for.cond.cleanup, label %for.body4348 4349for.cond.cleanup:4350 ret void4351}4352 4353declare double @sinh(double)4354declare float @sinhf(float)4355 4356define void @sinh_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {4357; LIBMVEC-NEON-LABEL: define void @sinh_f644358; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4359; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2v_sinh(<2 x double> [[WIDE_LOAD:%.*]])4360;4361; LIBMVEC-NEON-WIDTH-2-LABEL: define void @sinh_f644362; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4363; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2v_sinh(<2 x double> [[WIDE_LOAD:%.*]])4364;4365; LIBMVEC-SVE-LABEL: define void @sinh_f644366; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4367; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_sinh(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])4368;4369; SLEEF-NEON-LABEL: define void @sinh_f644370; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4371; SLEEF-NEON: [[TMP2:%.*]] = call <2 x double> @_ZGVnN2v_sinh(<2 x double> [[WIDE_LOAD:%.*]])4372;4373; SLEEF-SVE-LABEL: define void @sinh_f644374; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4375; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_sinh(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])4376;4377; SLEEF-SVE-NOPRED-LABEL: define void @sinh_f644378; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4379; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_sinh(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))4380; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call double @sinh(double [[IN:%.*]])4381;4382; ARMPL-NEON-LABEL: define void @sinh_f644383; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4384; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @armpl_vsinhq_f64(<2 x double> [[WIDE_LOAD:%.*]])4385;4386; ARMPL-SVE-LABEL: define void @sinh_f644387; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4388; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @armpl_svsinh_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])4389;4390; ARMPL-SVE-NOPRED-LABEL: define void @sinh_f644391; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4392; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @armpl_svsinh_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))4393; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call double @sinh(double [[IN:%.*]])4394;4395 entry:4396 br label %for.body4397 4398 for.body:4399 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]4400 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv4401 %in = load double, ptr %in.gep, align 84402 %call = tail call double @sinh(double %in)4403 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv4404 store double %call, ptr %out.gep, align 84405 %iv.next = add nuw nsw i64 %iv, 14406 %exitcond = icmp eq i64 %iv.next, 10004407 br i1 %exitcond, label %for.end, label %for.body4408 4409 for.end:4410 ret void4411}4412 4413define void @sinh_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {4414; LIBMVEC-NEON-LABEL: define void @sinh_f324415; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4416; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @_ZGVnN4v_sinhf(<4 x float> [[WIDE_LOAD:%.*]])4417;4418; LIBMVEC-NEON-WIDTH-2-LABEL: define void @sinh_f324419; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4420; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x float> @_ZGVnN2v_sinhf(<2 x float> [[WIDE_LOAD:%.*]])4421;4422; LIBMVEC-SVE-LABEL: define void @sinh_f324423; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4424; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_sinhf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])4425;4426; SLEEF-NEON-LABEL: define void @sinh_f324427; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4428; SLEEF-NEON: [[TMP2:%.*]] = call <4 x float> @_ZGVnN4v_sinhf(<4 x float> [[WIDE_LOAD:%.*]])4429;4430; SLEEF-SVE-LABEL: define void @sinh_f324431; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4432; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_sinhf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])4433;4434; SLEEF-SVE-NOPRED-LABEL: define void @sinh_f324435; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4436; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_sinhf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))4437; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call float @sinhf(float [[IN:%.*]])4438;4439; ARMPL-NEON-LABEL: define void @sinh_f324440; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4441; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @armpl_vsinhq_f32(<4 x float> [[WIDE_LOAD:%.*]])4442;4443; ARMPL-SVE-LABEL: define void @sinh_f324444; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4445; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @armpl_svsinh_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])4446;4447; ARMPL-SVE-NOPRED-LABEL: define void @sinh_f324448; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4449; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @armpl_svsinh_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))4450; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call float @sinhf(float [[IN:%.*]])4451;4452 entry:4453 br label %for.body4454 4455 for.body:4456 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]4457 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv4458 %in = load float, ptr %in.gep, align 84459 %call = tail call float @sinhf(float %in)4460 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv4461 store float %call, ptr %out.gep, align 44462 %iv.next = add nuw nsw i64 %iv, 14463 %exitcond = icmp eq i64 %iv.next, 10004464 br i1 %exitcond, label %for.end, label %for.body4465 4466 for.end:4467 ret void4468}4469 4470declare double @sinpi(double)4471declare float @sinpif(float)4472 4473define void @sinpi_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {4474; LIBMVEC-NEON-LABEL: define void @sinpi_f644475; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4476; LIBMVEC-NEON: [[CALL:%.*]] = tail call double @sinpi(double [[IN:%.*]])4477;4478; LIBMVEC-NEON-WIDTH-2-LABEL: define void @sinpi_f644479; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4480; LIBMVEC-NEON-WIDTH-2: [[CALL:%.*]] = tail call double @sinpi(double [[IN:%.*]])4481;4482; LIBMVEC-SVE-LABEL: define void @sinpi_f644483; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4484; LIBMVEC-SVE: [[CALL:%.*]] = tail call double @sinpi(double [[IN:%.*]])4485;4486; SLEEF-NEON-LABEL: define void @sinpi_f644487; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4488; SLEEF-NEON: [[TMP2:%.*]] = call <2 x double> @_ZGVnN2v_sinpi(<2 x double> [[WIDE_LOAD:%.*]])4489;4490; SLEEF-SVE-LABEL: define void @sinpi_f644491; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4492; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_sinpi(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])4493;4494; SLEEF-SVE-NOPRED-LABEL: define void @sinpi_f644495; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4496; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_sinpi(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))4497; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call double @sinpi(double [[IN:%.*]])4498;4499; ARMPL-NEON-LABEL: define void @sinpi_f644500; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4501; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @armpl_vsinpiq_f64(<2 x double> [[WIDE_LOAD:%.*]])4502;4503; ARMPL-SVE-LABEL: define void @sinpi_f644504; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4505; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @armpl_svsinpi_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])4506;4507; ARMPL-SVE-NOPRED-LABEL: define void @sinpi_f644508; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4509; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @armpl_svsinpi_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))4510; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call double @sinpi(double [[IN:%.*]])4511;4512 entry:4513 br label %for.body4514 4515 for.body:4516 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]4517 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv4518 %in = load double, ptr %in.gep, align 84519 %call = tail call double @sinpi(double %in)4520 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv4521 store double %call, ptr %out.gep, align 84522 %iv.next = add nuw nsw i64 %iv, 14523 %exitcond = icmp eq i64 %iv.next, 10004524 br i1 %exitcond, label %for.end, label %for.body4525 4526 for.end:4527 ret void4528}4529 4530define void @sinpi_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {4531; LIBMVEC-NEON-LABEL: define void @sinpi_f324532; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4533; LIBMVEC-NEON: [[CALL:%.*]] = tail call float @sinpif(float [[IN:%.*]])4534;4535; LIBMVEC-NEON-WIDTH-2-LABEL: define void @sinpi_f324536; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4537; LIBMVEC-NEON-WIDTH-2: [[CALL:%.*]] = tail call float @sinpif(float [[IN:%.*]])4538;4539; LIBMVEC-SVE-LABEL: define void @sinpi_f324540; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4541; LIBMVEC-SVE: [[CALL:%.*]] = tail call float @sinpif(float [[IN:%.*]])4542;4543; SLEEF-NEON-LABEL: define void @sinpi_f324544; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4545; SLEEF-NEON: [[TMP2:%.*]] = call <4 x float> @_ZGVnN4v_sinpif(<4 x float> [[WIDE_LOAD:%.*]])4546;4547; SLEEF-SVE-LABEL: define void @sinpi_f324548; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4549; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_sinpif(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])4550;4551; SLEEF-SVE-NOPRED-LABEL: define void @sinpi_f324552; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4553; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_sinpif(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))4554; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call float @sinpif(float [[IN:%.*]])4555;4556; ARMPL-NEON-LABEL: define void @sinpi_f324557; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4558; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @armpl_vsinpiq_f32(<4 x float> [[WIDE_LOAD:%.*]])4559;4560; ARMPL-SVE-LABEL: define void @sinpi_f324561; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4562; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @armpl_svsinpi_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])4563;4564; ARMPL-SVE-NOPRED-LABEL: define void @sinpi_f324565; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4566; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @armpl_svsinpi_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))4567; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call float @sinpif(float [[IN:%.*]])4568;4569 entry:4570 br label %for.body4571 4572 for.body:4573 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]4574 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv4575 %in = load float, ptr %in.gep, align 84576 %call = tail call float @sinpif(float %in)4577 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv4578 store float %call, ptr %out.gep, align 44579 %iv.next = add nuw nsw i64 %iv, 14580 %exitcond = icmp eq i64 %iv.next, 10004581 br i1 %exitcond, label %for.end, label %for.body4582 4583 for.end:4584 ret void4585}4586 4587declare double @sqrt(double)4588declare float @sqrtf(float)4589 4590define void @sqrt_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {4591; LIBMVEC-NEON-LABEL: define void @sqrt_f644592; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4593; LIBMVEC-NEON: [[CALL:%.*]] = tail call double @sqrt(double [[IN:%.*]])4594;4595; LIBMVEC-NEON-WIDTH-2-LABEL: define void @sqrt_f644596; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4597; LIBMVEC-NEON-WIDTH-2: [[CALL:%.*]] = tail call double @sqrt(double [[IN:%.*]])4598;4599; LIBMVEC-SVE-LABEL: define void @sqrt_f644600; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4601; LIBMVEC-SVE: [[CALL:%.*]] = tail call double @sqrt(double [[IN:%.*]])4602;4603; SLEEF-NEON-LABEL: define void @sqrt_f644604; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4605; SLEEF-NEON: [[TMP2:%.*]] = call <2 x double> @_ZGVnN2v_sqrt(<2 x double> [[WIDE_LOAD:%.*]])4606;4607; SLEEF-SVE-LABEL: define void @sqrt_f644608; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4609; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_sqrt(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])4610;4611; SLEEF-SVE-NOPRED-LABEL: define void @sqrt_f644612; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4613; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_sqrt(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))4614; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call double @sqrt(double [[IN:%.*]])4615;4616; ARMPL-NEON-LABEL: define void @sqrt_f644617; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4618; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @armpl_vsqrtq_f64(<2 x double> [[WIDE_LOAD:%.*]])4619;4620; ARMPL-SVE-LABEL: define void @sqrt_f644621; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4622; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @armpl_svsqrt_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])4623;4624; ARMPL-SVE-NOPRED-LABEL: define void @sqrt_f644625; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4626; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @armpl_svsqrt_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))4627; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call double @sqrt(double [[IN:%.*]])4628;4629 entry:4630 br label %for.body4631 4632 for.body:4633 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]4634 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv4635 %in = load double, ptr %in.gep, align 84636 %call = tail call double @sqrt(double %in)4637 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv4638 store double %call, ptr %out.gep, align 84639 %iv.next = add nuw nsw i64 %iv, 14640 %exitcond = icmp eq i64 %iv.next, 10004641 br i1 %exitcond, label %for.end, label %for.body4642 4643 for.end:4644 ret void4645}4646 4647define void @sqrt_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {4648; LIBMVEC-NEON-LABEL: define void @sqrt_f324649; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4650; LIBMVEC-NEON: [[CALL:%.*]] = tail call float @sqrtf(float [[IN:%.*]])4651;4652; LIBMVEC-NEON-WIDTH-2-LABEL: define void @sqrt_f324653; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4654; LIBMVEC-NEON-WIDTH-2: [[CALL:%.*]] = tail call float @sqrtf(float [[IN:%.*]])4655;4656; LIBMVEC-SVE-LABEL: define void @sqrt_f324657; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4658; LIBMVEC-SVE: [[CALL:%.*]] = tail call float @sqrtf(float [[IN:%.*]])4659;4660; SLEEF-NEON-LABEL: define void @sqrt_f324661; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4662; SLEEF-NEON: [[TMP2:%.*]] = call <4 x float> @_ZGVnN4v_sqrtf(<4 x float> [[WIDE_LOAD:%.*]])4663;4664; SLEEF-SVE-LABEL: define void @sqrt_f324665; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4666; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_sqrtf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])4667;4668; SLEEF-SVE-NOPRED-LABEL: define void @sqrt_f324669; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4670; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_sqrtf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))4671; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call float @sqrtf(float [[IN:%.*]])4672;4673; ARMPL-NEON-LABEL: define void @sqrt_f324674; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4675; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @armpl_vsqrtq_f32(<4 x float> [[WIDE_LOAD:%.*]])4676;4677; ARMPL-SVE-LABEL: define void @sqrt_f324678; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4679; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @armpl_svsqrt_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])4680;4681; ARMPL-SVE-NOPRED-LABEL: define void @sqrt_f324682; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4683; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @armpl_svsqrt_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))4684; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call float @sqrtf(float [[IN:%.*]])4685;4686 entry:4687 br label %for.body4688 4689 for.body:4690 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]4691 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv4692 %in = load float, ptr %in.gep, align 84693 %call = tail call float @sqrtf(float %in)4694 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv4695 store float %call, ptr %out.gep, align 44696 %iv.next = add nuw nsw i64 %iv, 14697 %exitcond = icmp eq i64 %iv.next, 10004698 br i1 %exitcond, label %for.end, label %for.body4699 4700 for.end:4701 ret void4702}4703 4704declare double @tan(double)4705declare float @tanf(float)4706 4707define void @tan_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {4708; LIBMVEC-NEON-LABEL: define void @tan_f644709; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4710; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2v_tan(<2 x double> [[WIDE_LOAD:%.*]])4711;4712; LIBMVEC-NEON-WIDTH-2-LABEL: define void @tan_f644713; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4714; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2v_tan(<2 x double> [[WIDE_LOAD:%.*]])4715;4716; LIBMVEC-SVE-LABEL: define void @tan_f644717; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4718; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_tan(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])4719;4720; SLEEF-NEON-LABEL: define void @tan_f644721; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4722; SLEEF-NEON: [[TMP2:%.*]] = call <2 x double> @_ZGVnN2v_tan(<2 x double> [[WIDE_LOAD:%.*]])4723;4724; SLEEF-SVE-LABEL: define void @tan_f644725; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4726; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_tan(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])4727;4728; SLEEF-SVE-NOPRED-LABEL: define void @tan_f644729; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4730; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_tan(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))4731; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call double @tan(double [[IN:%.*]])4732;4733; ARMPL-NEON-LABEL: define void @tan_f644734; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4735; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @armpl_vtanq_f64(<2 x double> [[WIDE_LOAD:%.*]])4736;4737; ARMPL-SVE-LABEL: define void @tan_f644738; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4739; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @armpl_svtan_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])4740;4741; ARMPL-SVE-NOPRED-LABEL: define void @tan_f644742; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4743; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @armpl_svtan_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))4744; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call double @tan(double [[IN:%.*]])4745;4746 entry:4747 br label %for.body4748 4749 for.body:4750 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]4751 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv4752 %in = load double, ptr %in.gep, align 84753 %call = tail call double @tan(double %in)4754 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv4755 store double %call, ptr %out.gep, align 84756 %iv.next = add nuw nsw i64 %iv, 14757 %exitcond = icmp eq i64 %iv.next, 10004758 br i1 %exitcond, label %for.end, label %for.body4759 4760 for.end:4761 ret void4762}4763 4764define void @tan_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {4765; LIBMVEC-NEON-LABEL: define void @tan_f324766; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4767; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @_ZGVnN4v_tanf(<4 x float> [[WIDE_LOAD:%.*]])4768;4769; LIBMVEC-NEON-WIDTH-2-LABEL: define void @tan_f324770; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4771; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x float> @_ZGVnN2v_tanf(<2 x float> [[WIDE_LOAD:%.*]])4772;4773; LIBMVEC-SVE-LABEL: define void @tan_f324774; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4775; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_tanf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])4776;4777; SLEEF-NEON-LABEL: define void @tan_f324778; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4779; SLEEF-NEON: [[TMP2:%.*]] = call <4 x float> @_ZGVnN4v_tanf(<4 x float> [[WIDE_LOAD:%.*]])4780;4781; SLEEF-SVE-LABEL: define void @tan_f324782; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4783; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_tanf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])4784;4785; SLEEF-SVE-NOPRED-LABEL: define void @tan_f324786; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4787; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_tanf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))4788; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call float @tanf(float [[IN:%.*]])4789;4790; ARMPL-NEON-LABEL: define void @tan_f324791; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4792; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @armpl_vtanq_f32(<4 x float> [[WIDE_LOAD:%.*]])4793;4794; ARMPL-SVE-LABEL: define void @tan_f324795; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4796; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @armpl_svtan_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])4797;4798; ARMPL-SVE-NOPRED-LABEL: define void @tan_f324799; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4800; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @armpl_svtan_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))4801; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call float @tanf(float [[IN:%.*]])4802;4803 entry:4804 br label %for.body4805 4806 for.body:4807 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]4808 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv4809 %in = load float, ptr %in.gep, align 84810 %call = tail call float @tanf(float %in)4811 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv4812 store float %call, ptr %out.gep, align 44813 %iv.next = add nuw nsw i64 %iv, 14814 %exitcond = icmp eq i64 %iv.next, 10004815 br i1 %exitcond, label %for.end, label %for.body4816 4817 for.end:4818 ret void4819}4820 4821declare double @tanh(double)4822declare float @tanhf(float)4823 4824define void @tanh_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {4825; LIBMVEC-NEON-LABEL: define void @tanh_f644826; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4827; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2v_tanh(<2 x double> [[WIDE_LOAD:%.*]])4828;4829; LIBMVEC-NEON-WIDTH-2-LABEL: define void @tanh_f644830; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4831; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @_ZGVnN2v_tanh(<2 x double> [[WIDE_LOAD:%.*]])4832;4833; LIBMVEC-SVE-LABEL: define void @tanh_f644834; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4835; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_tanh(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])4836;4837; SLEEF-NEON-LABEL: define void @tanh_f644838; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4839; SLEEF-NEON: [[TMP2:%.*]] = call <2 x double> @_ZGVnN2v_tanh(<2 x double> [[WIDE_LOAD:%.*]])4840;4841; SLEEF-SVE-LABEL: define void @tanh_f644842; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4843; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_tanh(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])4844;4845; SLEEF-SVE-NOPRED-LABEL: define void @tanh_f644846; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4847; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_tanh(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))4848; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call double @tanh(double [[IN:%.*]])4849;4850; ARMPL-NEON-LABEL: define void @tanh_f644851; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4852; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @armpl_vtanhq_f64(<2 x double> [[WIDE_LOAD:%.*]])4853;4854; ARMPL-SVE-LABEL: define void @tanh_f644855; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4856; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @armpl_svtanh_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])4857;4858; ARMPL-SVE-NOPRED-LABEL: define void @tanh_f644859; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4860; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @armpl_svtanh_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))4861; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call double @tanh(double [[IN:%.*]])4862;4863 entry:4864 br label %for.body4865 4866 for.body:4867 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]4868 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv4869 %in = load double, ptr %in.gep, align 84870 %call = tail call double @tanh(double %in)4871 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv4872 store double %call, ptr %out.gep, align 84873 %iv.next = add nuw nsw i64 %iv, 14874 %exitcond = icmp eq i64 %iv.next, 10004875 br i1 %exitcond, label %for.end, label %for.body4876 4877 for.end:4878 ret void4879}4880 4881define void @tanh_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {4882; LIBMVEC-NEON-LABEL: define void @tanh_f324883; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4884; LIBMVEC-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @_ZGVnN4v_tanhf(<4 x float> [[WIDE_LOAD:%.*]])4885;4886; LIBMVEC-NEON-WIDTH-2-LABEL: define void @tanh_f324887; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4888; LIBMVEC-NEON-WIDTH-2: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x float> @_ZGVnN2v_tanhf(<2 x float> [[WIDE_LOAD:%.*]])4889;4890; LIBMVEC-SVE-LABEL: define void @tanh_f324891; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4892; LIBMVEC-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_tanhf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])4893;4894; SLEEF-NEON-LABEL: define void @tanh_f324895; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4896; SLEEF-NEON: [[TMP2:%.*]] = call <4 x float> @_ZGVnN4v_tanhf(<4 x float> [[WIDE_LOAD:%.*]])4897;4898; SLEEF-SVE-LABEL: define void @tanh_f324899; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4900; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_tanhf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])4901;4902; SLEEF-SVE-NOPRED-LABEL: define void @tanh_f324903; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4904; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_tanhf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))4905; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call float @tanhf(float [[IN:%.*]])4906;4907; ARMPL-NEON-LABEL: define void @tanh_f324908; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4909; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @armpl_vtanhq_f32(<4 x float> [[WIDE_LOAD:%.*]])4910;4911; ARMPL-SVE-LABEL: define void @tanh_f324912; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4913; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @armpl_svtanh_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])4914;4915; ARMPL-SVE-NOPRED-LABEL: define void @tanh_f324916; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4917; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @armpl_svtanh_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))4918; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call float @tanhf(float [[IN:%.*]])4919;4920 entry:4921 br label %for.body4922 4923 for.body:4924 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]4925 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv4926 %in = load float, ptr %in.gep, align 84927 %call = tail call float @tanhf(float %in)4928 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv4929 store float %call, ptr %out.gep, align 44930 %iv.next = add nuw nsw i64 %iv, 14931 %exitcond = icmp eq i64 %iv.next, 10004932 br i1 %exitcond, label %for.end, label %for.body4933 4934 for.end:4935 ret void4936}4937 4938declare double @tgamma(double)4939declare float @tgammaf(float)4940 4941define void @tgamma_f64(ptr noalias %in.ptr, ptr noalias %out.ptr) {4942; LIBMVEC-NEON-LABEL: define void @tgamma_f644943; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4944; LIBMVEC-NEON: [[CALL:%.*]] = tail call double @tgamma(double [[IN:%.*]])4945;4946; LIBMVEC-NEON-WIDTH-2-LABEL: define void @tgamma_f644947; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4948; LIBMVEC-NEON-WIDTH-2: [[CALL:%.*]] = tail call double @tgamma(double [[IN:%.*]])4949;4950; LIBMVEC-SVE-LABEL: define void @tgamma_f644951; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4952; LIBMVEC-SVE: [[CALL:%.*]] = tail call double @tgamma(double [[IN:%.*]])4953;4954; SLEEF-NEON-LABEL: define void @tgamma_f644955; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4956; SLEEF-NEON: [[TMP2:%.*]] = call <2 x double> @_ZGVnN2v_tgamma(<2 x double> [[WIDE_LOAD:%.*]])4957;4958; SLEEF-SVE-LABEL: define void @tgamma_f644959; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4960; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_tgamma(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])4961;4962; SLEEF-SVE-NOPRED-LABEL: define void @tgamma_f644963; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4964; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @_ZGVsMxv_tgamma(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))4965; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call double @tgamma(double [[IN:%.*]])4966;4967; ARMPL-NEON-LABEL: define void @tgamma_f644968; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4969; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <2 x double> @armpl_vtgammaq_f64(<2 x double> [[WIDE_LOAD:%.*]])4970;4971; ARMPL-SVE-LABEL: define void @tgamma_f644972; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4973; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 2 x double> @armpl_svtgamma_f64_x(<vscale x 2 x double> [[WIDE_MASKED_LOAD:%.*]], <vscale x 2 x i1> [[ACTIVE_LANE_MASK:%.*]])4974;4975; ARMPL-SVE-NOPRED-LABEL: define void @tgamma_f644976; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {4977; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 2 x double> @armpl_svtgamma_f64_x(<vscale x 2 x double> [[WIDE_LOAD:%.*]], <vscale x 2 x i1> splat (i1 true))4978; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call double @tgamma(double [[IN:%.*]])4979;4980 entry:4981 br label %for.body4982 4983 for.body:4984 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]4985 %in.gep = getelementptr inbounds double, ptr %in.ptr, i64 %iv4986 %in = load double, ptr %in.gep, align 84987 %call = tail call double @tgamma(double %in)4988 %out.gep = getelementptr inbounds double, ptr %out.ptr, i64 %iv4989 store double %call, ptr %out.gep, align 84990 %iv.next = add nuw nsw i64 %iv, 14991 %exitcond = icmp eq i64 %iv.next, 10004992 br i1 %exitcond, label %for.end, label %for.body4993 4994 for.end:4995 ret void4996}4997 4998define void @tgamma_f32(ptr noalias %in.ptr, ptr noalias %out.ptr) {4999; LIBMVEC-NEON-LABEL: define void @tgamma_f325000; LIBMVEC-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {5001; LIBMVEC-NEON: [[CALL:%.*]] = tail call float @tgammaf(float [[IN:%.*]])5002;5003; LIBMVEC-NEON-WIDTH-2-LABEL: define void @tgamma_f325004; LIBMVEC-NEON-WIDTH-2-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {5005; LIBMVEC-NEON-WIDTH-2: [[CALL:%.*]] = tail call float @tgammaf(float [[IN:%.*]])5006;5007; LIBMVEC-SVE-LABEL: define void @tgamma_f325008; LIBMVEC-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {5009; LIBMVEC-SVE: [[CALL:%.*]] = tail call float @tgammaf(float [[IN:%.*]])5010;5011; SLEEF-NEON-LABEL: define void @tgamma_f325012; SLEEF-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {5013; SLEEF-NEON: [[TMP2:%.*]] = call <4 x float> @_ZGVnN4v_tgammaf(<4 x float> [[WIDE_LOAD:%.*]])5014;5015; SLEEF-SVE-LABEL: define void @tgamma_f325016; SLEEF-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {5017; SLEEF-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_tgammaf(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])5018;5019; SLEEF-SVE-NOPRED-LABEL: define void @tgamma_f325020; SLEEF-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {5021; SLEEF-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @_ZGVsMxv_tgammaf(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))5022; SLEEF-SVE-NOPRED: [[CALL:%.*]] = tail call float @tgammaf(float [[IN:%.*]])5023;5024; ARMPL-NEON-LABEL: define void @tgamma_f325025; ARMPL-NEON-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {5026; ARMPL-NEON: [[TMP2:%.*]] = call aarch64_vector_pcs <4 x float> @armpl_vtgammaq_f32(<4 x float> [[WIDE_LOAD:%.*]])5027;5028; ARMPL-SVE-LABEL: define void @tgamma_f325029; ARMPL-SVE-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {5030; ARMPL-SVE: [[TMP12:%.*]] = call <vscale x 4 x float> @armpl_svtgamma_f32_x(<vscale x 4 x float> [[WIDE_MASKED_LOAD:%.*]], <vscale x 4 x i1> [[ACTIVE_LANE_MASK:%.*]])5031;5032; ARMPL-SVE-NOPRED-LABEL: define void @tgamma_f325033; ARMPL-SVE-NOPRED-SAME: (ptr noalias [[IN_PTR:%.*]], ptr noalias [[OUT_PTR:%.*]]) #[[ATTR0]] {5034; ARMPL-SVE-NOPRED: [[TMP8:%.*]] = call <vscale x 4 x float> @armpl_svtgamma_f32_x(<vscale x 4 x float> [[WIDE_LOAD:%.*]], <vscale x 4 x i1> splat (i1 true))5035; ARMPL-SVE-NOPRED: [[CALL:%.*]] = tail call float @tgammaf(float [[IN:%.*]])5036;5037 entry:5038 br label %for.body5039 5040 for.body:5041 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]5042 %in.gep = getelementptr inbounds float, ptr %in.ptr, i64 %iv5043 %in = load float, ptr %in.gep, align 85044 %call = tail call float @tgammaf(float %in)5045 %out.gep = getelementptr inbounds float, ptr %out.ptr, i64 %iv5046 store float %call, ptr %out.gep, align 45047 %iv.next = add nuw nsw i64 %iv, 15048 %exitcond = icmp eq i64 %iv.next, 10005049 br i1 %exitcond, label %for.end, label %for.body5050 5051 for.end:5052 ret void5053}5054