brintos

brintos / llvm-project-archived public Read only

0
0
Text · 80.1 KiB · 34d65a3 Raw
1412 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes=inject-tli-mappings,slp-vectorizer -vector-library=Accelerate -S %s | FileCheck %s3; RUN: opt -passes=inject-tli-mappings,slp-vectorizer -S %s | FileCheck --check-prefix NOACCELERATE %s4 5target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"6target triple = "arm64-apple-ios14.0.0"7 8declare float @llvm.sin.f32(float)9 10; Accelerate provides sin() for <4 x float>11define <4 x float> @int_sin_4x(ptr %a) {12; CHECK-LABEL: @int_sin_4x(13; CHECK-NEXT:  entry:14; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 1615; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @vsinf(<4 x float> [[TMP0]])16; CHECK-NEXT:    ret <4 x float> [[TMP1]]17;18; NOACCELERATE-LABEL: @int_sin_4x(19; NOACCELERATE-NEXT:  entry:20; NOACCELERATE-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 1621; NOACCELERATE-NEXT:    [[VECEXT:%.*]] = extractelement <4 x float> [[TMP0]], i32 022; NOACCELERATE-NEXT:    [[TMP1:%.*]] = tail call fast float @llvm.sin.f32(float [[VECEXT]])23; NOACCELERATE-NEXT:    [[VECINS:%.*]] = insertelement <4 x float> zeroinitializer, float [[TMP1]], i32 024; NOACCELERATE-NEXT:    [[VECEXT_1:%.*]] = extractelement <4 x float> [[TMP0]], i32 125; NOACCELERATE-NEXT:    [[TMP2:%.*]] = tail call fast float @llvm.sin.f32(float [[VECEXT_1]])26; NOACCELERATE-NEXT:    [[VECINS_1:%.*]] = insertelement <4 x float> [[VECINS]], float [[TMP2]], i32 127; NOACCELERATE-NEXT:    [[VECEXT_2:%.*]] = extractelement <4 x float> [[TMP0]], i32 228; NOACCELERATE-NEXT:    [[TMP3:%.*]] = tail call fast float @llvm.sin.f32(float [[VECEXT_2]])29; NOACCELERATE-NEXT:    [[VECINS_2:%.*]] = insertelement <4 x float> [[VECINS_1]], float [[TMP3]], i32 230; NOACCELERATE-NEXT:    [[VECEXT_3:%.*]] = extractelement <4 x float> [[TMP0]], i32 331; NOACCELERATE-NEXT:    [[TMP4:%.*]] = tail call fast float @llvm.sin.f32(float [[VECEXT_3]])32; NOACCELERATE-NEXT:    [[VECINS_31:%.*]] = insertelement <4 x float> [[VECINS_2]], float [[TMP4]], i32 333; NOACCELERATE-NEXT:    ret <4 x float> [[VECINS_31]]34;35entry:36  %0 = load <4 x float>, ptr %a, align 1637  %vecext = extractelement <4 x float> %0, i32 038  %1 = tail call fast float @llvm.sin.f32(float %vecext)39  %vecins = insertelement <4 x float> zeroinitializer, float %1, i32 040  %vecext.1 = extractelement <4 x float> %0, i32 141  %2 = tail call fast float @llvm.sin.f32(float %vecext.1)42  %vecins.1 = insertelement <4 x float> %vecins, float %2, i32 143  %vecext.2 = extractelement <4 x float> %0, i32 244  %3 = tail call fast float @llvm.sin.f32(float %vecext.2)45  %vecins.2 = insertelement <4 x float> %vecins.1, float %3, i32 246  %vecext.3 = extractelement <4 x float> %0, i32 347  %4 = tail call fast float @llvm.sin.f32(float %vecext.3)48  %vecins.3 = insertelement <4 x float> %vecins.2, float %4, i32 349  ret <4 x float> %vecins.350}51 52declare float @ceilf(float) readonly nounwind willreturn53 54define <4 x float> @ceil_4x(ptr %a) {55; CHECK-LABEL: @ceil_4x(56; CHECK-NEXT:  entry:57; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 1658; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @llvm.ceil.v4f32(<4 x float> [[TMP0]])59; CHECK-NEXT:    ret <4 x float> [[TMP1]]60;61; NOACCELERATE-LABEL: @ceil_4x(62; NOACCELERATE-NEXT:  entry:63; NOACCELERATE-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 1664; NOACCELERATE-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @llvm.ceil.v4f32(<4 x float> [[TMP0]])65; NOACCELERATE-NEXT:    ret <4 x float> [[TMP1]]66;67entry:68  %0 = load <4 x float>, ptr %a, align 1669  %vecext = extractelement <4 x float> %0, i32 070  %1 = tail call fast float @ceilf(float %vecext)71  %vecins = insertelement <4 x float> zeroinitializer, float %1, i32 072  %vecext.1 = extractelement <4 x float> %0, i32 173  %2 = tail call fast float @ceilf(float %vecext.1)74  %vecins.1 = insertelement <4 x float> %vecins, float %2, i32 175  %vecext.2 = extractelement <4 x float> %0, i32 276  %3 = tail call fast float @ceilf(float %vecext.2)77  %vecins.2 = insertelement <4 x float> %vecins.1, float %3, i32 278  %vecext.3 = extractelement <4 x float> %0, i32 379  %4 = tail call fast float @ceilf(float %vecext.3)80  %vecins.3 = insertelement <4 x float> %vecins.2, float %4, i32 381  ret <4 x float> %vecins.382}83 84declare float @fabsf(float) readonly nounwind willreturn85 86define <4 x float> @fabs_4x(ptr %a) {87; CHECK-LABEL: @fabs_4x(88; CHECK-NEXT:  entry:89; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 1690; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @llvm.fabs.v4f32(<4 x float> [[TMP0]])91; CHECK-NEXT:    ret <4 x float> [[TMP1]]92;93; NOACCELERATE-LABEL: @fabs_4x(94; NOACCELERATE-NEXT:  entry:95; NOACCELERATE-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 1696; NOACCELERATE-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @llvm.fabs.v4f32(<4 x float> [[TMP0]])97; NOACCELERATE-NEXT:    ret <4 x float> [[TMP1]]98;99entry:100  %0 = load <4 x float>, ptr %a, align 16101  %vecext = extractelement <4 x float> %0, i32 0102  %1 = tail call fast float @fabsf(float %vecext)103  %vecins = insertelement <4 x float> zeroinitializer, float %1, i32 0104  %vecext.1 = extractelement <4 x float> %0, i32 1105  %2 = tail call fast float @fabsf(float %vecext.1)106  %vecins.1 = insertelement <4 x float> %vecins, float %2, i32 1107  %vecext.2 = extractelement <4 x float> %0, i32 2108  %3 = tail call fast float @fabsf(float %vecext.2)109  %vecins.2 = insertelement <4 x float> %vecins.1, float %3, i32 2110  %vecext.3 = extractelement <4 x float> %0, i32 3111  %4 = tail call fast float @fabsf(float %vecext.3)112  %vecins.3 = insertelement <4 x float> %vecins.2, float %4, i32 3113  ret <4 x float> %vecins.3114}115declare float @llvm.fabs.f32(float)116define <4 x float> @int_fabs_4x(ptr %a) {117; CHECK-LABEL: @int_fabs_4x(118; CHECK-NEXT:  entry:119; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 16120; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @llvm.fabs.v4f32(<4 x float> [[TMP0]])121; CHECK-NEXT:    ret <4 x float> [[TMP1]]122;123; NOACCELERATE-LABEL: @int_fabs_4x(124; NOACCELERATE-NEXT:  entry:125; NOACCELERATE-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 16126; NOACCELERATE-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @llvm.fabs.v4f32(<4 x float> [[TMP0]])127; NOACCELERATE-NEXT:    ret <4 x float> [[TMP1]]128;129entry:130  %0 = load <4 x float>, ptr %a, align 16131  %vecext = extractelement <4 x float> %0, i32 0132  %1 = tail call fast float @llvm.fabs.f32(float %vecext)133  %vecins = insertelement <4 x float> zeroinitializer, float %1, i32 0134  %vecext.1 = extractelement <4 x float> %0, i32 1135  %2 = tail call fast float @llvm.fabs.f32(float %vecext.1)136  %vecins.1 = insertelement <4 x float> %vecins, float %2, i32 1137  %vecext.2 = extractelement <4 x float> %0, i32 2138  %3 = tail call fast float @llvm.fabs.f32(float %vecext.2)139  %vecins.2 = insertelement <4 x float> %vecins.1, float %3, i32 2140  %vecext.3 = extractelement <4 x float> %0, i32 3141  %4 = tail call fast float @llvm.fabs.f32(float %vecext.3)142  %vecins.3 = insertelement <4 x float> %vecins.2, float %4, i32 3143  ret <4 x float> %vecins.3144}145declare float @floorf(float) readonly nounwind willreturn146define <4 x float> @floor_4x(ptr %a) {147; CHECK-LABEL: @floor_4x(148; CHECK-NEXT:  entry:149; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 16150; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @llvm.floor.v4f32(<4 x float> [[TMP0]])151; CHECK-NEXT:    ret <4 x float> [[TMP1]]152;153; NOACCELERATE-LABEL: @floor_4x(154; NOACCELERATE-NEXT:  entry:155; NOACCELERATE-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 16156; NOACCELERATE-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @llvm.floor.v4f32(<4 x float> [[TMP0]])157; NOACCELERATE-NEXT:    ret <4 x float> [[TMP1]]158;159entry:160  %0 = load <4 x float>, ptr %a, align 16161  %vecext = extractelement <4 x float> %0, i32 0162  %1 = tail call fast float @floorf(float %vecext)163  %vecins = insertelement <4 x float> zeroinitializer, float %1, i32 0164  %vecext.1 = extractelement <4 x float> %0, i32 1165  %2 = tail call fast float @floorf(float %vecext.1)166  %vecins.1 = insertelement <4 x float> %vecins, float %2, i32 1167  %vecext.2 = extractelement <4 x float> %0, i32 2168  %3 = tail call fast float @floorf(float %vecext.2)169  %vecins.2 = insertelement <4 x float> %vecins.1, float %3, i32 2170  %vecext.3 = extractelement <4 x float> %0, i32 3171  %4 = tail call fast float @floorf(float %vecext.3)172  %vecins.3 = insertelement <4 x float> %vecins.2, float %4, i32 3173  ret <4 x float> %vecins.3174}175declare float @sqrtf(float) readonly nounwind willreturn176define <4 x float> @sqrt_4x(ptr %a) {177; CHECK-LABEL: @sqrt_4x(178; CHECK-NEXT:  entry:179; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 16180; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @llvm.sqrt.v4f32(<4 x float> [[TMP0]])181; CHECK-NEXT:    ret <4 x float> [[TMP1]]182;183; NOACCELERATE-LABEL: @sqrt_4x(184; NOACCELERATE-NEXT:  entry:185; NOACCELERATE-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 16186; NOACCELERATE-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @llvm.sqrt.v4f32(<4 x float> [[TMP0]])187; NOACCELERATE-NEXT:    ret <4 x float> [[TMP1]]188;189entry:190  %0 = load <4 x float>, ptr %a, align 16191  %vecext = extractelement <4 x float> %0, i32 0192  %1 = tail call fast float @sqrtf(float %vecext)193  %vecins = insertelement <4 x float> zeroinitializer, float %1, i32 0194  %vecext.1 = extractelement <4 x float> %0, i32 1195  %2 = tail call fast float @sqrtf(float %vecext.1)196  %vecins.1 = insertelement <4 x float> %vecins, float %2, i32 1197  %vecext.2 = extractelement <4 x float> %0, i32 2198  %3 = tail call fast float @sqrtf(float %vecext.2)199  %vecins.2 = insertelement <4 x float> %vecins.1, float %3, i32 2200  %vecext.3 = extractelement <4 x float> %0, i32 3201  %4 = tail call fast float @sqrtf(float %vecext.3)202  %vecins.3 = insertelement <4 x float> %vecins.2, float %4, i32 3203  ret <4 x float> %vecins.3204}205declare float @expf(float) readonly nounwind willreturn206define <4 x float> @exp_4x(ptr %a) {207; CHECK-LABEL: @exp_4x(208; CHECK-NEXT:  entry:209; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 16210; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @vexpf(<4 x float> [[TMP0]])211; CHECK-NEXT:    ret <4 x float> [[TMP1]]212;213; NOACCELERATE-LABEL: @exp_4x(214; NOACCELERATE-NEXT:  entry:215; NOACCELERATE-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 16216; NOACCELERATE-NEXT:    [[VECEXT:%.*]] = extractelement <4 x float> [[TMP0]], i32 0217; NOACCELERATE-NEXT:    [[TMP1:%.*]] = tail call fast float @expf(float [[VECEXT]])218; NOACCELERATE-NEXT:    [[VECINS:%.*]] = insertelement <4 x float> zeroinitializer, float [[TMP1]], i32 0219; NOACCELERATE-NEXT:    [[VECEXT_1:%.*]] = extractelement <4 x float> [[TMP0]], i32 1220; NOACCELERATE-NEXT:    [[TMP2:%.*]] = tail call fast float @expf(float [[VECEXT_1]])221; NOACCELERATE-NEXT:    [[VECINS_1:%.*]] = insertelement <4 x float> [[VECINS]], float [[TMP2]], i32 1222; NOACCELERATE-NEXT:    [[VECEXT_2:%.*]] = extractelement <4 x float> [[TMP0]], i32 2223; NOACCELERATE-NEXT:    [[TMP3:%.*]] = tail call fast float @expf(float [[VECEXT_2]])224; NOACCELERATE-NEXT:    [[VECINS_2:%.*]] = insertelement <4 x float> [[VECINS_1]], float [[TMP3]], i32 2225; NOACCELERATE-NEXT:    [[VECEXT_3:%.*]] = extractelement <4 x float> [[TMP0]], i32 3226; NOACCELERATE-NEXT:    [[TMP4:%.*]] = tail call fast float @expf(float [[VECEXT_3]])227; NOACCELERATE-NEXT:    [[VECINS_31:%.*]] = insertelement <4 x float> [[VECINS_2]], float [[TMP4]], i32 3228; NOACCELERATE-NEXT:    ret <4 x float> [[VECINS_31]]229;230entry:231  %0 = load <4 x float>, ptr %a, align 16232  %vecext = extractelement <4 x float> %0, i32 0233  %1 = tail call fast float @expf(float %vecext)234  %vecins = insertelement <4 x float> zeroinitializer, float %1, i32 0235  %vecext.1 = extractelement <4 x float> %0, i32 1236  %2 = tail call fast float @expf(float %vecext.1)237  %vecins.1 = insertelement <4 x float> %vecins, float %2, i32 1238  %vecext.2 = extractelement <4 x float> %0, i32 2239  %3 = tail call fast float @expf(float %vecext.2)240  %vecins.2 = insertelement <4 x float> %vecins.1, float %3, i32 2241  %vecext.3 = extractelement <4 x float> %0, i32 3242  %4 = tail call fast float @expf(float %vecext.3)243  %vecins.3 = insertelement <4 x float> %vecins.2, float %4, i32 3244  ret <4 x float> %vecins.3245}246declare float @expm1f(float) readonly nounwind willreturn247define <4 x float> @expm1_4x(ptr %a) {248; CHECK-LABEL: @expm1_4x(249; CHECK-NEXT:  entry:250; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 16251; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @vexpm1f(<4 x float> [[TMP0]])252; CHECK-NEXT:    ret <4 x float> [[TMP1]]253;254; NOACCELERATE-LABEL: @expm1_4x(255; NOACCELERATE-NEXT:  entry:256; NOACCELERATE-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 16257; NOACCELERATE-NEXT:    [[VECEXT:%.*]] = extractelement <4 x float> [[TMP0]], i32 0258; NOACCELERATE-NEXT:    [[TMP1:%.*]] = tail call fast float @expm1f(float [[VECEXT]])259; NOACCELERATE-NEXT:    [[VECINS:%.*]] = insertelement <4 x float> zeroinitializer, float [[TMP1]], i32 0260; NOACCELERATE-NEXT:    [[VECEXT_1:%.*]] = extractelement <4 x float> [[TMP0]], i32 1261; NOACCELERATE-NEXT:    [[TMP2:%.*]] = tail call fast float @expm1f(float [[VECEXT_1]])262; NOACCELERATE-NEXT:    [[VECINS_1:%.*]] = insertelement <4 x float> [[VECINS]], float [[TMP2]], i32 1263; NOACCELERATE-NEXT:    [[VECEXT_2:%.*]] = extractelement <4 x float> [[TMP0]], i32 2264; NOACCELERATE-NEXT:    [[TMP3:%.*]] = tail call fast float @expm1f(float [[VECEXT_2]])265; NOACCELERATE-NEXT:    [[VECINS_2:%.*]] = insertelement <4 x float> [[VECINS_1]], float [[TMP3]], i32 2266; NOACCELERATE-NEXT:    [[VECEXT_3:%.*]] = extractelement <4 x float> [[TMP0]], i32 3267; NOACCELERATE-NEXT:    [[TMP4:%.*]] = tail call fast float @expm1f(float [[VECEXT_3]])268; NOACCELERATE-NEXT:    [[VECINS_3:%.*]] = insertelement <4 x float> [[VECINS_2]], float [[TMP4]], i32 3269; NOACCELERATE-NEXT:    ret <4 x float> [[VECINS_3]]270;271entry:272  %0 = load <4 x float>, ptr %a, align 16273  %vecext = extractelement <4 x float> %0, i32 0274  %1 = tail call fast float @expm1f(float %vecext)275  %vecins = insertelement <4 x float> zeroinitializer, float %1, i32 0276  %vecext.1 = extractelement <4 x float> %0, i32 1277  %2 = tail call fast float @expm1f(float %vecext.1)278  %vecins.1 = insertelement <4 x float> %vecins, float %2, i32 1279  %vecext.2 = extractelement <4 x float> %0, i32 2280  %3 = tail call fast float @expm1f(float %vecext.2)281  %vecins.2 = insertelement <4 x float> %vecins.1, float %3, i32 2282  %vecext.3 = extractelement <4 x float> %0, i32 3283  %4 = tail call fast float @expm1f(float %vecext.3)284  %vecins.3 = insertelement <4 x float> %vecins.2, float %4, i32 3285  ret <4 x float> %vecins.3286}287declare float @logf(float) readonly nounwind willreturn288define <4 x float> @log_4x(ptr %a) {289; CHECK-LABEL: @log_4x(290; CHECK-NEXT:  entry:291; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 16292; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @vlogf(<4 x float> [[TMP0]])293; CHECK-NEXT:    ret <4 x float> [[TMP1]]294;295; NOACCELERATE-LABEL: @log_4x(296; NOACCELERATE-NEXT:  entry:297; NOACCELERATE-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 16298; NOACCELERATE-NEXT:    [[VECEXT:%.*]] = extractelement <4 x float> [[TMP0]], i32 0299; NOACCELERATE-NEXT:    [[TMP1:%.*]] = tail call fast float @logf(float [[VECEXT]])300; NOACCELERATE-NEXT:    [[VECINS:%.*]] = insertelement <4 x float> zeroinitializer, float [[TMP1]], i32 0301; NOACCELERATE-NEXT:    [[VECEXT_1:%.*]] = extractelement <4 x float> [[TMP0]], i32 1302; NOACCELERATE-NEXT:    [[TMP2:%.*]] = tail call fast float @logf(float [[VECEXT_1]])303; NOACCELERATE-NEXT:    [[VECINS_1:%.*]] = insertelement <4 x float> [[VECINS]], float [[TMP2]], i32 1304; NOACCELERATE-NEXT:    [[VECEXT_2:%.*]] = extractelement <4 x float> [[TMP0]], i32 2305; NOACCELERATE-NEXT:    [[TMP3:%.*]] = tail call fast float @logf(float [[VECEXT_2]])306; NOACCELERATE-NEXT:    [[VECINS_2:%.*]] = insertelement <4 x float> [[VECINS_1]], float [[TMP3]], i32 2307; NOACCELERATE-NEXT:    [[VECEXT_3:%.*]] = extractelement <4 x float> [[TMP0]], i32 3308; NOACCELERATE-NEXT:    [[TMP4:%.*]] = tail call fast float @logf(float [[VECEXT_3]])309; NOACCELERATE-NEXT:    [[VECINS_31:%.*]] = insertelement <4 x float> [[VECINS_2]], float [[TMP4]], i32 3310; NOACCELERATE-NEXT:    ret <4 x float> [[VECINS_31]]311;312entry:313  %0 = load <4 x float>, ptr %a, align 16314  %vecext = extractelement <4 x float> %0, i32 0315  %1 = tail call fast float @logf(float %vecext)316  %vecins = insertelement <4 x float> zeroinitializer, float %1, i32 0317  %vecext.1 = extractelement <4 x float> %0, i32 1318  %2 = tail call fast float @logf(float %vecext.1)319  %vecins.1 = insertelement <4 x float> %vecins, float %2, i32 1320  %vecext.2 = extractelement <4 x float> %0, i32 2321  %3 = tail call fast float @logf(float %vecext.2)322  %vecins.2 = insertelement <4 x float> %vecins.1, float %3, i32 2323  %vecext.3 = extractelement <4 x float> %0, i32 3324  %4 = tail call fast float @logf(float %vecext.3)325  %vecins.3 = insertelement <4 x float> %vecins.2, float %4, i32 3326  ret <4 x float> %vecins.3327}328declare float @log1pf(float) readonly nounwind willreturn329define <4 x float> @log1p_4x(ptr %a) {330; CHECK-LABEL: @log1p_4x(331; CHECK-NEXT:  entry:332; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 16333; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @vlog1pf(<4 x float> [[TMP0]])334; CHECK-NEXT:    ret <4 x float> [[TMP1]]335;336; NOACCELERATE-LABEL: @log1p_4x(337; NOACCELERATE-NEXT:  entry:338; NOACCELERATE-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 16339; NOACCELERATE-NEXT:    [[VECEXT:%.*]] = extractelement <4 x float> [[TMP0]], i32 0340; NOACCELERATE-NEXT:    [[TMP1:%.*]] = tail call fast float @log1pf(float [[VECEXT]])341; NOACCELERATE-NEXT:    [[VECINS:%.*]] = insertelement <4 x float> zeroinitializer, float [[TMP1]], i32 0342; NOACCELERATE-NEXT:    [[VECEXT_1:%.*]] = extractelement <4 x float> [[TMP0]], i32 1343; NOACCELERATE-NEXT:    [[TMP2:%.*]] = tail call fast float @log1pf(float [[VECEXT_1]])344; NOACCELERATE-NEXT:    [[VECINS_1:%.*]] = insertelement <4 x float> [[VECINS]], float [[TMP2]], i32 1345; NOACCELERATE-NEXT:    [[VECEXT_2:%.*]] = extractelement <4 x float> [[TMP0]], i32 2346; NOACCELERATE-NEXT:    [[TMP3:%.*]] = tail call fast float @log1pf(float [[VECEXT_2]])347; NOACCELERATE-NEXT:    [[VECINS_2:%.*]] = insertelement <4 x float> [[VECINS_1]], float [[TMP3]], i32 2348; NOACCELERATE-NEXT:    [[VECEXT_3:%.*]] = extractelement <4 x float> [[TMP0]], i32 3349; NOACCELERATE-NEXT:    [[TMP4:%.*]] = tail call fast float @log1pf(float [[VECEXT_3]])350; NOACCELERATE-NEXT:    [[VECINS_3:%.*]] = insertelement <4 x float> [[VECINS_2]], float [[TMP4]], i32 3351; NOACCELERATE-NEXT:    ret <4 x float> [[VECINS_3]]352;353entry:354  %0 = load <4 x float>, ptr %a, align 16355  %vecext = extractelement <4 x float> %0, i32 0356  %1 = tail call fast float @log1pf(float %vecext)357  %vecins = insertelement <4 x float> zeroinitializer, float %1, i32 0358  %vecext.1 = extractelement <4 x float> %0, i32 1359  %2 = tail call fast float @log1pf(float %vecext.1)360  %vecins.1 = insertelement <4 x float> %vecins, float %2, i32 1361  %vecext.2 = extractelement <4 x float> %0, i32 2362  %3 = tail call fast float @log1pf(float %vecext.2)363  %vecins.2 = insertelement <4 x float> %vecins.1, float %3, i32 2364  %vecext.3 = extractelement <4 x float> %0, i32 3365  %4 = tail call fast float @log1pf(float %vecext.3)366  %vecins.3 = insertelement <4 x float> %vecins.2, float %4, i32 3367  ret <4 x float> %vecins.3368}369declare float @log10pf(float) readonly nounwind willreturn370define <4 x float> @log10p_4x(ptr %a) {371; CHECK-LABEL: @log10p_4x(372; CHECK-NEXT:  entry:373; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 16374; CHECK-NEXT:    [[VECEXT:%.*]] = extractelement <4 x float> [[TMP0]], i32 0375; CHECK-NEXT:    [[TMP1:%.*]] = tail call fast float @log10pf(float [[VECEXT]])376; CHECK-NEXT:    [[VECINS:%.*]] = insertelement <4 x float> zeroinitializer, float [[TMP1]], i32 0377; CHECK-NEXT:    [[VECEXT_1:%.*]] = extractelement <4 x float> [[TMP0]], i32 1378; CHECK-NEXT:    [[TMP2:%.*]] = tail call fast float @log10pf(float [[VECEXT_1]])379; CHECK-NEXT:    [[VECINS_1:%.*]] = insertelement <4 x float> [[VECINS]], float [[TMP2]], i32 1380; CHECK-NEXT:    [[VECEXT_2:%.*]] = extractelement <4 x float> [[TMP0]], i32 2381; CHECK-NEXT:    [[TMP3:%.*]] = tail call fast float @log10pf(float [[VECEXT_2]])382; CHECK-NEXT:    [[VECINS_2:%.*]] = insertelement <4 x float> [[VECINS_1]], float [[TMP3]], i32 2383; CHECK-NEXT:    [[VECEXT_3:%.*]] = extractelement <4 x float> [[TMP0]], i32 3384; CHECK-NEXT:    [[TMP4:%.*]] = tail call fast float @log10pf(float [[VECEXT_3]])385; CHECK-NEXT:    [[VECINS_3:%.*]] = insertelement <4 x float> [[VECINS_2]], float [[TMP4]], i32 3386; CHECK-NEXT:    ret <4 x float> [[VECINS_3]]387;388; NOACCELERATE-LABEL: @log10p_4x(389; NOACCELERATE-NEXT:  entry:390; NOACCELERATE-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 16391; NOACCELERATE-NEXT:    [[VECEXT:%.*]] = extractelement <4 x float> [[TMP0]], i32 0392; NOACCELERATE-NEXT:    [[TMP1:%.*]] = tail call fast float @log10pf(float [[VECEXT]])393; NOACCELERATE-NEXT:    [[VECINS:%.*]] = insertelement <4 x float> zeroinitializer, float [[TMP1]], i32 0394; NOACCELERATE-NEXT:    [[VECEXT_1:%.*]] = extractelement <4 x float> [[TMP0]], i32 1395; NOACCELERATE-NEXT:    [[TMP2:%.*]] = tail call fast float @log10pf(float [[VECEXT_1]])396; NOACCELERATE-NEXT:    [[VECINS_1:%.*]] = insertelement <4 x float> [[VECINS]], float [[TMP2]], i32 1397; NOACCELERATE-NEXT:    [[VECEXT_2:%.*]] = extractelement <4 x float> [[TMP0]], i32 2398; NOACCELERATE-NEXT:    [[TMP3:%.*]] = tail call fast float @log10pf(float [[VECEXT_2]])399; NOACCELERATE-NEXT:    [[VECINS_2:%.*]] = insertelement <4 x float> [[VECINS_1]], float [[TMP3]], i32 2400; NOACCELERATE-NEXT:    [[VECEXT_3:%.*]] = extractelement <4 x float> [[TMP0]], i32 3401; NOACCELERATE-NEXT:    [[TMP4:%.*]] = tail call fast float @log10pf(float [[VECEXT_3]])402; NOACCELERATE-NEXT:    [[VECINS_3:%.*]] = insertelement <4 x float> [[VECINS_2]], float [[TMP4]], i32 3403; NOACCELERATE-NEXT:    ret <4 x float> [[VECINS_3]]404;405entry:406  %0 = load <4 x float>, ptr %a, align 16407  %vecext = extractelement <4 x float> %0, i32 0408  %1 = tail call fast float @log10pf(float %vecext)409  %vecins = insertelement <4 x float> zeroinitializer, float %1, i32 0410  %vecext.1 = extractelement <4 x float> %0, i32 1411  %2 = tail call fast float @log10pf(float %vecext.1)412  %vecins.1 = insertelement <4 x float> %vecins, float %2, i32 1413  %vecext.2 = extractelement <4 x float> %0, i32 2414  %3 = tail call fast float @log10pf(float %vecext.2)415  %vecins.2 = insertelement <4 x float> %vecins.1, float %3, i32 2416  %vecext.3 = extractelement <4 x float> %0, i32 3417  %4 = tail call fast float @log10pf(float %vecext.3)418  %vecins.3 = insertelement <4 x float> %vecins.2, float %4, i32 3419  ret <4 x float> %vecins.3420}421declare float @logbf(float) readonly nounwind willreturn422define <4 x float> @logb_4x(ptr %a) {423; CHECK-LABEL: @logb_4x(424; CHECK-NEXT:  entry:425; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 16426; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @vlogbf(<4 x float> [[TMP0]])427; CHECK-NEXT:    ret <4 x float> [[TMP1]]428;429; NOACCELERATE-LABEL: @logb_4x(430; NOACCELERATE-NEXT:  entry:431; NOACCELERATE-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 16432; NOACCELERATE-NEXT:    [[VECEXT:%.*]] = extractelement <4 x float> [[TMP0]], i32 0433; NOACCELERATE-NEXT:    [[TMP1:%.*]] = tail call fast float @logbf(float [[VECEXT]])434; NOACCELERATE-NEXT:    [[VECINS:%.*]] = insertelement <4 x float> zeroinitializer, float [[TMP1]], i32 0435; NOACCELERATE-NEXT:    [[VECEXT_1:%.*]] = extractelement <4 x float> [[TMP0]], i32 1436; NOACCELERATE-NEXT:    [[TMP2:%.*]] = tail call fast float @logbf(float [[VECEXT_1]])437; NOACCELERATE-NEXT:    [[VECINS_1:%.*]] = insertelement <4 x float> [[VECINS]], float [[TMP2]], i32 1438; NOACCELERATE-NEXT:    [[VECEXT_2:%.*]] = extractelement <4 x float> [[TMP0]], i32 2439; NOACCELERATE-NEXT:    [[TMP3:%.*]] = tail call fast float @logbf(float [[VECEXT_2]])440; NOACCELERATE-NEXT:    [[VECINS_2:%.*]] = insertelement <4 x float> [[VECINS_1]], float [[TMP3]], i32 2441; NOACCELERATE-NEXT:    [[VECEXT_3:%.*]] = extractelement <4 x float> [[TMP0]], i32 3442; NOACCELERATE-NEXT:    [[TMP4:%.*]] = tail call fast float @logbf(float [[VECEXT_3]])443; NOACCELERATE-NEXT:    [[VECINS_3:%.*]] = insertelement <4 x float> [[VECINS_2]], float [[TMP4]], i32 3444; NOACCELERATE-NEXT:    ret <4 x float> [[VECINS_3]]445;446entry:447  %0 = load <4 x float>, ptr %a, align 16448  %vecext = extractelement <4 x float> %0, i32 0449  %1 = tail call fast float @logbf(float %vecext)450  %vecins = insertelement <4 x float> zeroinitializer, float %1, i32 0451  %vecext.1 = extractelement <4 x float> %0, i32 1452  %2 = tail call fast float @logbf(float %vecext.1)453  %vecins.1 = insertelement <4 x float> %vecins, float %2, i32 1454  %vecext.2 = extractelement <4 x float> %0, i32 2455  %3 = tail call fast float @logbf(float %vecext.2)456  %vecins.2 = insertelement <4 x float> %vecins.1, float %3, i32 2457  %vecext.3 = extractelement <4 x float> %0, i32 3458  %4 = tail call fast float @logbf(float %vecext.3)459  %vecins.3 = insertelement <4 x float> %vecins.2, float %4, i32 3460  ret <4 x float> %vecins.3461}462declare float @sinf(float) readonly nounwind willreturn463define <4 x float> @sin_4x(ptr %a) {464; CHECK-LABEL: @sin_4x(465; CHECK-NEXT:  entry:466; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 16467; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @vsinf(<4 x float> [[TMP0]])468; CHECK-NEXT:    ret <4 x float> [[TMP1]]469;470; NOACCELERATE-LABEL: @sin_4x(471; NOACCELERATE-NEXT:  entry:472; NOACCELERATE-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 16473; NOACCELERATE-NEXT:    [[VECEXT:%.*]] = extractelement <4 x float> [[TMP0]], i32 0474; NOACCELERATE-NEXT:    [[TMP1:%.*]] = tail call fast float @sinf(float [[VECEXT]])475; NOACCELERATE-NEXT:    [[VECINS:%.*]] = insertelement <4 x float> zeroinitializer, float [[TMP1]], i32 0476; NOACCELERATE-NEXT:    [[VECEXT_1:%.*]] = extractelement <4 x float> [[TMP0]], i32 1477; NOACCELERATE-NEXT:    [[TMP2:%.*]] = tail call fast float @sinf(float [[VECEXT_1]])478; NOACCELERATE-NEXT:    [[VECINS_1:%.*]] = insertelement <4 x float> [[VECINS]], float [[TMP2]], i32 1479; NOACCELERATE-NEXT:    [[VECEXT_2:%.*]] = extractelement <4 x float> [[TMP0]], i32 2480; NOACCELERATE-NEXT:    [[TMP3:%.*]] = tail call fast float @sinf(float [[VECEXT_2]])481; NOACCELERATE-NEXT:    [[VECINS_2:%.*]] = insertelement <4 x float> [[VECINS_1]], float [[TMP3]], i32 2482; NOACCELERATE-NEXT:    [[VECEXT_3:%.*]] = extractelement <4 x float> [[TMP0]], i32 3483; NOACCELERATE-NEXT:    [[TMP4:%.*]] = tail call fast float @sinf(float [[VECEXT_3]])484; NOACCELERATE-NEXT:    [[VECINS_31:%.*]] = insertelement <4 x float> [[VECINS_2]], float [[TMP4]], i32 3485; NOACCELERATE-NEXT:    ret <4 x float> [[VECINS_31]]486;487entry:488  %0 = load <4 x float>, ptr %a, align 16489  %vecext = extractelement <4 x float> %0, i32 0490  %1 = tail call fast float @sinf(float %vecext)491  %vecins = insertelement <4 x float> zeroinitializer, float %1, i32 0492  %vecext.1 = extractelement <4 x float> %0, i32 1493  %2 = tail call fast float @sinf(float %vecext.1)494  %vecins.1 = insertelement <4 x float> %vecins, float %2, i32 1495  %vecext.2 = extractelement <4 x float> %0, i32 2496  %3 = tail call fast float @sinf(float %vecext.2)497  %vecins.2 = insertelement <4 x float> %vecins.1, float %3, i32 2498  %vecext.3 = extractelement <4 x float> %0, i32 3499  %4 = tail call fast float @sinf(float %vecext.3)500  %vecins.3 = insertelement <4 x float> %vecins.2, float %4, i32 3501  ret <4 x float> %vecins.3502}503declare float @cosf(float) readonly nounwind willreturn504define <4 x float> @cos_4x(ptr %a) {505; CHECK-LABEL: @cos_4x(506; CHECK-NEXT:  entry:507; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 16508; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @vcosf(<4 x float> [[TMP0]])509; CHECK-NEXT:    ret <4 x float> [[TMP1]]510;511; NOACCELERATE-LABEL: @cos_4x(512; NOACCELERATE-NEXT:  entry:513; NOACCELERATE-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 16514; NOACCELERATE-NEXT:    [[VECEXT:%.*]] = extractelement <4 x float> [[TMP0]], i32 0515; NOACCELERATE-NEXT:    [[TMP1:%.*]] = tail call fast float @cosf(float [[VECEXT]])516; NOACCELERATE-NEXT:    [[VECINS:%.*]] = insertelement <4 x float> zeroinitializer, float [[TMP1]], i32 0517; NOACCELERATE-NEXT:    [[VECEXT_1:%.*]] = extractelement <4 x float> [[TMP0]], i32 1518; NOACCELERATE-NEXT:    [[TMP2:%.*]] = tail call fast float @cosf(float [[VECEXT_1]])519; NOACCELERATE-NEXT:    [[VECINS_1:%.*]] = insertelement <4 x float> [[VECINS]], float [[TMP2]], i32 1520; NOACCELERATE-NEXT:    [[VECEXT_2:%.*]] = extractelement <4 x float> [[TMP0]], i32 2521; NOACCELERATE-NEXT:    [[TMP3:%.*]] = tail call fast float @cosf(float [[VECEXT_2]])522; NOACCELERATE-NEXT:    [[VECINS_2:%.*]] = insertelement <4 x float> [[VECINS_1]], float [[TMP3]], i32 2523; NOACCELERATE-NEXT:    [[VECEXT_3:%.*]] = extractelement <4 x float> [[TMP0]], i32 3524; NOACCELERATE-NEXT:    [[TMP4:%.*]] = tail call fast float @cosf(float [[VECEXT_3]])525; NOACCELERATE-NEXT:    [[VECINS_31:%.*]] = insertelement <4 x float> [[VECINS_2]], float [[TMP4]], i32 3526; NOACCELERATE-NEXT:    ret <4 x float> [[VECINS_31]]527;528entry:529  %0 = load <4 x float>, ptr %a, align 16530  %vecext = extractelement <4 x float> %0, i32 0531  %1 = tail call fast float @cosf(float %vecext)532  %vecins = insertelement <4 x float> zeroinitializer, float %1, i32 0533  %vecext.1 = extractelement <4 x float> %0, i32 1534  %2 = tail call fast float @cosf(float %vecext.1)535  %vecins.1 = insertelement <4 x float> %vecins, float %2, i32 1536  %vecext.2 = extractelement <4 x float> %0, i32 2537  %3 = tail call fast float @cosf(float %vecext.2)538  %vecins.2 = insertelement <4 x float> %vecins.1, float %3, i32 2539  %vecext.3 = extractelement <4 x float> %0, i32 3540  %4 = tail call fast float @cosf(float %vecext.3)541  %vecins.3 = insertelement <4 x float> %vecins.2, float %4, i32 3542  ret <4 x float> %vecins.3543}544declare float @tanf(float) readonly nounwind willreturn545define <4 x float> @tan_4x(ptr %a) {546; CHECK-LABEL: @tan_4x(547; CHECK-NEXT:  entry:548; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 16549; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @vtanf(<4 x float> [[TMP0]])550; CHECK-NEXT:    ret <4 x float> [[TMP1]]551;552; NOACCELERATE-LABEL: @tan_4x(553; NOACCELERATE-NEXT:  entry:554; NOACCELERATE-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 16555; NOACCELERATE-NEXT:    [[VECEXT:%.*]] = extractelement <4 x float> [[TMP0]], i32 0556; NOACCELERATE-NEXT:    [[TMP1:%.*]] = tail call fast float @tanf(float [[VECEXT]])557; NOACCELERATE-NEXT:    [[VECINS:%.*]] = insertelement <4 x float> zeroinitializer, float [[TMP1]], i32 0558; NOACCELERATE-NEXT:    [[VECEXT_1:%.*]] = extractelement <4 x float> [[TMP0]], i32 1559; NOACCELERATE-NEXT:    [[TMP2:%.*]] = tail call fast float @tanf(float [[VECEXT_1]])560; NOACCELERATE-NEXT:    [[VECINS_1:%.*]] = insertelement <4 x float> [[VECINS]], float [[TMP2]], i32 1561; NOACCELERATE-NEXT:    [[VECEXT_2:%.*]] = extractelement <4 x float> [[TMP0]], i32 2562; NOACCELERATE-NEXT:    [[TMP3:%.*]] = tail call fast float @tanf(float [[VECEXT_2]])563; NOACCELERATE-NEXT:    [[VECINS_2:%.*]] = insertelement <4 x float> [[VECINS_1]], float [[TMP3]], i32 2564; NOACCELERATE-NEXT:    [[VECEXT_3:%.*]] = extractelement <4 x float> [[TMP0]], i32 3565; NOACCELERATE-NEXT:    [[TMP4:%.*]] = tail call fast float @tanf(float [[VECEXT_3]])566; NOACCELERATE-NEXT:    [[VECINS_31:%.*]] = insertelement <4 x float> [[VECINS_2]], float [[TMP4]], i32 3567; NOACCELERATE-NEXT:    ret <4 x float> [[VECINS_31]]568;569entry:570  %0 = load <4 x float>, ptr %a, align 16571  %vecext = extractelement <4 x float> %0, i32 0572  %1 = tail call fast float @tanf(float %vecext)573  %vecins = insertelement <4 x float> zeroinitializer, float %1, i32 0574  %vecext.1 = extractelement <4 x float> %0, i32 1575  %2 = tail call fast float @tanf(float %vecext.1)576  %vecins.1 = insertelement <4 x float> %vecins, float %2, i32 1577  %vecext.2 = extractelement <4 x float> %0, i32 2578  %3 = tail call fast float @tanf(float %vecext.2)579  %vecins.2 = insertelement <4 x float> %vecins.1, float %3, i32 2580  %vecext.3 = extractelement <4 x float> %0, i32 3581  %4 = tail call fast float @tanf(float %vecext.3)582  %vecins.3 = insertelement <4 x float> %vecins.2, float %4, i32 3583  ret <4 x float> %vecins.3584}585declare float @asinf(float) readonly nounwind willreturn586define <4 x float> @asin_4x(ptr %a) {587; CHECK-LABEL: @asin_4x(588; CHECK-NEXT:  entry:589; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 16590; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @vasinf(<4 x float> [[TMP0]])591; CHECK-NEXT:    ret <4 x float> [[TMP1]]592;593; NOACCELERATE-LABEL: @asin_4x(594; NOACCELERATE-NEXT:  entry:595; NOACCELERATE-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 16596; NOACCELERATE-NEXT:    [[VECEXT:%.*]] = extractelement <4 x float> [[TMP0]], i32 0597; NOACCELERATE-NEXT:    [[TMP1:%.*]] = tail call fast float @asinf(float [[VECEXT]])598; NOACCELERATE-NEXT:    [[VECINS:%.*]] = insertelement <4 x float> zeroinitializer, float [[TMP1]], i32 0599; NOACCELERATE-NEXT:    [[VECEXT_1:%.*]] = extractelement <4 x float> [[TMP0]], i32 1600; NOACCELERATE-NEXT:    [[TMP2:%.*]] = tail call fast float @asinf(float [[VECEXT_1]])601; NOACCELERATE-NEXT:    [[VECINS_1:%.*]] = insertelement <4 x float> [[VECINS]], float [[TMP2]], i32 1602; NOACCELERATE-NEXT:    [[VECEXT_2:%.*]] = extractelement <4 x float> [[TMP0]], i32 2603; NOACCELERATE-NEXT:    [[TMP3:%.*]] = tail call fast float @asinf(float [[VECEXT_2]])604; NOACCELERATE-NEXT:    [[VECINS_2:%.*]] = insertelement <4 x float> [[VECINS_1]], float [[TMP3]], i32 2605; NOACCELERATE-NEXT:    [[VECEXT_3:%.*]] = extractelement <4 x float> [[TMP0]], i32 3606; NOACCELERATE-NEXT:    [[TMP4:%.*]] = tail call fast float @asinf(float [[VECEXT_3]])607; NOACCELERATE-NEXT:    [[VECINS_31:%.*]] = insertelement <4 x float> [[VECINS_2]], float [[TMP4]], i32 3608; NOACCELERATE-NEXT:    ret <4 x float> [[VECINS_31]]609;610entry:611  %0 = load <4 x float>, ptr %a, align 16612  %vecext = extractelement <4 x float> %0, i32 0613  %1 = tail call fast float @asinf(float %vecext)614  %vecins = insertelement <4 x float> zeroinitializer, float %1, i32 0615  %vecext.1 = extractelement <4 x float> %0, i32 1616  %2 = tail call fast float @asinf(float %vecext.1)617  %vecins.1 = insertelement <4 x float> %vecins, float %2, i32 1618  %vecext.2 = extractelement <4 x float> %0, i32 2619  %3 = tail call fast float @asinf(float %vecext.2)620  %vecins.2 = insertelement <4 x float> %vecins.1, float %3, i32 2621  %vecext.3 = extractelement <4 x float> %0, i32 3622  %4 = tail call fast float @asinf(float %vecext.3)623  %vecins.3 = insertelement <4 x float> %vecins.2, float %4, i32 3624  ret <4 x float> %vecins.3625}626define <4 x float> @int_asin_4x(ptr %a) {627; CHECK-LABEL: @int_asin_4x(628; CHECK-NEXT:  entry:629; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 16630; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @vasinf(<4 x float> [[TMP0]])631; CHECK-NEXT:    ret <4 x float> [[TMP1]]632;633; NOACCELERATE-LABEL: @int_asin_4x(634; NOACCELERATE-NEXT:  entry:635; NOACCELERATE-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 16636; NOACCELERATE-NEXT:    [[VECEXT:%.*]] = extractelement <4 x float> [[TMP0]], i32 0637; NOACCELERATE-NEXT:    [[TMP1:%.*]] = tail call fast float @llvm.asin.f32(float [[VECEXT]])638; NOACCELERATE-NEXT:    [[VECINS:%.*]] = insertelement <4 x float> zeroinitializer, float [[TMP1]], i32 0639; NOACCELERATE-NEXT:    [[VECEXT_1:%.*]] = extractelement <4 x float> [[TMP0]], i32 1640; NOACCELERATE-NEXT:    [[TMP2:%.*]] = tail call fast float @llvm.asin.f32(float [[VECEXT_1]])641; NOACCELERATE-NEXT:    [[VECINS_1:%.*]] = insertelement <4 x float> [[VECINS]], float [[TMP2]], i32 1642; NOACCELERATE-NEXT:    [[VECEXT_2:%.*]] = extractelement <4 x float> [[TMP0]], i32 2643; NOACCELERATE-NEXT:    [[TMP3:%.*]] = tail call fast float @llvm.asin.f32(float [[VECEXT_2]])644; NOACCELERATE-NEXT:    [[VECINS_2:%.*]] = insertelement <4 x float> [[VECINS_1]], float [[TMP3]], i32 2645; NOACCELERATE-NEXT:    [[VECEXT_3:%.*]] = extractelement <4 x float> [[TMP0]], i32 3646; NOACCELERATE-NEXT:    [[TMP4:%.*]] = tail call fast float @llvm.asin.f32(float [[VECEXT_3]])647; NOACCELERATE-NEXT:    [[VECINS_31:%.*]] = insertelement <4 x float> [[VECINS_2]], float [[TMP4]], i32 3648; NOACCELERATE-NEXT:    ret <4 x float> [[VECINS_31]]649;650entry:651  %0 = load <4 x float>, ptr %a, align 16652  %vecext = extractelement <4 x float> %0, i32 0653  %1 = tail call fast float @llvm.asin.f32(float %vecext)654  %vecins = insertelement <4 x float> zeroinitializer, float %1, i32 0655  %vecext.1 = extractelement <4 x float> %0, i32 1656  %2 = tail call fast float @llvm.asin.f32(float %vecext.1)657  %vecins.1 = insertelement <4 x float> %vecins, float %2, i32 1658  %vecext.2 = extractelement <4 x float> %0, i32 2659  %3 = tail call fast float @llvm.asin.f32(float %vecext.2)660  %vecins.2 = insertelement <4 x float> %vecins.1, float %3, i32 2661  %vecext.3 = extractelement <4 x float> %0, i32 3662  %4 = tail call fast float @llvm.asin.f32(float %vecext.3)663  %vecins.3 = insertelement <4 x float> %vecins.2, float %4, i32 3664  ret <4 x float> %vecins.3665}666declare float @acosf(float) readonly nounwind willreturn667define <4 x float> @acos_4x(ptr %a) {668; CHECK-LABEL: @acos_4x(669; CHECK-NEXT:  entry:670; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 16671; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @vacosf(<4 x float> [[TMP0]])672; CHECK-NEXT:    ret <4 x float> [[TMP1]]673;674; NOACCELERATE-LABEL: @acos_4x(675; NOACCELERATE-NEXT:  entry:676; NOACCELERATE-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 16677; NOACCELERATE-NEXT:    [[VECEXT:%.*]] = extractelement <4 x float> [[TMP0]], i32 0678; NOACCELERATE-NEXT:    [[TMP1:%.*]] = tail call fast float @acosf(float [[VECEXT]])679; NOACCELERATE-NEXT:    [[VECINS:%.*]] = insertelement <4 x float> zeroinitializer, float [[TMP1]], i32 0680; NOACCELERATE-NEXT:    [[VECEXT_1:%.*]] = extractelement <4 x float> [[TMP0]], i32 1681; NOACCELERATE-NEXT:    [[TMP2:%.*]] = tail call fast float @acosf(float [[VECEXT_1]])682; NOACCELERATE-NEXT:    [[VECINS_1:%.*]] = insertelement <4 x float> [[VECINS]], float [[TMP2]], i32 1683; NOACCELERATE-NEXT:    [[VECEXT_2:%.*]] = extractelement <4 x float> [[TMP0]], i32 2684; NOACCELERATE-NEXT:    [[TMP3:%.*]] = tail call fast float @acosf(float [[VECEXT_2]])685; NOACCELERATE-NEXT:    [[VECINS_2:%.*]] = insertelement <4 x float> [[VECINS_1]], float [[TMP3]], i32 2686; NOACCELERATE-NEXT:    [[VECEXT_3:%.*]] = extractelement <4 x float> [[TMP0]], i32 3687; NOACCELERATE-NEXT:    [[TMP4:%.*]] = tail call fast float @acosf(float [[VECEXT_3]])688; NOACCELERATE-NEXT:    [[VECINS_31:%.*]] = insertelement <4 x float> [[VECINS_2]], float [[TMP4]], i32 3689; NOACCELERATE-NEXT:    ret <4 x float> [[VECINS_31]]690;691entry:692  %0 = load <4 x float>, ptr %a, align 16693  %vecext = extractelement <4 x float> %0, i32 0694  %1 = tail call fast float @acosf(float %vecext)695  %vecins = insertelement <4 x float> zeroinitializer, float %1, i32 0696  %vecext.1 = extractelement <4 x float> %0, i32 1697  %2 = tail call fast float @acosf(float %vecext.1)698  %vecins.1 = insertelement <4 x float> %vecins, float %2, i32 1699  %vecext.2 = extractelement <4 x float> %0, i32 2700  %3 = tail call fast float @acosf(float %vecext.2)701  %vecins.2 = insertelement <4 x float> %vecins.1, float %3, i32 2702  %vecext.3 = extractelement <4 x float> %0, i32 3703  %4 = tail call fast float @acosf(float %vecext.3)704  %vecins.3 = insertelement <4 x float> %vecins.2, float %4, i32 3705  ret <4 x float> %vecins.3706}707define <4 x float> @int_acos_4x(ptr %a) {708; CHECK-LABEL: @int_acos_4x(709; CHECK-NEXT:  entry:710; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 16711; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @vacosf(<4 x float> [[TMP0]])712; CHECK-NEXT:    ret <4 x float> [[TMP1]]713;714; NOACCELERATE-LABEL: @int_acos_4x(715; NOACCELERATE-NEXT:  entry:716; NOACCELERATE-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 16717; NOACCELERATE-NEXT:    [[VECEXT:%.*]] = extractelement <4 x float> [[TMP0]], i32 0718; NOACCELERATE-NEXT:    [[TMP1:%.*]] = tail call fast float @llvm.acos.f32(float [[VECEXT]])719; NOACCELERATE-NEXT:    [[VECINS:%.*]] = insertelement <4 x float> zeroinitializer, float [[TMP1]], i32 0720; NOACCELERATE-NEXT:    [[VECEXT_1:%.*]] = extractelement <4 x float> [[TMP0]], i32 1721; NOACCELERATE-NEXT:    [[TMP2:%.*]] = tail call fast float @llvm.acos.f32(float [[VECEXT_1]])722; NOACCELERATE-NEXT:    [[VECINS_1:%.*]] = insertelement <4 x float> [[VECINS]], float [[TMP2]], i32 1723; NOACCELERATE-NEXT:    [[VECEXT_2:%.*]] = extractelement <4 x float> [[TMP0]], i32 2724; NOACCELERATE-NEXT:    [[TMP3:%.*]] = tail call fast float @llvm.acos.f32(float [[VECEXT_2]])725; NOACCELERATE-NEXT:    [[VECINS_2:%.*]] = insertelement <4 x float> [[VECINS_1]], float [[TMP3]], i32 2726; NOACCELERATE-NEXT:    [[VECEXT_3:%.*]] = extractelement <4 x float> [[TMP0]], i32 3727; NOACCELERATE-NEXT:    [[TMP4:%.*]] = tail call fast float @llvm.acos.f32(float [[VECEXT_3]])728; NOACCELERATE-NEXT:    [[VECINS_31:%.*]] = insertelement <4 x float> [[VECINS_2]], float [[TMP4]], i32 3729; NOACCELERATE-NEXT:    ret <4 x float> [[VECINS_31]]730;731entry:732  %0 = load <4 x float>, ptr %a, align 16733  %vecext = extractelement <4 x float> %0, i32 0734  %1 = tail call fast float @llvm.acos.f32(float %vecext)735  %vecins = insertelement <4 x float> zeroinitializer, float %1, i32 0736  %vecext.1 = extractelement <4 x float> %0, i32 1737  %2 = tail call fast float @llvm.acos.f32(float %vecext.1)738  %vecins.1 = insertelement <4 x float> %vecins, float %2, i32 1739  %vecext.2 = extractelement <4 x float> %0, i32 2740  %3 = tail call fast float @llvm.acos.f32(float %vecext.2)741  %vecins.2 = insertelement <4 x float> %vecins.1, float %3, i32 2742  %vecext.3 = extractelement <4 x float> %0, i32 3743  %4 = tail call fast float @llvm.acos.f32(float %vecext.3)744  %vecins.3 = insertelement <4 x float> %vecins.2, float %4, i32 3745  ret <4 x float> %vecins.3746}747declare float @atanf(float) readonly nounwind willreturn748define <4 x float> @atan_4x(ptr %a) {749; CHECK-LABEL: @atan_4x(750; CHECK-NEXT:  entry:751; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 16752; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @vatanf(<4 x float> [[TMP0]])753; CHECK-NEXT:    ret <4 x float> [[TMP1]]754;755; NOACCELERATE-LABEL: @atan_4x(756; NOACCELERATE-NEXT:  entry:757; NOACCELERATE-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 16758; NOACCELERATE-NEXT:    [[VECEXT:%.*]] = extractelement <4 x float> [[TMP0]], i32 0759; NOACCELERATE-NEXT:    [[TMP1:%.*]] = tail call fast float @atanf(float [[VECEXT]])760; NOACCELERATE-NEXT:    [[VECINS:%.*]] = insertelement <4 x float> zeroinitializer, float [[TMP1]], i32 0761; NOACCELERATE-NEXT:    [[VECEXT_1:%.*]] = extractelement <4 x float> [[TMP0]], i32 1762; NOACCELERATE-NEXT:    [[TMP2:%.*]] = tail call fast float @atanf(float [[VECEXT_1]])763; NOACCELERATE-NEXT:    [[VECINS_1:%.*]] = insertelement <4 x float> [[VECINS]], float [[TMP2]], i32 1764; NOACCELERATE-NEXT:    [[VECEXT_2:%.*]] = extractelement <4 x float> [[TMP0]], i32 2765; NOACCELERATE-NEXT:    [[TMP3:%.*]] = tail call fast float @atanf(float [[VECEXT_2]])766; NOACCELERATE-NEXT:    [[VECINS_2:%.*]] = insertelement <4 x float> [[VECINS_1]], float [[TMP3]], i32 2767; NOACCELERATE-NEXT:    [[VECEXT_3:%.*]] = extractelement <4 x float> [[TMP0]], i32 3768; NOACCELERATE-NEXT:    [[TMP4:%.*]] = tail call fast float @atanf(float [[VECEXT_3]])769; NOACCELERATE-NEXT:    [[VECINS_31:%.*]] = insertelement <4 x float> [[VECINS_2]], float [[TMP4]], i32 3770; NOACCELERATE-NEXT:    ret <4 x float> [[VECINS_31]]771;772entry:773  %0 = load <4 x float>, ptr %a, align 16774  %vecext = extractelement <4 x float> %0, i32 0775  %1 = tail call fast float @atanf(float %vecext)776  %vecins = insertelement <4 x float> zeroinitializer, float %1, i32 0777  %vecext.1 = extractelement <4 x float> %0, i32 1778  %2 = tail call fast float @atanf(float %vecext.1)779  %vecins.1 = insertelement <4 x float> %vecins, float %2, i32 1780  %vecext.2 = extractelement <4 x float> %0, i32 2781  %3 = tail call fast float @atanf(float %vecext.2)782  %vecins.2 = insertelement <4 x float> %vecins.1, float %3, i32 2783  %vecext.3 = extractelement <4 x float> %0, i32 3784  %4 = tail call fast float @atanf(float %vecext.3)785  %vecins.3 = insertelement <4 x float> %vecins.2, float %4, i32 3786  ret <4 x float> %vecins.3787}788define <4 x float> @int_atan_4x(ptr %a) {789; CHECK-LABEL: @int_atan_4x(790; CHECK-NEXT:  entry:791; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 16792; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @vatanf(<4 x float> [[TMP0]])793; CHECK-NEXT:    ret <4 x float> [[TMP1]]794;795; NOACCELERATE-LABEL: @int_atan_4x(796; NOACCELERATE-NEXT:  entry:797; NOACCELERATE-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 16798; NOACCELERATE-NEXT:    [[VECEXT:%.*]] = extractelement <4 x float> [[TMP0]], i32 0799; NOACCELERATE-NEXT:    [[TMP1:%.*]] = tail call fast float @llvm.atan.f32(float [[VECEXT]])800; NOACCELERATE-NEXT:    [[VECINS:%.*]] = insertelement <4 x float> zeroinitializer, float [[TMP1]], i32 0801; NOACCELERATE-NEXT:    [[VECEXT_1:%.*]] = extractelement <4 x float> [[TMP0]], i32 1802; NOACCELERATE-NEXT:    [[TMP2:%.*]] = tail call fast float @llvm.atan.f32(float [[VECEXT_1]])803; NOACCELERATE-NEXT:    [[VECINS_1:%.*]] = insertelement <4 x float> [[VECINS]], float [[TMP2]], i32 1804; NOACCELERATE-NEXT:    [[VECEXT_2:%.*]] = extractelement <4 x float> [[TMP0]], i32 2805; NOACCELERATE-NEXT:    [[TMP3:%.*]] = tail call fast float @llvm.atan.f32(float [[VECEXT_2]])806; NOACCELERATE-NEXT:    [[VECINS_2:%.*]] = insertelement <4 x float> [[VECINS_1]], float [[TMP3]], i32 2807; NOACCELERATE-NEXT:    [[VECEXT_3:%.*]] = extractelement <4 x float> [[TMP0]], i32 3808; NOACCELERATE-NEXT:    [[TMP4:%.*]] = tail call fast float @llvm.atan.f32(float [[VECEXT_3]])809; NOACCELERATE-NEXT:    [[VECINS_31:%.*]] = insertelement <4 x float> [[VECINS_2]], float [[TMP4]], i32 3810; NOACCELERATE-NEXT:    ret <4 x float> [[VECINS_31]]811;812entry:813  %0 = load <4 x float>, ptr %a, align 16814  %vecext = extractelement <4 x float> %0, i32 0815  %1 = tail call fast float @llvm.atan.f32(float %vecext)816  %vecins = insertelement <4 x float> zeroinitializer, float %1, i32 0817  %vecext.1 = extractelement <4 x float> %0, i32 1818  %2 = tail call fast float @llvm.atan.f32(float %vecext.1)819  %vecins.1 = insertelement <4 x float> %vecins, float %2, i32 1820  %vecext.2 = extractelement <4 x float> %0, i32 2821  %3 = tail call fast float @llvm.atan.f32(float %vecext.2)822  %vecins.2 = insertelement <4 x float> %vecins.1, float %3, i32 2823  %vecext.3 = extractelement <4 x float> %0, i32 3824  %4 = tail call fast float @llvm.atan.f32(float %vecext.3)825  %vecins.3 = insertelement <4 x float> %vecins.2, float %4, i32 3826  ret <4 x float> %vecins.3827}828declare float @atan2f(float,float) readonly nounwind willreturn829define <4 x float> @atan2_4x(ptr %a, ptr %b) {830; CHECK-LABEL: @atan2_4x(831; CHECK-NEXT:  entry:832; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 16833; CHECK-NEXT:    [[BB:%.*]] = load <4 x float>, ptr [[B:%.*]], align 16834; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @vatan2f(<4 x float> [[TMP0]], <4 x float> [[BB]])835; CHECK-NEXT:    ret <4 x float> [[TMP1]]836;837; NOACCELERATE-LABEL: @atan2_4x(838; NOACCELERATE-NEXT:  entry:839; NOACCELERATE-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 16840; NOACCELERATE-NEXT:    [[BB:%.*]] = load <4 x float>, ptr [[B:%.*]], align 16841; NOACCELERATE-NEXT:    [[VECEXT:%.*]] = extractelement <4 x float> [[TMP0]], i32 0842; NOACCELERATE-NEXT:    [[VECEXTB:%.*]] = extractelement <4 x float> [[BB]], i32 0843; NOACCELERATE-NEXT:    [[TMP1:%.*]] = tail call fast float @atan2f(float [[VECEXT]], float [[VECEXTB]])844; NOACCELERATE-NEXT:    [[VECINS:%.*]] = insertelement <4 x float> zeroinitializer, float [[TMP1]], i32 0845; NOACCELERATE-NEXT:    [[VECEXT_1:%.*]] = extractelement <4 x float> [[TMP0]], i32 1846; NOACCELERATE-NEXT:    [[VECEXTB_1:%.*]] = extractelement <4 x float> [[BB]], i32 1847; NOACCELERATE-NEXT:    [[TMP2:%.*]] = tail call fast float @atan2f(float [[VECEXT_1]], float [[VECEXTB_1]])848; NOACCELERATE-NEXT:    [[VECINS_1:%.*]] = insertelement <4 x float> [[VECINS]], float [[TMP2]], i32 1849; NOACCELERATE-NEXT:    [[VECEXT_2:%.*]] = extractelement <4 x float> [[TMP0]], i32 2850; NOACCELERATE-NEXT:    [[VECEXTB_2:%.*]] = extractelement <4 x float> [[BB]], i32 2851; NOACCELERATE-NEXT:    [[TMP3:%.*]] = tail call fast float @atan2f(float [[VECEXT_2]], float [[VECEXTB_2]])852; NOACCELERATE-NEXT:    [[VECINS_2:%.*]] = insertelement <4 x float> [[VECINS_1]], float [[TMP3]], i32 2853; NOACCELERATE-NEXT:    [[VECEXT_3:%.*]] = extractelement <4 x float> [[TMP0]], i32 3854; NOACCELERATE-NEXT:    [[VECEXTB_3:%.*]] = extractelement <4 x float> [[BB]], i32 3855; NOACCELERATE-NEXT:    [[TMP4:%.*]] = tail call fast float @atan2f(float [[VECEXT_3]], float [[VECEXTB_3]])856; NOACCELERATE-NEXT:    [[VECINS_3:%.*]] = insertelement <4 x float> [[VECINS_2]], float [[TMP4]], i32 3857; NOACCELERATE-NEXT:    ret <4 x float> [[VECINS_3]]858;859entry:860  %0 = load <4 x float>, ptr %a, align 16861  %bb = load <4 x float>, ptr %b, align 16862  %vecext = extractelement <4 x float> %0, i32 0863  %vecextb = extractelement <4 x float> %bb, i32 0864  %1 = tail call fast float @atan2f(float %vecext, float %vecextb)865  %vecins = insertelement <4 x float> zeroinitializer, float %1, i32 0866  %vecext.1 = extractelement <4 x float> %0, i32 1867  %vecextb.1 = extractelement <4 x float> %bb, i32 1868  %2 = tail call fast float @atan2f(float %vecext.1, float %vecextb.1)869  %vecins.1 = insertelement <4 x float> %vecins, float %2, i32 1870  %vecext.2 = extractelement <4 x float> %0, i32 2871  %vecextb.2 = extractelement <4 x float> %bb, i32 2872  %3 = tail call fast float @atan2f(float %vecext.2, float %vecextb.2)873  %vecins.2 = insertelement <4 x float> %vecins.1, float %3, i32 2874  %vecext.3 = extractelement <4 x float> %0, i32 3875  %vecextb.3 = extractelement <4 x float> %bb, i32 3876  %4 = tail call fast float @atan2f(float %vecext.3, float %vecextb.3)877  %vecins.3 = insertelement <4 x float> %vecins.2, float %4, i32 3878  ret <4 x float> %vecins.3879}880define <4 x float> @int_atan2_4x(ptr %a, ptr %b) {881; CHECK-LABEL: @int_atan2_4x(882; CHECK-NEXT:  entry:883; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 16884; CHECK-NEXT:    [[BB:%.*]] = load <4 x float>, ptr [[B:%.*]], align 16885; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @vatan2f(<4 x float> [[TMP0]], <4 x float> [[BB]])886; CHECK-NEXT:    ret <4 x float> [[TMP1]]887;888; NOACCELERATE-LABEL: @int_atan2_4x(889; NOACCELERATE-NEXT:  entry:890; NOACCELERATE-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 16891; NOACCELERATE-NEXT:    [[BB:%.*]] = load <4 x float>, ptr [[B:%.*]], align 16892; NOACCELERATE-NEXT:    [[VECEXT:%.*]] = extractelement <4 x float> [[TMP0]], i32 0893; NOACCELERATE-NEXT:    [[VECEXTB:%.*]] = extractelement <4 x float> [[BB]], i32 0894; NOACCELERATE-NEXT:    [[TMP1:%.*]] = tail call fast float @llvm.atan2.f32(float [[VECEXT]], float [[VECEXTB]])895; NOACCELERATE-NEXT:    [[VECINS:%.*]] = insertelement <4 x float> zeroinitializer, float [[TMP1]], i32 0896; NOACCELERATE-NEXT:    [[VECEXT_1:%.*]] = extractelement <4 x float> [[TMP0]], i32 1897; NOACCELERATE-NEXT:    [[VECEXTB_1:%.*]] = extractelement <4 x float> [[BB]], i32 1898; NOACCELERATE-NEXT:    [[TMP2:%.*]] = tail call fast float @llvm.atan2.f32(float [[VECEXT_1]], float [[VECEXTB_1]])899; NOACCELERATE-NEXT:    [[VECINS_1:%.*]] = insertelement <4 x float> [[VECINS]], float [[TMP2]], i32 1900; NOACCELERATE-NEXT:    [[VECEXT_2:%.*]] = extractelement <4 x float> [[TMP0]], i32 2901; NOACCELERATE-NEXT:    [[VECEXTB_2:%.*]] = extractelement <4 x float> [[BB]], i32 2902; NOACCELERATE-NEXT:    [[TMP3:%.*]] = tail call fast float @llvm.atan2.f32(float [[VECEXT_2]], float [[VECEXTB_2]])903; NOACCELERATE-NEXT:    [[VECINS_2:%.*]] = insertelement <4 x float> [[VECINS_1]], float [[TMP3]], i32 2904; NOACCELERATE-NEXT:    [[VECEXT_3:%.*]] = extractelement <4 x float> [[TMP0]], i32 3905; NOACCELERATE-NEXT:    [[VECEXTB_3:%.*]] = extractelement <4 x float> [[BB]], i32 3906; NOACCELERATE-NEXT:    [[TMP4:%.*]] = tail call fast float @llvm.atan2.f32(float [[VECEXT_3]], float [[VECEXTB_3]])907; NOACCELERATE-NEXT:    [[VECINS_31:%.*]] = insertelement <4 x float> [[VECINS_2]], float [[TMP4]], i32 3908; NOACCELERATE-NEXT:    ret <4 x float> [[VECINS_31]]909;910entry:911  %0 = load <4 x float>, ptr %a, align 16912  %bb = load <4 x float>, ptr %b, align 16913  %vecext = extractelement <4 x float> %0, i32 0914  %vecextb = extractelement <4 x float> %bb, i32 0915  %1 = tail call fast float @llvm.atan2.f32(float %vecext, float %vecextb)916  %vecins = insertelement <4 x float> zeroinitializer, float %1, i32 0917  %vecext.1 = extractelement <4 x float> %0, i32 1918  %vecextb.1 = extractelement <4 x float> %bb, i32 1919  %2 = tail call fast float @llvm.atan2.f32(float %vecext.1, float %vecextb.1)920  %vecins.1 = insertelement <4 x float> %vecins, float %2, i32 1921  %vecext.2 = extractelement <4 x float> %0, i32 2922  %vecextb.2 = extractelement <4 x float> %bb, i32 2923  %3 = tail call fast float @llvm.atan2.f32(float %vecext.2, float %vecextb.2)924  %vecins.2 = insertelement <4 x float> %vecins.1, float %3, i32 2925  %vecext.3 = extractelement <4 x float> %0, i32 3926  %vecextb.3 = extractelement <4 x float> %bb, i32 3927  %4 = tail call fast float @llvm.atan2.f32(float %vecext.3, float %vecextb.3)928  %vecins.3 = insertelement <4 x float> %vecins.2, float %4, i32 3929  ret <4 x float> %vecins.3930}931declare float @sinhf(float) readonly nounwind willreturn932define <4 x float> @sinh_4x(ptr %a) {933; CHECK-LABEL: @sinh_4x(934; CHECK-NEXT:  entry:935; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 16936; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @vsinhf(<4 x float> [[TMP0]])937; CHECK-NEXT:    ret <4 x float> [[TMP1]]938;939; NOACCELERATE-LABEL: @sinh_4x(940; NOACCELERATE-NEXT:  entry:941; NOACCELERATE-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 16942; NOACCELERATE-NEXT:    [[VECEXT:%.*]] = extractelement <4 x float> [[TMP0]], i32 0943; NOACCELERATE-NEXT:    [[TMP1:%.*]] = tail call fast float @sinhf(float [[VECEXT]])944; NOACCELERATE-NEXT:    [[VECINS:%.*]] = insertelement <4 x float> zeroinitializer, float [[TMP1]], i32 0945; NOACCELERATE-NEXT:    [[VECEXT_1:%.*]] = extractelement <4 x float> [[TMP0]], i32 1946; NOACCELERATE-NEXT:    [[TMP2:%.*]] = tail call fast float @sinhf(float [[VECEXT_1]])947; NOACCELERATE-NEXT:    [[VECINS_1:%.*]] = insertelement <4 x float> [[VECINS]], float [[TMP2]], i32 1948; NOACCELERATE-NEXT:    [[VECEXT_2:%.*]] = extractelement <4 x float> [[TMP0]], i32 2949; NOACCELERATE-NEXT:    [[TMP3:%.*]] = tail call fast float @sinhf(float [[VECEXT_2]])950; NOACCELERATE-NEXT:    [[VECINS_2:%.*]] = insertelement <4 x float> [[VECINS_1]], float [[TMP3]], i32 2951; NOACCELERATE-NEXT:    [[VECEXT_3:%.*]] = extractelement <4 x float> [[TMP0]], i32 3952; NOACCELERATE-NEXT:    [[TMP4:%.*]] = tail call fast float @sinhf(float [[VECEXT_3]])953; NOACCELERATE-NEXT:    [[VECINS_31:%.*]] = insertelement <4 x float> [[VECINS_2]], float [[TMP4]], i32 3954; NOACCELERATE-NEXT:    ret <4 x float> [[VECINS_31]]955;956entry:957  %0 = load <4 x float>, ptr %a, align 16958  %vecext = extractelement <4 x float> %0, i32 0959  %1 = tail call fast float @sinhf(float %vecext)960  %vecins = insertelement <4 x float> zeroinitializer, float %1, i32 0961  %vecext.1 = extractelement <4 x float> %0, i32 1962  %2 = tail call fast float @sinhf(float %vecext.1)963  %vecins.1 = insertelement <4 x float> %vecins, float %2, i32 1964  %vecext.2 = extractelement <4 x float> %0, i32 2965  %3 = tail call fast float @sinhf(float %vecext.2)966  %vecins.2 = insertelement <4 x float> %vecins.1, float %3, i32 2967  %vecext.3 = extractelement <4 x float> %0, i32 3968  %4 = tail call fast float @sinhf(float %vecext.3)969  %vecins.3 = insertelement <4 x float> %vecins.2, float %4, i32 3970  ret <4 x float> %vecins.3971}972define <4 x float> @int_sinh_4x(ptr %a) {973; CHECK-LABEL: @int_sinh_4x(974; CHECK-NEXT:  entry:975; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 16976; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @vsinhf(<4 x float> [[TMP0]])977; CHECK-NEXT:    ret <4 x float> [[TMP1]]978;979; NOACCELERATE-LABEL: @int_sinh_4x(980; NOACCELERATE-NEXT:  entry:981; NOACCELERATE-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 16982; NOACCELERATE-NEXT:    [[VECEXT:%.*]] = extractelement <4 x float> [[TMP0]], i32 0983; NOACCELERATE-NEXT:    [[TMP1:%.*]] = tail call fast float @llvm.sinh.f32(float [[VECEXT]])984; NOACCELERATE-NEXT:    [[VECINS:%.*]] = insertelement <4 x float> zeroinitializer, float [[TMP1]], i32 0985; NOACCELERATE-NEXT:    [[VECEXT_1:%.*]] = extractelement <4 x float> [[TMP0]], i32 1986; NOACCELERATE-NEXT:    [[TMP2:%.*]] = tail call fast float @llvm.sinh.f32(float [[VECEXT_1]])987; NOACCELERATE-NEXT:    [[VECINS_1:%.*]] = insertelement <4 x float> [[VECINS]], float [[TMP2]], i32 1988; NOACCELERATE-NEXT:    [[VECEXT_2:%.*]] = extractelement <4 x float> [[TMP0]], i32 2989; NOACCELERATE-NEXT:    [[TMP3:%.*]] = tail call fast float @llvm.sinh.f32(float [[VECEXT_2]])990; NOACCELERATE-NEXT:    [[VECINS_2:%.*]] = insertelement <4 x float> [[VECINS_1]], float [[TMP3]], i32 2991; NOACCELERATE-NEXT:    [[VECEXT_3:%.*]] = extractelement <4 x float> [[TMP0]], i32 3992; NOACCELERATE-NEXT:    [[TMP4:%.*]] = tail call fast float @llvm.sinh.f32(float [[VECEXT_3]])993; NOACCELERATE-NEXT:    [[VECINS_31:%.*]] = insertelement <4 x float> [[VECINS_2]], float [[TMP4]], i32 3994; NOACCELERATE-NEXT:    ret <4 x float> [[VECINS_31]]995;996entry:997  %0 = load <4 x float>, ptr %a, align 16998  %vecext = extractelement <4 x float> %0, i32 0999  %1 = tail call fast float @llvm.sinh.f32(float %vecext)1000  %vecins = insertelement <4 x float> zeroinitializer, float %1, i32 01001  %vecext.1 = extractelement <4 x float> %0, i32 11002  %2 = tail call fast float @llvm.sinh.f32(float %vecext.1)1003  %vecins.1 = insertelement <4 x float> %vecins, float %2, i32 11004  %vecext.2 = extractelement <4 x float> %0, i32 21005  %3 = tail call fast float @llvm.sinh.f32(float %vecext.2)1006  %vecins.2 = insertelement <4 x float> %vecins.1, float %3, i32 21007  %vecext.3 = extractelement <4 x float> %0, i32 31008  %4 = tail call fast float @llvm.sinh.f32(float %vecext.3)1009  %vecins.3 = insertelement <4 x float> %vecins.2, float %4, i32 31010  ret <4 x float> %vecins.31011}1012declare float @coshf(float) readonly nounwind willreturn1013define <4 x float> @cosh_4x(ptr %a) {1014; CHECK-LABEL: @cosh_4x(1015; CHECK-NEXT:  entry:1016; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 161017; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @vcoshf(<4 x float> [[TMP0]])1018; CHECK-NEXT:    ret <4 x float> [[TMP1]]1019;1020; NOACCELERATE-LABEL: @cosh_4x(1021; NOACCELERATE-NEXT:  entry:1022; NOACCELERATE-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 161023; NOACCELERATE-NEXT:    [[VECEXT:%.*]] = extractelement <4 x float> [[TMP0]], i32 01024; NOACCELERATE-NEXT:    [[TMP1:%.*]] = tail call fast float @coshf(float [[VECEXT]])1025; NOACCELERATE-NEXT:    [[VECINS:%.*]] = insertelement <4 x float> zeroinitializer, float [[TMP1]], i32 01026; NOACCELERATE-NEXT:    [[VECEXT_1:%.*]] = extractelement <4 x float> [[TMP0]], i32 11027; NOACCELERATE-NEXT:    [[TMP2:%.*]] = tail call fast float @coshf(float [[VECEXT_1]])1028; NOACCELERATE-NEXT:    [[VECINS_1:%.*]] = insertelement <4 x float> [[VECINS]], float [[TMP2]], i32 11029; NOACCELERATE-NEXT:    [[VECEXT_2:%.*]] = extractelement <4 x float> [[TMP0]], i32 21030; NOACCELERATE-NEXT:    [[TMP3:%.*]] = tail call fast float @coshf(float [[VECEXT_2]])1031; NOACCELERATE-NEXT:    [[VECINS_2:%.*]] = insertelement <4 x float> [[VECINS_1]], float [[TMP3]], i32 21032; NOACCELERATE-NEXT:    [[VECEXT_3:%.*]] = extractelement <4 x float> [[TMP0]], i32 31033; NOACCELERATE-NEXT:    [[TMP4:%.*]] = tail call fast float @coshf(float [[VECEXT_3]])1034; NOACCELERATE-NEXT:    [[VECINS_31:%.*]] = insertelement <4 x float> [[VECINS_2]], float [[TMP4]], i32 31035; NOACCELERATE-NEXT:    ret <4 x float> [[VECINS_31]]1036;1037entry:1038  %0 = load <4 x float>, ptr %a, align 161039  %vecext = extractelement <4 x float> %0, i32 01040  %1 = tail call fast float @coshf(float %vecext)1041  %vecins = insertelement <4 x float> zeroinitializer, float %1, i32 01042  %vecext.1 = extractelement <4 x float> %0, i32 11043  %2 = tail call fast float @coshf(float %vecext.1)1044  %vecins.1 = insertelement <4 x float> %vecins, float %2, i32 11045  %vecext.2 = extractelement <4 x float> %0, i32 21046  %3 = tail call fast float @coshf(float %vecext.2)1047  %vecins.2 = insertelement <4 x float> %vecins.1, float %3, i32 21048  %vecext.3 = extractelement <4 x float> %0, i32 31049  %4 = tail call fast float @coshf(float %vecext.3)1050  %vecins.3 = insertelement <4 x float> %vecins.2, float %4, i32 31051  ret <4 x float> %vecins.31052}1053define <4 x float> @int_cosh_4x(ptr %a) {1054; CHECK-LABEL: @int_cosh_4x(1055; CHECK-NEXT:  entry:1056; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 161057; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @vcoshf(<4 x float> [[TMP0]])1058; CHECK-NEXT:    ret <4 x float> [[TMP1]]1059;1060; NOACCELERATE-LABEL: @int_cosh_4x(1061; NOACCELERATE-NEXT:  entry:1062; NOACCELERATE-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 161063; NOACCELERATE-NEXT:    [[VECEXT:%.*]] = extractelement <4 x float> [[TMP0]], i32 01064; NOACCELERATE-NEXT:    [[TMP1:%.*]] = tail call fast float @llvm.cosh.f32(float [[VECEXT]])1065; NOACCELERATE-NEXT:    [[VECINS:%.*]] = insertelement <4 x float> zeroinitializer, float [[TMP1]], i32 01066; NOACCELERATE-NEXT:    [[VECEXT_1:%.*]] = extractelement <4 x float> [[TMP0]], i32 11067; NOACCELERATE-NEXT:    [[TMP2:%.*]] = tail call fast float @llvm.cosh.f32(float [[VECEXT_1]])1068; NOACCELERATE-NEXT:    [[VECINS_1:%.*]] = insertelement <4 x float> [[VECINS]], float [[TMP2]], i32 11069; NOACCELERATE-NEXT:    [[VECEXT_2:%.*]] = extractelement <4 x float> [[TMP0]], i32 21070; NOACCELERATE-NEXT:    [[TMP3:%.*]] = tail call fast float @llvm.cosh.f32(float [[VECEXT_2]])1071; NOACCELERATE-NEXT:    [[VECINS_2:%.*]] = insertelement <4 x float> [[VECINS_1]], float [[TMP3]], i32 21072; NOACCELERATE-NEXT:    [[VECEXT_3:%.*]] = extractelement <4 x float> [[TMP0]], i32 31073; NOACCELERATE-NEXT:    [[TMP4:%.*]] = tail call fast float @llvm.cosh.f32(float [[VECEXT_3]])1074; NOACCELERATE-NEXT:    [[VECINS_31:%.*]] = insertelement <4 x float> [[VECINS_2]], float [[TMP4]], i32 31075; NOACCELERATE-NEXT:    ret <4 x float> [[VECINS_31]]1076;1077entry:1078  %0 = load <4 x float>, ptr %a, align 161079  %vecext = extractelement <4 x float> %0, i32 01080  %1 = tail call fast float @llvm.cosh.f32(float %vecext)1081  %vecins = insertelement <4 x float> zeroinitializer, float %1, i32 01082  %vecext.1 = extractelement <4 x float> %0, i32 11083  %2 = tail call fast float @llvm.cosh.f32(float %vecext.1)1084  %vecins.1 = insertelement <4 x float> %vecins, float %2, i32 11085  %vecext.2 = extractelement <4 x float> %0, i32 21086  %3 = tail call fast float @llvm.cosh.f32(float %vecext.2)1087  %vecins.2 = insertelement <4 x float> %vecins.1, float %3, i32 21088  %vecext.3 = extractelement <4 x float> %0, i32 31089  %4 = tail call fast float @llvm.cosh.f32(float %vecext.3)1090  %vecins.3 = insertelement <4 x float> %vecins.2, float %4, i32 31091  ret <4 x float> %vecins.31092}1093declare float @tanhf(float) readonly nounwind willreturn1094define <4 x float> @tanh_4x(ptr %a) {1095; CHECK-LABEL: @tanh_4x(1096; CHECK-NEXT:  entry:1097; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 161098; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @vtanhf(<4 x float> [[TMP0]])1099; CHECK-NEXT:    ret <4 x float> [[TMP1]]1100;1101; NOACCELERATE-LABEL: @tanh_4x(1102; NOACCELERATE-NEXT:  entry:1103; NOACCELERATE-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 161104; NOACCELERATE-NEXT:    [[VECEXT:%.*]] = extractelement <4 x float> [[TMP0]], i32 01105; NOACCELERATE-NEXT:    [[TMP1:%.*]] = tail call fast float @tanhf(float [[VECEXT]])1106; NOACCELERATE-NEXT:    [[VECINS:%.*]] = insertelement <4 x float> zeroinitializer, float [[TMP1]], i32 01107; NOACCELERATE-NEXT:    [[VECEXT_1:%.*]] = extractelement <4 x float> [[TMP0]], i32 11108; NOACCELERATE-NEXT:    [[TMP2:%.*]] = tail call fast float @tanhf(float [[VECEXT_1]])1109; NOACCELERATE-NEXT:    [[VECINS_1:%.*]] = insertelement <4 x float> [[VECINS]], float [[TMP2]], i32 11110; NOACCELERATE-NEXT:    [[VECEXT_2:%.*]] = extractelement <4 x float> [[TMP0]], i32 21111; NOACCELERATE-NEXT:    [[TMP3:%.*]] = tail call fast float @tanhf(float [[VECEXT_2]])1112; NOACCELERATE-NEXT:    [[VECINS_2:%.*]] = insertelement <4 x float> [[VECINS_1]], float [[TMP3]], i32 21113; NOACCELERATE-NEXT:    [[VECEXT_3:%.*]] = extractelement <4 x float> [[TMP0]], i32 31114; NOACCELERATE-NEXT:    [[TMP4:%.*]] = tail call fast float @tanhf(float [[VECEXT_3]])1115; NOACCELERATE-NEXT:    [[VECINS_31:%.*]] = insertelement <4 x float> [[VECINS_2]], float [[TMP4]], i32 31116; NOACCELERATE-NEXT:    ret <4 x float> [[VECINS_31]]1117;1118entry:1119  %0 = load <4 x float>, ptr %a, align 161120  %vecext = extractelement <4 x float> %0, i32 01121  %1 = tail call fast float @tanhf(float %vecext)1122  %vecins = insertelement <4 x float> zeroinitializer, float %1, i32 01123  %vecext.1 = extractelement <4 x float> %0, i32 11124  %2 = tail call fast float @tanhf(float %vecext.1)1125  %vecins.1 = insertelement <4 x float> %vecins, float %2, i32 11126  %vecext.2 = extractelement <4 x float> %0, i32 21127  %3 = tail call fast float @tanhf(float %vecext.2)1128  %vecins.2 = insertelement <4 x float> %vecins.1, float %3, i32 21129  %vecext.3 = extractelement <4 x float> %0, i32 31130  %4 = tail call fast float @tanhf(float %vecext.3)1131  %vecins.3 = insertelement <4 x float> %vecins.2, float %4, i32 31132  ret <4 x float> %vecins.31133}1134define <4 x float> @int_tanh_4x(ptr %a) {1135; CHECK-LABEL: @int_tanh_4x(1136; CHECK-NEXT:  entry:1137; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 161138; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @vtanhf(<4 x float> [[TMP0]])1139; CHECK-NEXT:    ret <4 x float> [[TMP1]]1140;1141; NOACCELERATE-LABEL: @int_tanh_4x(1142; NOACCELERATE-NEXT:  entry:1143; NOACCELERATE-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 161144; NOACCELERATE-NEXT:    [[VECEXT:%.*]] = extractelement <4 x float> [[TMP0]], i32 01145; NOACCELERATE-NEXT:    [[TMP1:%.*]] = tail call fast float @llvm.tanh.f32(float [[VECEXT]])1146; NOACCELERATE-NEXT:    [[VECINS:%.*]] = insertelement <4 x float> zeroinitializer, float [[TMP1]], i32 01147; NOACCELERATE-NEXT:    [[VECEXT_1:%.*]] = extractelement <4 x float> [[TMP0]], i32 11148; NOACCELERATE-NEXT:    [[TMP2:%.*]] = tail call fast float @llvm.tanh.f32(float [[VECEXT_1]])1149; NOACCELERATE-NEXT:    [[VECINS_1:%.*]] = insertelement <4 x float> [[VECINS]], float [[TMP2]], i32 11150; NOACCELERATE-NEXT:    [[VECEXT_2:%.*]] = extractelement <4 x float> [[TMP0]], i32 21151; NOACCELERATE-NEXT:    [[TMP3:%.*]] = tail call fast float @llvm.tanh.f32(float [[VECEXT_2]])1152; NOACCELERATE-NEXT:    [[VECINS_2:%.*]] = insertelement <4 x float> [[VECINS_1]], float [[TMP3]], i32 21153; NOACCELERATE-NEXT:    [[VECEXT_3:%.*]] = extractelement <4 x float> [[TMP0]], i32 31154; NOACCELERATE-NEXT:    [[TMP4:%.*]] = tail call fast float @llvm.tanh.f32(float [[VECEXT_3]])1155; NOACCELERATE-NEXT:    [[VECINS_31:%.*]] = insertelement <4 x float> [[VECINS_2]], float [[TMP4]], i32 31156; NOACCELERATE-NEXT:    ret <4 x float> [[VECINS_31]]1157;1158entry:1159  %0 = load <4 x float>, ptr %a, align 161160  %vecext = extractelement <4 x float> %0, i32 01161  %1 = tail call fast float @llvm.tanh.f32(float %vecext)1162  %vecins = insertelement <4 x float> zeroinitializer, float %1, i32 01163  %vecext.1 = extractelement <4 x float> %0, i32 11164  %2 = tail call fast float @llvm.tanh.f32(float %vecext.1)1165  %vecins.1 = insertelement <4 x float> %vecins, float %2, i32 11166  %vecext.2 = extractelement <4 x float> %0, i32 21167  %3 = tail call fast float @llvm.tanh.f32(float %vecext.2)1168  %vecins.2 = insertelement <4 x float> %vecins.1, float %3, i32 21169  %vecext.3 = extractelement <4 x float> %0, i32 31170  %4 = tail call fast float @llvm.tanh.f32(float %vecext.3)1171  %vecins.3 = insertelement <4 x float> %vecins.2, float %4, i32 31172  ret <4 x float> %vecins.31173}1174declare float @asinhf(float) readonly nounwind willreturn1175define <4 x float> @asinh_4x(ptr %a) {1176; CHECK-LABEL: @asinh_4x(1177; CHECK-NEXT:  entry:1178; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 161179; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @vasinhf(<4 x float> [[TMP0]])1180; CHECK-NEXT:    ret <4 x float> [[TMP1]]1181;1182; NOACCELERATE-LABEL: @asinh_4x(1183; NOACCELERATE-NEXT:  entry:1184; NOACCELERATE-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 161185; NOACCELERATE-NEXT:    [[VECEXT:%.*]] = extractelement <4 x float> [[TMP0]], i32 01186; NOACCELERATE-NEXT:    [[TMP1:%.*]] = tail call fast float @asinhf(float [[VECEXT]])1187; NOACCELERATE-NEXT:    [[VECINS:%.*]] = insertelement <4 x float> zeroinitializer, float [[TMP1]], i32 01188; NOACCELERATE-NEXT:    [[VECEXT_1:%.*]] = extractelement <4 x float> [[TMP0]], i32 11189; NOACCELERATE-NEXT:    [[TMP2:%.*]] = tail call fast float @asinhf(float [[VECEXT_1]])1190; NOACCELERATE-NEXT:    [[VECINS_1:%.*]] = insertelement <4 x float> [[VECINS]], float [[TMP2]], i32 11191; NOACCELERATE-NEXT:    [[VECEXT_2:%.*]] = extractelement <4 x float> [[TMP0]], i32 21192; NOACCELERATE-NEXT:    [[TMP3:%.*]] = tail call fast float @asinhf(float [[VECEXT_2]])1193; NOACCELERATE-NEXT:    [[VECINS_2:%.*]] = insertelement <4 x float> [[VECINS_1]], float [[TMP3]], i32 21194; NOACCELERATE-NEXT:    [[VECEXT_3:%.*]] = extractelement <4 x float> [[TMP0]], i32 31195; NOACCELERATE-NEXT:    [[TMP4:%.*]] = tail call fast float @asinhf(float [[VECEXT_3]])1196; NOACCELERATE-NEXT:    [[VECINS_3:%.*]] = insertelement <4 x float> [[VECINS_2]], float [[TMP4]], i32 31197; NOACCELERATE-NEXT:    ret <4 x float> [[VECINS_3]]1198;1199entry:1200  %0 = load <4 x float>, ptr %a, align 161201  %vecext = extractelement <4 x float> %0, i32 01202  %1 = tail call fast float @asinhf(float %vecext)1203  %vecins = insertelement <4 x float> zeroinitializer, float %1, i32 01204  %vecext.1 = extractelement <4 x float> %0, i32 11205  %2 = tail call fast float @asinhf(float %vecext.1)1206  %vecins.1 = insertelement <4 x float> %vecins, float %2, i32 11207  %vecext.2 = extractelement <4 x float> %0, i32 21208  %3 = tail call fast float @asinhf(float %vecext.2)1209  %vecins.2 = insertelement <4 x float> %vecins.1, float %3, i32 21210  %vecext.3 = extractelement <4 x float> %0, i32 31211  %4 = tail call fast float @asinhf(float %vecext.3)1212  %vecins.3 = insertelement <4 x float> %vecins.2, float %4, i32 31213  ret <4 x float> %vecins.31214}1215declare float @acoshf(float) readonly nounwind willreturn1216define <4 x float> @acosh_4x(ptr %a) {1217; CHECK-LABEL: @acosh_4x(1218; CHECK-NEXT:  entry:1219; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 161220; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @vacoshf(<4 x float> [[TMP0]])1221; CHECK-NEXT:    ret <4 x float> [[TMP1]]1222;1223; NOACCELERATE-LABEL: @acosh_4x(1224; NOACCELERATE-NEXT:  entry:1225; NOACCELERATE-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 161226; NOACCELERATE-NEXT:    [[VECEXT:%.*]] = extractelement <4 x float> [[TMP0]], i32 01227; NOACCELERATE-NEXT:    [[TMP1:%.*]] = tail call fast float @acoshf(float [[VECEXT]])1228; NOACCELERATE-NEXT:    [[VECINS:%.*]] = insertelement <4 x float> zeroinitializer, float [[TMP1]], i32 01229; NOACCELERATE-NEXT:    [[VECEXT_1:%.*]] = extractelement <4 x float> [[TMP0]], i32 11230; NOACCELERATE-NEXT:    [[TMP2:%.*]] = tail call fast float @acoshf(float [[VECEXT_1]])1231; NOACCELERATE-NEXT:    [[VECINS_1:%.*]] = insertelement <4 x float> [[VECINS]], float [[TMP2]], i32 11232; NOACCELERATE-NEXT:    [[VECEXT_2:%.*]] = extractelement <4 x float> [[TMP0]], i32 21233; NOACCELERATE-NEXT:    [[TMP3:%.*]] = tail call fast float @acoshf(float [[VECEXT_2]])1234; NOACCELERATE-NEXT:    [[VECINS_2:%.*]] = insertelement <4 x float> [[VECINS_1]], float [[TMP3]], i32 21235; NOACCELERATE-NEXT:    [[VECEXT_3:%.*]] = extractelement <4 x float> [[TMP0]], i32 31236; NOACCELERATE-NEXT:    [[TMP4:%.*]] = tail call fast float @acoshf(float [[VECEXT_3]])1237; NOACCELERATE-NEXT:    [[VECINS_3:%.*]] = insertelement <4 x float> [[VECINS_2]], float [[TMP4]], i32 31238; NOACCELERATE-NEXT:    ret <4 x float> [[VECINS_3]]1239;1240entry:1241  %0 = load <4 x float>, ptr %a, align 161242  %vecext = extractelement <4 x float> %0, i32 01243  %1 = tail call fast float @acoshf(float %vecext)1244  %vecins = insertelement <4 x float> zeroinitializer, float %1, i32 01245  %vecext.1 = extractelement <4 x float> %0, i32 11246  %2 = tail call fast float @acoshf(float %vecext.1)1247  %vecins.1 = insertelement <4 x float> %vecins, float %2, i32 11248  %vecext.2 = extractelement <4 x float> %0, i32 21249  %3 = tail call fast float @acoshf(float %vecext.2)1250  %vecins.2 = insertelement <4 x float> %vecins.1, float %3, i32 21251  %vecext.3 = extractelement <4 x float> %0, i32 31252  %4 = tail call fast float @acoshf(float %vecext.3)1253  %vecins.3 = insertelement <4 x float> %vecins.2, float %4, i32 31254  ret <4 x float> %vecins.31255}1256declare float @atanhf(float) readonly nounwind willreturn1257define <4 x float> @atanh_4x(ptr %a) {1258; CHECK-LABEL: @atanh_4x(1259; CHECK-NEXT:  entry:1260; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 161261; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @vatanhf(<4 x float> [[TMP0]])1262; CHECK-NEXT:    ret <4 x float> [[TMP1]]1263;1264; NOACCELERATE-LABEL: @atanh_4x(1265; NOACCELERATE-NEXT:  entry:1266; NOACCELERATE-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 161267; NOACCELERATE-NEXT:    [[VECEXT:%.*]] = extractelement <4 x float> [[TMP0]], i32 01268; NOACCELERATE-NEXT:    [[TMP1:%.*]] = tail call fast float @atanhf(float [[VECEXT]])1269; NOACCELERATE-NEXT:    [[VECINS:%.*]] = insertelement <4 x float> zeroinitializer, float [[TMP1]], i32 01270; NOACCELERATE-NEXT:    [[VECEXT_1:%.*]] = extractelement <4 x float> [[TMP0]], i32 11271; NOACCELERATE-NEXT:    [[TMP2:%.*]] = tail call fast float @atanhf(float [[VECEXT_1]])1272; NOACCELERATE-NEXT:    [[VECINS_1:%.*]] = insertelement <4 x float> [[VECINS]], float [[TMP2]], i32 11273; NOACCELERATE-NEXT:    [[VECEXT_2:%.*]] = extractelement <4 x float> [[TMP0]], i32 21274; NOACCELERATE-NEXT:    [[TMP3:%.*]] = tail call fast float @atanhf(float [[VECEXT_2]])1275; NOACCELERATE-NEXT:    [[VECINS_2:%.*]] = insertelement <4 x float> [[VECINS_1]], float [[TMP3]], i32 21276; NOACCELERATE-NEXT:    [[VECEXT_3:%.*]] = extractelement <4 x float> [[TMP0]], i32 31277; NOACCELERATE-NEXT:    [[TMP4:%.*]] = tail call fast float @atanhf(float [[VECEXT_3]])1278; NOACCELERATE-NEXT:    [[VECINS_3:%.*]] = insertelement <4 x float> [[VECINS_2]], float [[TMP4]], i32 31279; NOACCELERATE-NEXT:    ret <4 x float> [[VECINS_3]]1280;1281entry:1282  %0 = load <4 x float>, ptr %a, align 161283  %vecext = extractelement <4 x float> %0, i32 01284  %1 = tail call fast float @atanhf(float %vecext)1285  %vecins = insertelement <4 x float> zeroinitializer, float %1, i32 01286  %vecext.1 = extractelement <4 x float> %0, i32 11287  %2 = tail call fast float @atanhf(float %vecext.1)1288  %vecins.1 = insertelement <4 x float> %vecins, float %2, i32 11289  %vecext.2 = extractelement <4 x float> %0, i32 21290  %3 = tail call fast float @atanhf(float %vecext.2)1291  %vecins.2 = insertelement <4 x float> %vecins.1, float %3, i32 21292  %vecext.3 = extractelement <4 x float> %0, i32 31293  %4 = tail call fast float @atanhf(float %vecext.3)1294  %vecins.3 = insertelement <4 x float> %vecins.2, float %4, i32 31295  ret <4 x float> %vecins.31296}1297 1298; Accelerate *does not* provide sin() for <2 x float>.1299define <2 x float> @sin_2x(ptr %a) {1300; CHECK-LABEL: @sin_2x(1301; CHECK-NEXT:  entry:1302; CHECK-NEXT:    [[TMP0:%.*]] = load <2 x float>, ptr [[A:%.*]], align 161303; CHECK-NEXT:    [[VECEXT:%.*]] = extractelement <2 x float> [[TMP0]], i32 01304; CHECK-NEXT:    [[TMP1:%.*]] = tail call fast float @llvm.sin.f32(float [[VECEXT]]) #[[ATTR2:[0-9]+]]1305; CHECK-NEXT:    [[VECINS:%.*]] = insertelement <2 x float> zeroinitializer, float [[TMP1]], i32 01306; CHECK-NEXT:    [[VECEXT_1:%.*]] = extractelement <2 x float> [[TMP0]], i32 11307; CHECK-NEXT:    [[TMP2:%.*]] = tail call fast float @llvm.sin.f32(float [[VECEXT_1]]) #[[ATTR2]]1308; CHECK-NEXT:    [[VECINS_1:%.*]] = insertelement <2 x float> [[VECINS]], float [[TMP2]], i32 11309; CHECK-NEXT:    ret <2 x float> [[VECINS_1]]1310;1311; NOACCELERATE-LABEL: @sin_2x(1312; NOACCELERATE-NEXT:  entry:1313; NOACCELERATE-NEXT:    [[TMP0:%.*]] = load <2 x float>, ptr [[A:%.*]], align 161314; NOACCELERATE-NEXT:    [[VECEXT:%.*]] = extractelement <2 x float> [[TMP0]], i32 01315; NOACCELERATE-NEXT:    [[TMP1:%.*]] = tail call fast float @llvm.sin.f32(float [[VECEXT]])1316; NOACCELERATE-NEXT:    [[VECINS:%.*]] = insertelement <2 x float> zeroinitializer, float [[TMP1]], i32 01317; NOACCELERATE-NEXT:    [[VECEXT_1:%.*]] = extractelement <2 x float> [[TMP0]], i32 11318; NOACCELERATE-NEXT:    [[TMP2:%.*]] = tail call fast float @llvm.sin.f32(float [[VECEXT_1]])1319; NOACCELERATE-NEXT:    [[VECINS_1:%.*]] = insertelement <2 x float> [[VECINS]], float [[TMP2]], i32 11320; NOACCELERATE-NEXT:    ret <2 x float> [[VECINS_1]]1321;1322entry:1323  %0 = load <2 x float>, ptr %a, align 161324  %vecext = extractelement <2 x float> %0, i32 01325  %1 = tail call fast float @llvm.sin.f32(float %vecext)1326  %vecins = insertelement <2 x float> zeroinitializer, float %1, i32 01327  %vecext.1 = extractelement <2 x float> %0, i32 11328  %2 = tail call fast float @llvm.sin.f32(float %vecext.1)1329  %vecins.1 = insertelement <2 x float> %vecins, float %2, i32 11330  ret <2 x float> %vecins.11331}1332 1333 1334declare float @llvm.cos.f32(float)1335 1336; Accelerate provides cos() for <4 x float>1337define <4 x float> @int_cos_4x(ptr %a) {1338; CHECK-LABEL: @int_cos_4x(1339; CHECK-NEXT:  entry:1340; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 161341; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @vcosf(<4 x float> [[TMP0]])1342; CHECK-NEXT:    ret <4 x float> [[TMP1]]1343;1344; NOACCELERATE-LABEL: @int_cos_4x(1345; NOACCELERATE-NEXT:  entry:1346; NOACCELERATE-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A:%.*]], align 161347; NOACCELERATE-NEXT:    [[VECEXT:%.*]] = extractelement <4 x float> [[TMP0]], i32 01348; NOACCELERATE-NEXT:    [[TMP1:%.*]] = tail call fast float @llvm.cos.f32(float [[VECEXT]])1349; NOACCELERATE-NEXT:    [[VECINS:%.*]] = insertelement <4 x float> zeroinitializer, float [[TMP1]], i32 01350; NOACCELERATE-NEXT:    [[VECEXT_1:%.*]] = extractelement <4 x float> [[TMP0]], i32 11351; NOACCELERATE-NEXT:    [[TMP2:%.*]] = tail call fast float @llvm.cos.f32(float [[VECEXT_1]])1352; NOACCELERATE-NEXT:    [[VECINS_1:%.*]] = insertelement <4 x float> [[VECINS]], float [[TMP2]], i32 11353; NOACCELERATE-NEXT:    [[VECEXT_2:%.*]] = extractelement <4 x float> [[TMP0]], i32 21354; NOACCELERATE-NEXT:    [[TMP3:%.*]] = tail call fast float @llvm.cos.f32(float [[VECEXT_2]])1355; NOACCELERATE-NEXT:    [[VECINS_2:%.*]] = insertelement <4 x float> [[VECINS_1]], float [[TMP3]], i32 21356; NOACCELERATE-NEXT:    [[VECEXT_3:%.*]] = extractelement <4 x float> [[TMP0]], i32 31357; NOACCELERATE-NEXT:    [[TMP4:%.*]] = tail call fast float @llvm.cos.f32(float [[VECEXT_3]])1358; NOACCELERATE-NEXT:    [[VECINS_31:%.*]] = insertelement <4 x float> [[VECINS_2]], float [[TMP4]], i32 31359; NOACCELERATE-NEXT:    ret <4 x float> [[VECINS_31]]1360;1361entry:1362  %0 = load <4 x float>, ptr %a, align 161363  %vecext = extractelement <4 x float> %0, i32 01364  %1 = tail call fast float @llvm.cos.f32(float %vecext)1365  %vecins = insertelement <4 x float> zeroinitializer, float %1, i32 01366  %vecext.1 = extractelement <4 x float> %0, i32 11367  %2 = tail call fast float @llvm.cos.f32(float %vecext.1)1368  %vecins.1 = insertelement <4 x float> %vecins, float %2, i32 11369  %vecext.2 = extractelement <4 x float> %0, i32 21370  %3 = tail call fast float @llvm.cos.f32(float %vecext.2)1371  %vecins.2 = insertelement <4 x float> %vecins.1, float %3, i32 21372  %vecext.3 = extractelement <4 x float> %0, i32 31373  %4 = tail call fast float @llvm.cos.f32(float %vecext.3)1374  %vecins.3 = insertelement <4 x float> %vecins.2, float %4, i32 31375  ret <4 x float> %vecins.31376}1377 1378; Accelerate *does not* provide cos() for <2 x float>.1379define <2 x float> @cos_2x(ptr %a) {1380; CHECK-LABEL: @cos_2x(1381; CHECK-NEXT:  entry:1382; CHECK-NEXT:    [[TMP0:%.*]] = load <2 x float>, ptr [[A:%.*]], align 161383; CHECK-NEXT:    [[VECEXT:%.*]] = extractelement <2 x float> [[TMP0]], i32 01384; CHECK-NEXT:    [[TMP1:%.*]] = tail call fast float @llvm.cos.f32(float [[VECEXT]]) #[[ATTR3:[0-9]+]]1385; CHECK-NEXT:    [[VECINS:%.*]] = insertelement <2 x float> zeroinitializer, float [[TMP1]], i32 01386; CHECK-NEXT:    [[VECEXT_1:%.*]] = extractelement <2 x float> [[TMP0]], i32 11387; CHECK-NEXT:    [[TMP2:%.*]] = tail call fast float @llvm.cos.f32(float [[VECEXT_1]]) #[[ATTR3]]1388; CHECK-NEXT:    [[VECINS_1:%.*]] = insertelement <2 x float> [[VECINS]], float [[TMP2]], i32 11389; CHECK-NEXT:    ret <2 x float> [[VECINS_1]]1390;1391; NOACCELERATE-LABEL: @cos_2x(1392; NOACCELERATE-NEXT:  entry:1393; NOACCELERATE-NEXT:    [[TMP0:%.*]] = load <2 x float>, ptr [[A:%.*]], align 161394; NOACCELERATE-NEXT:    [[VECEXT:%.*]] = extractelement <2 x float> [[TMP0]], i32 01395; NOACCELERATE-NEXT:    [[TMP1:%.*]] = tail call fast float @llvm.cos.f32(float [[VECEXT]])1396; NOACCELERATE-NEXT:    [[VECINS:%.*]] = insertelement <2 x float> zeroinitializer, float [[TMP1]], i32 01397; NOACCELERATE-NEXT:    [[VECEXT_1:%.*]] = extractelement <2 x float> [[TMP0]], i32 11398; NOACCELERATE-NEXT:    [[TMP2:%.*]] = tail call fast float @llvm.cos.f32(float [[VECEXT_1]])1399; NOACCELERATE-NEXT:    [[VECINS_1:%.*]] = insertelement <2 x float> [[VECINS]], float [[TMP2]], i32 11400; NOACCELERATE-NEXT:    ret <2 x float> [[VECINS_1]]1401;1402entry:1403  %0 = load <2 x float>, ptr %a, align 161404  %vecext = extractelement <2 x float> %0, i32 01405  %1 = tail call fast float @llvm.cos.f32(float %vecext)1406  %vecins = insertelement <2 x float> zeroinitializer, float %1, i32 01407  %vecext.1 = extractelement <2 x float> %0, i32 11408  %2 = tail call fast float @llvm.cos.f32(float %vecext.1)1409  %vecins.1 = insertelement <2 x float> %vecins, float %2, i32 11410  ret <2 x float> %vecins.11411}1412