; RUN: opt -mtriple=x86_64-unknown-linux-gnu -vector-library=SVML -passes=inject-tli-mappings -S < %s | FileCheck %s --check-prefixes=COMMON,SVML ; RUN: opt -mtriple=powerpc64-unknown-linux-gnu -vector-library=MASSV -passes=inject-tli-mappings -S < %s | FileCheck %s --check-prefixes=COMMON,MASSV ; RUN: opt -mtriple=x86_64-unknown-linux-gnu -vector-library=LIBMVEC-X86 -passes=inject-tli-mappings -S < %s | FileCheck %s --check-prefixes=COMMON,LIBMVEC-X86 ; RUN: opt -mtriple=x86_64-unknown-linux-gnu -vector-library=Accelerate -passes=inject-tli-mappings -S < %s | FileCheck %s --check-prefixes=COMMON,ACCELERATE ; RUN: opt -mtriple=aarch64-unknown-linux-gnu -vector-library=sleefgnuabi -passes=inject-tli-mappings -S < %s | FileCheck %s --check-prefixes=COMMON,SLEEFGNUABI ; RUN: opt -mtriple=aarch64-unknown-linux-gnu -vector-library=ArmPL -passes=inject-tli-mappings -S < %s | FileCheck %s --check-prefixes=COMMON,ARMPL ; COMMON-LABEL: @llvm.compiler.used = appending global ; SVML-SAME: [6 x ptr] [ ; SVML-SAME: ptr @__svml_sin2, ; SVML-SAME: ptr @__svml_sin4, ; SVML-SAME: ptr @__svml_sin8, ; SVML-SAME: ptr @__svml_log10f4, ; SVML-SAME: ptr @__svml_log10f8, ; SVML-SAME: ptr @__svml_log10f16 ; MASSV-SAME: [2 x ptr] [ ; MASSV-SAME: ptr @__sind2, ; MASSV-SAME: ptr @__log10f4 ; ACCELERATE-SAME: [1 x ptr] [ ; ACCELERATE-SAME: ptr @vlog10f ; LIBMVEC-X86-SAME: [2 x ptr] [ ; LIBMVEC-X86-SAME: ptr @_ZGVbN2v_sin, ; LIBMVEC-X86-SAME: ptr @_ZGVdN4v_sin ; SLEEFGNUABI-SAME: [16 x ptr] [ ; SLEEFGNUABI-SAME: ptr @_ZGVnN2vl8_modf, ; SLEEFGNUABI-SAME: ptr @_ZGVsNxvl8_modf, ; SLEEFGNUABI-SAME: ptr @_ZGVnN4vl4_modff, ; SLEEFGNUABI-SAME: ptr @_ZGVsNxvl4_modff, ; SLEEFGNUABI-SAME: ptr @_ZGVnN2v_sin, ; SLEEFGNUABI-SAME: ptr @_ZGVsMxv_sin, ; SLEEFGNUABI-SAME: ptr @_ZGVnN2vl8l8_sincos, ; SLEEFGNUABI-SAME: ptr @_ZGVsNxvl8l8_sincos, ; SLEEFGNUABI-SAME: ptr @_ZGVnN4vl4l4_sincosf, ; SLEEFGNUABI-SAME: ptr @_ZGVsNxvl4l4_sincosf, ; SLEEFGNUABI-SAME: ptr @_ZGVnN2vl8l8_sincospi, ; SLEEFGNUABI-SAME: ptr @_ZGVsNxvl8l8_sincospi, ; SLEEFGNUABI-SAME: ptr @_ZGVnN4vl4l4_sincospif, ; SLEEFGNUABI-SAME: ptr @_ZGVsNxvl4l4_sincospif, ; SLEEFGNUABI_SAME; ptr @_ZGVnN4v_log10f, ; SLEEFGNUABI-SAME: ptr @_ZGVsMxv_log10f ; ARMPL-SAME: [10 x ptr] [ ; ARMPL-SAME: ptr @armpl_vmodfq_f64, ; ARMPL-SAME: ptr @armpl_vmodfq_f32, ; ARMPL-SAME: ptr @armpl_vsinq_f64, ; ARMPL-SAME: ptr @armpl_svsin_f64_x, ; ARMPL-SAME: ptr @armpl_vsincosq_f64, ; ARMPL-SAME: ptr @armpl_vsincosq_f32, ; ARMPL-SAME: ptr @armpl_vsincospiq_f64, ; ARMPL-SAME: ptr @armpl_vsincospiq_f32, ; ARMPL-SAME: ptr @armpl_vlog10q_f32, ; ARMPL-SAME: ptr @armpl_svlog10_f32_x ; COMMON-SAME: ], section "llvm.metadata" define double @modf_f64(double %in, ptr %iptr) { ; COMMON-LABEL: @modf_f64( ; SLEEFGNUABI: call double @modf(double %{{.*}}, ptr %{{.*}}) #[[MODF:[0-9]+]] ; ARMPL: call double @modf(double %{{.*}}, ptr %{{.*}}) #[[MODF:[0-9]+]] %call = tail call double @modf(double %in, ptr %iptr) ret double %call } declare double @modf(double, ptr) #0 define float @modf_f32(float %in, ptr %iptr) { ; COMMON-LABEL: @modf_f32( ; SLEEFGNUABI: call float @modff(float %{{.*}}, ptr %{{.*}}) #[[MODFF:[0-9]+]] ; ARMPL: call float @modff(float %{{.*}}, ptr %{{.*}}) #[[MODFF:[0-9]+]] %call = tail call float @modff(float %in, ptr %iptr) ret float %call } declare float @modff(float, ptr) #0 define double @sin_f64(double %in) { ; COMMON-LABEL: @sin_f64( ; SVML: call double @sin(double %{{.*}}) #[[SIN:[0-9]+]] ; MASSV: call double @sin(double %{{.*}}) #[[SIN:[0-9]+]] ; ACCELERATE: call double @sin(double %{{.*}}) ; LIBMVEC-X86: call double @sin(double %{{.*}}) #[[SIN:[0-9]+]] ; SLEEFGNUABI: call double @sin(double %{{.*}}) #[[SIN:[0-9]+]] ; ARMPL: call double @sin(double %{{.*}}) #[[SIN:[0-9]+]] ; No mapping of "sin" to a vector function for Accelerate. ; ACCELERATE-NOT: _ZGV_LLVM_{{.*}}_sin({{.*}}) %call = tail call double @sin(double %in) ret double %call } declare double @sin(double) #0 define void @sincos_f64(double %in, ptr %sin, ptr %cos) { ; COMMON-LABEL: @sincos_f64( ; SLEEFGNUABI: call void @sincos(double %{{.*}}, ptr %{{.*}}, ptr %{{.*}}) #[[SINCOS:[0-9]+]] ; ARMPL: call void @sincos(double %{{.*}}, ptr %{{.*}}, ptr %{{.*}}) #[[SINCOS:[0-9]+]] call void @sincos(double %in, ptr %sin, ptr %cos) ret void } declare void @sincos(double, ptr, ptr) #0 define void @sincos_f32(float %in, ptr %sin, ptr %cos) { ; COMMON-LABEL: @sincos_f32( ; SLEEFGNUABI: call void @sincosf(float %{{.*}}, ptr %{{.*}}, ptr %{{.*}}) #[[SINCOSF:[0-9]+]] ; ARMPL: call void @sincosf(float %{{.*}}, ptr %{{.*}}, ptr %{{.*}}) #[[SINCOSF:[0-9]+]] call void @sincosf(float %in, ptr %sin, ptr %cos) ret void } declare void @sincosf(float, ptr, ptr) #0 define void @sincospi_f64(double %in, ptr %sin, ptr %cos) { ; COMMON-LABEL: @sincospi_f64( ; SLEEFGNUABI: call void @sincospi(double %{{.*}}, ptr %{{.*}}, ptr %{{.*}}) #[[SINCOSPI:[0-9]+]] ; ARMPL: call void @sincospi(double %{{.*}}, ptr %{{.*}}, ptr %{{.*}}) #[[SINCOSPI:[0-9]+]] call void @sincospi(double %in, ptr %sin, ptr %cos) ret void } declare void @sincospi(double, ptr, ptr) #0 define void @sincospi_f32(float %in, ptr %sin, ptr %cos) { ; COMMON-LABEL: @sincospi_f32( ; SLEEFGNUABI: call void @sincospif(float %{{.*}}, ptr %{{.*}}, ptr %{{.*}}) #[[SINCOSPIF:[0-9]+]] ; ARMPL: call void @sincospif(float %{{.*}}, ptr %{{.*}}, ptr %{{.*}}) #[[SINCOSPIF:[0-9]+]] call void @sincospif(float %in, ptr %sin, ptr %cos) ret void } declare void @sincospif(float, ptr, ptr) #0 define float @call_llvm.log10.f32(float %in) { ; COMMON-LABEL: @call_llvm.log10.f32( ; SVML: call float @llvm.log10.f32(float %{{.*}}) ; LIBMVEC-X86: call float @llvm.log10.f32(float %{{.*}}) ; MASSV: call float @llvm.log10.f32(float %{{.*}}) #[[LOG10:[0-9]+]] ; ACCELERATE: call float @llvm.log10.f32(float %{{.*}}) #[[LOG10:[0-9]+]] ; SLEEFGNUABI: call float @llvm.log10.f32(float %{{.*}}) #[[LOG10:[0-9]+]] ; ARMPL: call float @llvm.log10.f32(float %{{.*}}) #[[LOG10:[0-9]+]] ; No mapping of "llvm.log10.f32" to a vector function for SVML. ; SVML-NOT: _ZGV_LLVM_{{.*}}_llvm.log10.f32({{.*}}) ; LIBMVEC-X86-NOT: _ZGV_LLVM_{{.*}}_llvm.log10.f32({{.*}}) %call = tail call float @llvm.log10.f32(float %in) ret float %call } declare float @llvm.log10.f32(float) #0 ; SVML: declare <2 x double> @__svml_sin2(<2 x double>) ; SVML: declare <4 x double> @__svml_sin4(<4 x double>) ; SVML: declare <8 x double> @__svml_sin8(<8 x double>) ; SVML: declare <4 x float> @__svml_log10f4(<4 x float>) ; SVML: declare <8 x float> @__svml_log10f8(<8 x float>) ; SVML: declare <16 x float> @__svml_log10f16(<16 x float>) ; MASSV: declare <2 x double> @__sind2(<2 x double>) ; MASSV: declare <4 x float> @__log10f4(<4 x float>) ; LIBMVEC-X86: declare <2 x double> @_ZGVbN2v_sin(<2 x double>) ; LIBMVEC-X86: declare <4 x double> @_ZGVdN4v_sin(<4 x double>) ; ACCELERATE: declare <4 x float> @vlog10f(<4 x float>) ; SLEEFGNUABI: declare <2 x double> @_ZGVnN2vl8_modf(<2 x double>, ptr) ; SLEEFGNUABI: declare @_ZGVsNxvl8_modf(, ptr) ; SLEEFGNUABI: declare <4 x float> @_ZGVnN4vl4_modff(<4 x float>, ptr) ; SLEEFGNUABI: declare @_ZGVsNxvl4_modff(, ptr) ; SLEEFGNUABI: declare <2 x double> @_ZGVnN2v_sin(<2 x double>) ; SLEEFGNUABI: declare @_ZGVsMxv_sin(, ) ; SLEEFGNUABI: declare void @_ZGVnN2vl8l8_sincos(<2 x double>, ptr, ptr) ; SLEEFGNUABI: declare void @_ZGVsNxvl8l8_sincos(, ptr, ptr) ; SLEEFGNUABI: declare void @_ZGVnN4vl4l4_sincosf(<4 x float>, ptr, ptr) ; SLEEFGNUABI: declare void @_ZGVsNxvl4l4_sincosf(, ptr, ptr) ; SLEEFGNUABI: declare void @_ZGVnN2vl8l8_sincospi(<2 x double>, ptr, ptr) ; SLEEFGNUABI: declare void @_ZGVsNxvl8l8_sincospi(, ptr, ptr) ; SLEEFGNUABI: declare void @_ZGVnN4vl4l4_sincospif(<4 x float>, ptr, ptr) ; SLEEFGNUABI: declare void @_ZGVsNxvl4l4_sincospif(, ptr, ptr) ; SLEEFGNUABI: declare <4 x float> @_ZGVnN4v_log10f(<4 x float>) ; SLEEFGNUABI: declare @_ZGVsMxv_log10f(, ) ; ARMPL: declare <2 x double> @armpl_vmodfq_f64(<2 x double>, ptr) ; ARMPL: declare <4 x float> @armpl_vmodfq_f32(<4 x float>, ptr) ; ARMPL: declare <2 x double> @armpl_vsinq_f64(<2 x double>) ; ARMPL: declare @armpl_svsin_f64_x(, ) ; ARMPL: declare void @armpl_vsincosq_f64(<2 x double>, ptr, ptr) ; ARMPL: declare void @armpl_vsincosq_f32(<4 x float>, ptr, ptr) ; ARMPL: declare void @armpl_vsincospiq_f64(<2 x double>, ptr, ptr) ; ARMPL: declare void @armpl_vsincospiq_f32(<4 x float>, ptr, ptr) ; ARMPL: declare <4 x float> @armpl_vlog10q_f32(<4 x float>) ; ARMPL: declare @armpl_svlog10_f32_x(, ) attributes #0 = { nounwind readnone } ; SVML: attributes #[[SIN]] = { "vector-function-abi-variant"= ; SVML-SAME: "_ZGV_LLVM_N2v_sin(__svml_sin2), ; SVML-SAME: _ZGV_LLVM_N4v_sin(__svml_sin4), ; SVML-SAME: _ZGV_LLVM_N8v_sin(__svml_sin8)" } ; MASSV: attributes #[[SIN]] = { "vector-function-abi-variant"= ; MASSV-SAME: "_ZGV_LLVM_N2v_sin(__sind2)" } ; MASSV: attributes #[[LOG10]] = { "vector-function-abi-variant"= ; MASSV-SAME: "_ZGV_LLVM_N4v_llvm.log10.f32(__log10f4)" } ; ACCELERATE: attributes #[[LOG10]] = { "vector-function-abi-variant"= ; ACCELERATE-SAME: "_ZGV_LLVM_N4v_llvm.log10.f32(vlog10f)" } ; LIBMVEC-X86: attributes #[[SIN]] = { "vector-function-abi-variant"= ; LIBMVEC-X86-SAME: "_ZGV_LLVM_N2v_sin(_ZGVbN2v_sin), ; LIBMVEC-X86-SAME: _ZGV_LLVM_N4v_sin(_ZGVdN4v_sin)" } ; SLEEFGNUABI: attributes #[[MODF]] = { "vector-function-abi-variant"= ; SLEEFGNUABI-SAME: "_ZGV_LLVM_N2vl8_modf(_ZGVnN2vl8_modf), ; SLEEFGNUABI-SAME: _ZGVsNxvl8_modf(_ZGVsNxvl8_modf)" } ; SLEEFGNUABI: attributes #[[MODFF]] = { "vector-function-abi-variant"= ; SLEEFGNUABI-SAME: "_ZGV_LLVM_N4vl4_modff(_ZGVnN4vl4_modff), ; SLEEFGNUABI-SAME: _ZGVsNxvl4_modff(_ZGVsNxvl4_modff)" } ; SLEEFGNUABI: attributes #[[SIN]] = { "vector-function-abi-variant"= ; SLEEFGNUABI-SAME: "_ZGV_LLVM_N2v_sin(_ZGVnN2v_sin), ; SLEEFGNUABI-SAME: _ZGVsMxv_sin(_ZGVsMxv_sin)" } ; SLEEFGNUABI: attributes #[[SINCOS]] = { "vector-function-abi-variant"= ; SLEEFGNUABI-SAME: "_ZGV_LLVM_N2vl8l8_sincos(_ZGVnN2vl8l8_sincos), ; SLEEFGNUABI-SAME: _ZGVsNxvl8l8_sincos(_ZGVsNxvl8l8_sincos)" } ; SLEEFGNUABI: attributes #[[SINCOSF]] = { "vector-function-abi-variant"= ; SLEEFGNUABI-SAME: "_ZGV_LLVM_N4vl4l4_sincosf(_ZGVnN4vl4l4_sincosf), ; SLEEFGNUABI-SAME: _ZGVsNxvl4l4_sincosf(_ZGVsNxvl4l4_sincosf)" } ; SLEEFGNUABI: attributes #[[SINCOSPI]] = { "vector-function-abi-variant"= ; SLEEFGNUABI-SAME: "_ZGV_LLVM_N2vl8l8_sincospi(_ZGVnN2vl8l8_sincospi), ; SLEEFGNUABI-SAME: _ZGVsNxvl8l8_sincospi(_ZGVsNxvl8l8_sincospi)" } ; SLEEFGNUABI: attributes #[[SINCOSPIF]] = { "vector-function-abi-variant"= ; SLEEFGNUABI-SAME: "_ZGV_LLVM_N4vl4l4_sincospif(_ZGVnN4vl4l4_sincospif), ; SLEEFGNUABI-SAME: _ZGVsNxvl4l4_sincospif(_ZGVsNxvl4l4_sincospif)" } ; SLEEFGNUABI: attributes #[[LOG10]] = { "vector-function-abi-variant"= ; SLEEFGNUABI-SAME: "_ZGV_LLVM_N4v_llvm.log10.f32(_ZGVnN4v_log10f), ; SLEEFGNUABI-SAME: _ZGVsMxv_llvm.log10.f32(_ZGVsMxv_log10f)" } ; ARMPL: attributes #[[MODF]] = { "vector-function-abi-variant"= ; ARMPL-SAME: "_ZGV_LLVM_N2vl8_modf(armpl_vmodfq_f64)" } ; ARMPL: attributes #[[MODFF]] = { "vector-function-abi-variant"= ; ARMPL-SAME: "_ZGV_LLVM_N4vl4_modff(armpl_vmodfq_f32)" } ; ARMPL: attributes #[[SIN]] = { "vector-function-abi-variant"= ; ARMPL-SAME: "_ZGV_LLVM_N2v_sin(armpl_vsinq_f64), ; ARMPL-SAME _ZGVsMxv_sin(armpl_svsin_f64_x)" } ; ARMPL: attributes #[[SINCOS]] = { "vector-function-abi-variant"= ; ARMPL-SAME: "_ZGV_LLVM_N2vl8l8_sincos(armpl_vsincosq_f64)" } ; ARMPL: attributes #[[SINCOSF]] = { "vector-function-abi-variant"= ; ARMPL-SAME: "_ZGV_LLVM_N4vl4l4_sincosf(armpl_vsincosq_f32)" } ; ARMPL: attributes #[[SINCOSPI]] = { "vector-function-abi-variant"= ; ARMPL-SAME: "_ZGV_LLVM_N2vl8l8_sincospi(armpl_vsincospiq_f64)" } ; ARMPL: attributes #[[SINCOSPIF]] = { "vector-function-abi-variant"= ; ARMPL-SAME: "_ZGV_LLVM_N4vl4l4_sincospif(armpl_vsincospiq_f32)" } ; ARMPL: attributes #[[LOG10]] = { "vector-function-abi-variant"= ; ARMPL-SAME: "_ZGV_LLVM_N4v_llvm.log10.f32(armpl_vlog10q_f32), ; ARMPL-SAME _ZGVsMxv_llvm.log10.f32(armpl_svlog10_f32_x)" }